Linux命令行-文件与目录列表
文件与目录-ls命令
上篇我们已经知道了如何遍历系统和验证当前的工作目录,接下来就可以开始探索各种目录中的文件了。
要想知道目录中有那些文件,可以使用列表命令(ls)。
ls命令最基本的形式会显示当前目录下的文件和目录,如下图所示:
ls命令带上-F参数的ls命令轻松区分文件和目录。使用-F参数可以得到如下输出:
基本的ls命令在某种意义上有点容易让人误解。它显示了当前目录下的文件和目录,但并没有将全部都显示出来。Linux经常采用隐藏文件来保存配置信息。在Linux上,隐藏文件通常是文件名以点号开始的文件。要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。
ls命令中的-R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。如下图所示:
Tip:输入参数时可以不用像图片中一样,ls -F -R,可以进行合并 ls -FR。
在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。
在这些相关信息中主要分为以下这些:
文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);
文件的权限(参见第6章);
文件的硬链接总数;
文件属主的用户名;
文件属组的组名;
文件的大小(以字节为单位);
文件的上次修改时间;
文件名或目录名。
Tip:在shell中输入man ls 可以查看ls命令的各种参数,man命令同样适用于其他指令。
前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。ls命令还支持在命令行中定义过滤器,它会用过滤器来决定应该在输出中显示哪些文件或目录。
当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
问号(?)代表一个字符;
星号(*)代表零个或多个字符。
问号可用于过滤器字符串中替代任意位置的单个字符。
在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。下面是中括号的两种用法:
另外,可以使用感叹号(!)将不需要的内容排除在外。
Tip:在使用 (!) 时,也需要在外面加上中括号。
文件处理
创建文件-touch命令
我们在学习的过程时不时会遇到创建空文件的情况,这时可以使用touch命令创建空文件,注意文件的大小是0。而且touch命令还可以用来改变文件的修改时间,这个操作并不会改变文件的内容。
那么touch命令与mkdir命令的区别在什么地方?
touch命令:
语法:touch [options] filename
-a:改变访问时间
-m:改变改动时间
-t timestamp:改变访问时间和改动时间为timestamp
mkdir命令:
语法:mkdir [options] dirname
-p:递归创建文件夹
-mmode:新建文件夹,并设置文件夹的文件访问模式为mode
总结来说,一个是创建文件,一个是创建文件夹。
复制文件-cp命令
在最基本的用法里,cp命令需要两个参数——源对象和目标对象:
cp source destination
当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的修改时间。
Tip:如果目标文件已经存在,cp命令可能并不会提醒这一点。最好是加上-i选项,强制shell询问是否需要覆盖已有文件。
另外,cp命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
Tip:cp命令中也可以使用通配符,除了单点符和通配符之外,还可以使用shell的另一特性,那就是制表键自动补全。
制表键自动补全
在我们日常使用命令行时,由于繁多且复杂,很容易输错命令、目录名和文件名,这正是制表键自动补全挺身而出的时候。制表键自动补全允许你在输入文件名或目录名时按一下制表键,让shell帮忙将内容补充完整。
Tip:使用制表键自动补全的的技巧在于要给shell足够的文件名信息,使其能够将需要文件同其他
文件区分开。假如有另一个文件名也是以really开头,那么就算按了制表键,也无法完成文件名
的自动补全。这时候你会听到嘟的一声。要是再按一下制表键,shell就会列出所有以really开头的
文件名。这个特性可以让你观察究竟应该输入哪些内容才能完成自动补全。
链接文件
链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接:
符号链接:ln -s filename
硬链接:ln filename
符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。
符号链接类似于C语言的指针!若是想要验证是否为不同的文件,可以使用 ls -i 命令查看incode编号。
Tip:复制链接文件的时候,产生的是源文件的副本,容易弄混乱,不如创建源文件的另一个链接,一个源文件可以有多个链接,千万不要创建软链接的软链接,容易造成断裂。
重命名文件
在Linux中,重命名文件称为移动。mv命令可以将文件和目录移动到另一个位置或重新命名。
Tip:移动文件会将文件名进行更改,但inode编号和时间戳保持不变。这是因为mv只影响文件名。
我们可以看到在重命名目录之后,原来的目录名已经不存在了。
删除文件
在Linux中,删除(deleting)叫作移除(removing)。bash shell中删除文件的命令是rm。rm命令的基本格式非常简单。
rm -i filename
Tip:-i命令参数提示你是不是要真的删除该文件。ubuntu中虽然有回收站或垃圾箱,但是,在使用rm命令时,我们仍要养成总是加入-i参数的好习惯。
rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除。
下篇将介绍mkdir命令的使用场景–目录。