基本的Shell命令(一)
文章目录
遍历目录
在Linux文件系统上,可以使用切换目录命令cd将shell会话切换到另一个目录。cd命令的格 式非常简单:
cd destination
cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。
destination参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。
文件和目录列表
要想知道系统中有哪些文件,可以使用列表命令(ls)。
-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行文件的后面加个星号,以便用户找出可在系统上运行的文件。
要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。
-R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中 的文件。如果目录很多,这个输出就会很长。
-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。
如果只使用ls –l命令,并不会显示访问时间。这是因为默 认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:–time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间。
-d命令只列出目录的信息,不列出其中的内容。
要查看文件或目录的inode 编号,可以给ls命令加入-i参数,也可以通过该参数查找链接计数(列表中第三项)
ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。
这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器
当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
- 问号(?)代表一个字符;
- 星号(*)代表零个或多个字符。
除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。
中括号表示一个字符位置并给出多个可能的选择。可以将待选的字符列出来,也可以指定字符范围,例如字母范围[a – i]。另外,可以使用感叹号(!)将不需要的内容排除在外。
处理文件
创建文件
可用touch命令轻松创建空文件.touch命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。
touch命令还可用来改变文件的修改时间。这个操作并不需要改变文件的内容。如果只想改变访问时间,可用-a参数。
复制文件
cp命令需要两个参数——源对象和目标对象:
cp source destination
当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以 destination命名。新文件就像全新的文件一样,有新的修改时间。
如果目标文件已经存在,cp命令 可能并不会提醒这一点。最好是加上-i选项,强制shell询问是否需要覆盖已有文件。
如果目标只是一个目录,而不是一个文件名.目的目录名尾部要加上一个正斜线(/),这表明Documents是目录而非文件。 这有助于明确目的,而且在复制单个文件时非常重要。
如果没有使用正斜线,目的子目录又不存在,就会有麻烦。在这种情况下,将一个文件复制到子目录中,反而会创建一个名为子目录名的文件,连错误消息都不会显示!
cp命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
$ cp -R Scripts/ Mod_Scripts
在执行cp –R命令之前,目录Mod_Scripts并不存在。它是随着cp –R命令被创建的,整个Scripts 目录中的内容都被复制到其中。注意,在新的Mod_Scripts目录中,所有的文件都有对应的新日期。 Mod_Scripts目录现在已经成为了Scripts目录的完整副本。
也可以在cp命令中使用通配符。
链接文件
符号链接
可以使用ln命令以及-s选项来 创建符号链接。
符号链接的文件大小与数据文件的文件大小。符号链接sl_data_file只有94个字节,而data_file有1092个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。
另一种证明链接文件是独立文件的方法是查看inode编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。
硬链接
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,
只不过这次使用ln命令时不再需要加入额外的参数了。
注意, 带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。它们的文件大小也一模一样。
重命名文件
在Linux中,重命名文件称为移动(moving)。mv命令可以将文件和目录移动到另一个位置或重新命名。
注意,移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv只影响文件名。
也可以使用mv来移动文件的位置。
mv fzll Pictures/
在上例中,我们使用mv命令把文件fzll从/home/christine移动到了/home/christine/Pirctures。和 刚才一样,这个操作并没有改变文件的inode编号或时间戳。
也可以使用mv命令移动整个目录及其内容。
删除文件
在Linux中,删除(deleting)叫作移除(removing)。bash shell中删除文件的命令是rm。rm命令的基本格式非常简单。
注意,-i命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回。因此,在使用rm命令时,要养成总是加入-i参数的好习惯。
rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除。小心为妙!
处理目录
在Linux中,有些命令(比如cp命令)对文件和目录都有效,而有些只对目录有效。
创建目录
在Linux中创建目录很简单,用mkdir命令即可
mkdir命令的-p参数可以根据需要创建缺失的父目录。父目录是包含目录树中下一级目录的目录。
删除目录
默认情况下,rmdir命令只删除空目录。因为我们在New_Dir目录下创建了一个文件my_file, 所以rmdir命令拒绝删除目录。
rmdir并没有-i选项来询问是否要删除目录。这也是为什么说rmdir只能删除空目录还是有 好处的原因。
也可以在整个非空目录上使用rm命令。使用-r选项使得命令可以向下进入目录,删除其中 的文件,然后再删除目录本身.每要删除一个文件,都会有提示,确定是否删除该文件.
对rm命令而言,-r参数和-R参数的效果是一样的。-R参数同样可以递归地删除目录中的 文件。shell命令很少会就相同的功能采用不同大小写的参数。
一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令。
rm -rf命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有 超级用户权限的时候。
查看文件内容
查看文件类型
file命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型的
查看整个文件
如果手头有一个很大的文本文件,你可能会想看看里面是什么内容。在Linux上有3个不同的命令可以完成这个任务。
cat
cat命令是显示文本文件中所有数据的得力工具。
-n参数会给所有的行加上行号。如果只想给有文本的行加上行号,可以用-b参数。
最后,如果不想让制表符出现,可以用-T参数。
cat命令的主要缺陷是:一旦运行,你就无法控制后面的操作。为了解决这个问题,开发人员编写了more命令。more命令会显示文本文件的内容,但会在显示每页数据之后停下来。
rev
rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
tac
tac的功能是将文件从最后一行开始倒过来将内容数据输出到屏幕上。我们可以发现,tac实际上是cat反过来写。
more
more命令是分页工具。当使用man命令时,分页工具会显示所选的bash 手册页面。和在手册页中前后移动一样,你可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出。
less
less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相 同的命令集,它还包括更多的选项。
其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。在查看文件内容时,这给了你全面的控制权。
文章作者 Forz
上次更新 2017-08-06