目录名和工作目录

斜杠表示根目录,如果最后一个名称代表的是文件名。当然,这个文件名也可以是一个目录。

工作目录又叫当前目录,也是进行操作的根目录(但不是系统的根目录),如果命令后面直接输入一个文件名,那么就是代表这个目录在工作目录中,系统也只会在当前目录中搜寻。

绝对目录和相对目录

绝对目录就是从根目录开始。在Linux系统中,根目录是home(这个根目录是当前用户的根目录)目录。

相对目录就是从工作目录(当前目录)开始。大多数时候我们输入一个文件名其实都是输入相对目录,我们也可以输入绝对目录,但那样过于麻烦。

路径名缩写

第一个: ..(两个点号)。这个符号的含义是父目录,也就是上级目录。用..可以回到上级目录然后在进入子目录

例:现在绝对目录是 /home/abcd/ceshi,如果我想进入abcd的gongzuoqu目录,那么输入cd ../gongzuoqu即可。这是从左向右读的, ..代表进入父目录,然后再进入父目录中的工作区目录。

第二个: .(一个点号)。代表的是当前目录,注意任何不以/开头的路径名都被认为相对于工作目录。所以大部分情况下直接输入文件名即可,但是在某些情况下必须输入完整的目录,因此这个时候就需要.代表当前目录便于输入。

unix只能运行它能找到的程序,也就是在path环境变量中的路径。但是如果我们输入绝对路径的话,程序也能运行,因此这里我们就可以简单的用 . 来代替长长的绝对路径名。

如果我们想运行new程序,而这个程序不在搜索路径中,那么可以用 ./new来运行它

一个点号和两个点号都是缩写,所以其实我们运用点号时都是输入绝对路径名

第三个 ~(波浪号)。 用这个符号代表home目录(这里的home是系统的根,也就是没有目录包含它)。

第四个 -. 到上一次操作的目录。

cd pwd 在目录树中移动

pwd命令是显示当前的绝对目录

cd 命令

语法: cd [-LP] [directory | - ]

其中dircetory是你想切换到的目录的名称。

如果只输入cd,那么会进入home目录下。如果输入cd -, 那么将会进入前一个目录,与cd ..命令效果相同。

如果使用绝对路径名,那么第一个符号是/。

例如 cd /home/abcd/gongzuoqu

如果使用相对路径名,那么第一个就没有/

例如 cd gongzuoqu/temp

mkdir rmdir新建目录和移除目录

语法: mkdir [-P] dictory…

首先,可以使用字母,数字和没有特殊含义的标点符号作为文件名。

创建目录要遵循两条规则。第一条,不能在一个目录下创建两个同名的目录。第二条,默认情况下,如果父目录不存在,那么就无法创建目录。可以使用-p选项忽略第二条规则。

语法: redir [-p] directory …

这里要注意只能移除空的目录。如果想要移除非空的目录,可以使用rm程序

如果想一次性移除一串目录,那么可以使用-p选项。但是有一个不是空的就不行(除了在这条链上的目录外)

其次,不能移除根目录和工作目录之间的任何程序。也就是说就算是使用了绝对地址,如果它在工作目录外部,那么也无法移除它。

mv 移动或重命名目录

语法: mv directory target

target如果是一个路径,那么一定是移动目录,如果是名字,那么要看情况。

例如:

/home/harley/data
/home/harley/storge

mv data storage

现在的位置: /home/harley/storge/data

也就是说,如果该路径下没有这个名字的目录,那么就会重命名,但是如果有这个名字的目录,那么就会移动到这个目录下。

pushd,popd,dirs 使用目录栈

语法: pushd [directory | +n]

pop [+n]

dirs [-c] [-l] [-v]

push是将目录的名称压入栈中,pop是弹出栈中,dirs是显示栈的内容,n是标识符

命令 动作
dirs 显示名称,home显示为~
dirs -l home显示为完整路径
dirs -v 每行一个显示名称,并有标识符
pushd directory 将其压入栈中
push +n 把n移到栈顶
popd +n 把n移除
dirs -c 除当前目录外,移除所有目录

在任何时候,栈顶都是存放当前工作目录的名称。每当改变工作目录时,栈顶元素也会随之改变。

如果我们使用了pushd命令,这时我们也会进入这个目录,同时只能进入自己的下级目录。

ls

语法: ls [aCdFglrRs1] [name…]

作用,列举该目录下的文件名称。

参数:

-C 横的列举文件
-1 竖的列举文件 可以与wc -l组成管道
-r 按字母表相反顺序进行排序。
-R 递归。也就是列举完这一层继续列举下一层。如果这个很长的话,可以用less程序
-F 检查文件类型,会增加几种标识,如下表所示
--color 使用不同颜色来显示不同类型文件
-l 显示长列表
-u 显示访问时间
-r reverse 从旧的到新的
-h 自动显示大小
-d 显示目录本身的信息。
-a 显示隐藏文件

标志 含义
非可执行文件
* 可执行文件
/ 目录
@ 符号链接
竖线 命名管道 /FIFO

-hs du -df -quota 掌握磁盘空间使用情况

-s 前面以字节为单位输出文件的大小

-sh 自动选择合适的单位

du(disk usage) 显示文件的大小,这是一个程序

语法: du [-achs] [name…]

-h 显示单位

如果不指定名称,du会递归搜索整个目录树

-s 显示总和

-c 是先输出每个文件的大小,最后输出总量

df 显示磁盘可用空间

quota 显示配额

file 检查文件类型

file的使用相当直接,只需要file + 路径就可以检查那个路径下的文件类型,但是比ls显示的更为详细。

可能显示下列几种类型:

  • ELF:可执行和链接模式
  • 32-bit: 字长
  • LSB: 采用最低有效字节编译(小端序)
  • executable: 可执行文件
  • Intel 80386: 内部文件格式版本
  • GNU/linux2.6.9 操作系统和内核版本
  • dynamically linked 使用共享库
  • stripped 将符号表移除的可执行文件

块和分配单元

在文件系统中,空间以固定大小进行分配,我们把固定大小的组块叫做块。块的大小在不同系统中不同。块的大小有512,1,2,4kb等。典型的linux系统是1kb。

此时我们只是说在文件系统中的分配方式。但是写入到磁盘中时出于效率的考虑,磁盘中也有特定的单元叫做分配单元或者簇。例如,分配单元为8kb代表即使只有1btye的数据系统也会自动分配8kb

使用通配符进行通配

使用通配符可以指定特定的文件名,类似于正则表达式。

符号 含义
* 匹配任何0个或多个字符组成的序列
匹配任何单个字符
[list] 匹配list中任意字符
list 匹配不再list中任意字符
{string1竖线string2} 匹配任意一个字符串

其实就是一个简化版的正则表达式。例如: ls h*表示显示所有以h为开头的文件或目录

此外,还可以使用一些预定义字符类,例如Post not found: :lower:

显示目录树

语法: tree [-adfFilrst] [-L level] [directory…]

level是树的深度

作用:绘制文件系统中任意部分的图形(真的就是一个目录图表,可以自己试一下)。

选项:

-a 显示所有文件,包括点文件
-s 显示文件大小
-F 显示标识文件的标志
-r 以相反顺序输出
-t 按修改时间顺序输出
-d 只显示目录
-i 省略缩进,这种模式只会输出一条条路径,但是不会生成一个图标
-L 限制树的深度。后面的数字就是树的深度

个人意见可以重定向到一个文件中然后再文件中查找。