ls 指令
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件;对于文件,将列出文件名以及其他信息。
常用选项
-l 列出文件的详细信息;注:ls -l 等价于 ll; -a 列出目录下的所有文件,包括以 . 开头的隐含文件; -R 列出所有子目录下的文件;(递归) -d 将目录像文件一样显示,而不是显示其下的文件; 如:ls –d 指定目录; -i 输出文件的 i 节点的索引信息; 如 ls –ai 指定文件;
-k 以 k 字节的形式表示文件的大小;ls –alk 指定文件;
-n 用数字的 UID,GID 代替名称; -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表 示符号链接;“|”表示FIFOs;“=”表示套接字(sockets);(目录类型识别) -r 对目录反向排序;
-t 以时间排序;
-s 在l文件名后输出该文件的大小;
-1 一行只输出一个文件;
拓展知识
1、Linux 是一款操作系统,而操作系统本质上一款管理软件,它通过对下管理好软硬件资源 (驱动设备和硬件) 这个手段,来达到对上 (应用软件) 提供良好的 (安全、稳定、高效) 运行环境这个目的;
2、一个文件的数据由两部分组成:内容数据与属性数据,内容数据是指我们往文件中写入的数据,而属性数据则是指文件的大小、类型、权限、创建时间等数据;所以说,空文件也是会占用磁盘空间的,因为它要存储文件的属性数据;
3、Linux 中 ls -l 等价于 ll,基于这个原则,其他与 -l 搭配的复合选项也可以被简写,如 ls -al 也可以写成 ll -a;
4、Linux 中以 . 开头的文件是隐藏文件,单独的一个 . 是当前目录,单独的 … 是上级目录;
5、Linux 中,正常颜色为普通文件,蓝色为目录,也就是我们在 windows 中所说的文件夹。
指令演示
ls、ls -l 与 ll:我们可以看到,ls 只是列出了文件的名称,而 ls -l 则是显示出来文件的其他信息,同时,ls -l 与 ll 命令的作用相同。
ls -al (ll -a):当我们带上了 -a 选项后,我们观察到了三个以 . 开头的文件,其中一个是我们自己创建的隐藏文件,另外两个是当前目录以及上级目录。
ls -d 与 ls -R:当我们使用 -d 选项时,系统只会显示出目录的信息,而当我们用 -R 选项时,系统会直接显示目录里面文件的信息。
pwd 指令
语法:pwd
功能:显示用户当前所在的目录;
常用选项:pwd 命令的功能与使用都十分简单,也没有附加选项;
指令演示

cd 指令
语法:cd 目录名
功能:改变工作目录:将当前工作目录改变到指定的目录下;
常用选项:和 pwd 指令一样,cd 指令也没有选项,其功能和使用同样十分简单。
拓展知识
1、不管是 Linux 还是 Windows,其磁盘中的文件和目录的结构都是树状结构 (多叉树),因为在树状结构中,得到一个文件/目录的路径是唯一的,那么我们就可以用路径来唯一标识一个文件/目录;同时,根据目录/文件以及树的特点我们可以得出:树的叶子节点一定是文件,树的路径节点 (非叶子节点) 一定是目录;
2、我们要标识一个文件有两种方式:绝对路径和相对路径;绝对路径就是从根目录开始,一级一级往下找,直到找到该文件;相对路径就是从当前路径开始,不断往后找;绝对路径安全但麻烦,相对路径便捷但没那么安全;所以官方文档中一般使用的都是绝对路径,而我们日常中使用相对路径居多;
3、在 Windows 中,我们使用 \ 作为路径分隔符,但是这个其实是不规范的,因为它会与转义字符\发生冲突;而在 Linux 中,我们使用的 / 作为路径分隔符,其更为规范与安全;
指令演示

tree 指令
语法:tree [选项] [目录]
功能:以树状格式列出目录的内容;
常用选项
-a 列出所有文件,包括隐藏文件、目录;
-C 在文件和目录清单上加上色彩,便于区分文件类型;
-d 仅列出目录名称,而非内容;
-D 列出文件或目录更改时间;
-L 目录树的最大显示深度;
-p 打印结构的同时打印文件权限; -l 跟随目录的符号链接,就像它们是目录一样,避免导致递归循环的链接; -f 打印每个文件的完整路径前缀;
-F 在每个条目后加上文件类型的指示符(如目录是/);
指令演示
tree 不加选项,查看当前目录的结构 (不包括隐藏文件):
tree -a 列出当前目录下所有文件:
touch 指令
语法:touch [选项] 文件名
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件;
常用选项
-a 或 --time=atime 或 --time=access 或 --time=use 只更改存取时间; -c 或 --no-create 不建立任何文档; -d 使用指定的日期时间,而非现在的时间; -f 此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题; -m 或 --time=mtime 或 --time=modify 只更改变动时间; -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同; -t 使用指定的日期时间,而非现在的时间;
拓展知识
1、文件的时间有三种:
- 最近访问时间(Access):cat、less等查看文件后,该时间改变;
- 最近更改时间(Modify):使用 nano/vim 等编辑器修改文件内容后,三个时间都改变;
- 最近改动时间(Change):chmod 修改文件权限或属性后,该时间改变;
2、stat 指令可以显示文件或文件系统的状态;
2、touch 只能用来创建普通文件,不能创建目录;
指令演示

mkdir 指令
语法:mkdir [选项] 目录名
功能:在当前目录下创建目录;
常用选项
-p :–parents 可以是一个路径名称;此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
指令演示

rmdir 指令
语法:rmdir [选项] [dirName]
适用对象:具有当前目录操作权限的所有使用者;
功能:删除目录;
常用选项
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除;
指令演示

rm 指令
语法:rm [选项] [文件名/目录名]
适用对象:具有当前目录操作权限的所有使用者;
功能:删除文件或目录;
常用选项
-f 不进行确认直接删除文件,即使文件属性为只读(即写保护);
-r 删除目录及其下所有文件 (递归删除);
-i 删除前逐一询问确认;
拓展知识
在计算机行业中有一个梗 – 删库跑路,其实指的就是 rm 指令;因为 rm 能够删除目录及目录下的所有文件,而 Linux 中的所有文件都是在根目录 / 下的,所以当我们执行 “rm -rf /” 这条指令时,一个普通用户的所有数据包括 Linux 这个系统都会被全部删除;而 Linux 和 Windows 不同,在 Windows 中我们可以到回收站中恢复我们删除的数据,但是在 Linux 中想要恢复删除的数据十分困难;
同时,Linux 分为普通用户和root用户,普通用户是由root用户创建的,root的权限最高,所以当我们拥有 root 密码时,如果执行 “sudo rm -rf /” ,那么不仅仅是我们这一个用户,其他所有用户的数据也会被删空,这是非常严重的情况。
指令演示
rm 删除普通文件:
rm 递归强制删除目录:
man 指令
语法: man [num] 命令;
功能:Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助;访问Linux手册页的命令是 man;
手册章节
-数字 | -意义 |
---|
1 | 普通命令 | 2 | 系统调用 | 3 | C语言库函数 | 4 | 设备或特殊文件 | 5 | 文件格式和规则 | 6 | 游戏及其他 | 7 | 宏、包及其他杂项 | 8 | 系统管理员相关的命令 |
拓展知识
1、man 指令需要安装后才能使用,安装命令是 “yum install -y man-pages”,且此命名只能由 root 用户来安装或者使用 sudo;
2、man 如果不指定具体章节就会默认从一号手册开始找,直到找到才停下;如果指定了章节,就只会在该章节里面去找;
3、由于Linux是用C语言实现的,所以man中默认包含了C语言的函数手册;如果要查看其他语言,如C++/java/python则需要先在Linux中安装,不过这里建议直接到对应语言的官网中去查找;
4、man 手册有汉化版的,不过目前只能汉化一号手册;但是我们作为一个程序员,应该具备基本的阅读英语文档的能力,所以我不建议大家去汉化,而是从现在开始慢慢去养成阅读英语文档的习惯;
5、大家使用 man 指令进行对应文档后,按 q 键即可退出文档。
指令演示
 
cp 指令
语法:cp [选项] 源文件或目录 目标文件或目录
功能:cp 是 copy 的缩写,其功能是复制文件或目录,相当于 Windows 下的复制粘贴;
常用选项
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在; -i 或 --interactive 覆盖文件之前先询问用户; -r递归处理,将指定目录下的文件与子目录一并处理;若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理; -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理;
拓展知识
cp 指令用于复制文件或目录,如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中;若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
指令演示
复制不重名的普通文件:
复制重名文件:当复制重名文件时,如果我们不希望操作系统向我们确认,可以使用 -f 选项来强制复制
复制整个目录及目录下所有的文件:
mv 指令
语法:mv [选项] 源文件或目录 目标文件或目录
功能:mv 是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的指令,经常用来备份文件或者目录;
常用选项
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖;
拓展知识
1、根据 mv 指令中第二个参数类型的不同(是目标文件还是目标目录),mv 指令会将文件重命名或将其移至一个新的目录中;
2、当第二个参数类型是文件时,mv 命令完成文件重命名,此时源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名;
3、当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中
指令演示
移动文件或目录: 
重命名目录或文件:
cat 指令
语法:cat [选项] [文件]
功能:将整个文件的内容从上到下显示到终端上 (屏幕);
常用选项
-n 对输出的所有行编号;
-b 对非空输出行编号;
-s 不输出多行空行;
注:与 cat 指令对应的还有一个指令 – tac,tac 会将文件内容从下到上显示到终端,但是 tac 不能显示行号;
拓展知识
为了方便后面指令的演示,这里我们使用 shell 脚本生成一段简单的具有 1W 行内容的文本,脚本指令如下:
cnt=0; while [ $cnt -le 10000 ] ; do echo "hello linux [$cnt]"; let cnt++; done > test.txt
然后我们可以使用 nano/vim 来查看 test.txt 中的内容 (注意:第一次使用 nano 需要安装 – yum install -y nano):
执行指令之前:
执行指令之后: 
然后我们用 nano/vim 在test.txt 中添加几行内容:  
指令演示
带行号与不带行号显示: 
more 指令
语法:more [选项] [文件]
功能:more 命令功能类似 cat,都是将文本中的内容显示到终端上,但是与 cat 不同的是,more 会以全屏幕的方式按页显示文本文件的内容,当我们按空白键(space)时就往下一页显示,按 b 键时就会往回(back)一页显示,而且 more 还有搜寻字串的功能;同时,由于 more 命令从前向后读取文件,因此在启动时就加载整个文件;
常用选项
+n 从笫n行开始显示; -n 定义屏幕大小为n行; /字符串:向下搜索“字符串”的功能; -c 从顶部清屏,然后显示; -p 通过清除窗口而不是滚屏来对文件进行换页,与 -c 选项相似; -s 把连续的多个空行显示为一行; -u 把文件内容中的下画线去掉;
拓展知识
1、在 more 中,我们可以使用 /[目标字符串] 来查找字符串;但是 more 只能查找处于文本后面的字符串,而不能查找处于文本前面的字符串; 
2、我们可以按 q 键退出查看;
指令演示
指定页面行数显示:
查找字符串: 
less 指令
语法: less [参数] 文件
功能:less 与 more 类似,但使用 less 可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件,对于显示大型文件具有较高的效率。
常用选项
-i 忽略搜索时的大小写;
-N 显示每行的行号;
/字符串:向下搜索“字符串”的功能;
?字符串:向上搜索“字符串”的功能;
n 重复前一个搜索(与 / 或 ? 有关);
N 反向重复前一个搜索(与 / 或 ? 有关);
拓展知识
1、less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大;
2、less 的用法比起 more 更加的有弹性;在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能前后翻看文件,更容易用来查看一个文件的内容;
3、除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜;
指令演示
向后查找: 
向前查找: 
head 指令
语法:head [参数] [文件]
功能:head 就像它的名字一样的浅显易懂,它是用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头10行;
常用选项
-n<行数> 指定显示的行数;
指令演示

tail 指令
语法:tail [参数] [文件]
功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理;常用查看日志文件。
常用选项
f 循环读取;
-n<行数> 指定显示行数;
拓展知识
1、tail 命令从指定点开始将文件写到标准输出;
2、使用tail命令的 -f 选项可以方便的查阅正在改变的日志文件;
3、tail - f filename 会把 filename里最尾部的内容显示在屏幕上,并且会自动刷新,使你看到最新的文件内容。
指令演示

现在我们知道了如何显示文件头部和文件尾部的数据,那么**如何显示文件中间位置的数据呢?**方法有以下两种:
1、重定位
我们可以先使用重定位符 > 将由head指令得到的数据保存到一个临时文件中,然后再使用tail指令取出临时文件中尾部的数据,这些数据就是test.txt中部位置的数据。
但是我们发现这种方式要进行数据拷贝以及产生临时文件,在时间和空间上都会有消耗,所以我们一般用第二种方式。(注:对于重定向命名来说,如果存在目标临时文件,就将数据放入该临时文件中,如果没有则会自动创建一个临时文件)
2、管道
在我们日常生活中存在许多管道,比如天然气管道、煤气管道、石油管道,它们都有一个共同的作用 – 运输资源;而对于计算机来说,数据就是资源,所以Linux中的管道就是用于传输数据的一种手段,它分为入口和出口。
我们知道,head 和 tail 都是从文件中读取数据,然后输出到终端;在下面的程序中,head 和 tail 被管道连接,所以 head 从文件中读取的数据会直接流入管道中,然后 tail 从管道中读取数据,然后输出到终端上。
管道之间可以配合使用,就像工厂中的流水线一样,一个产品可以经过不同的管道加工,然后被输出出来;比如我们可以多使用几个管道来达到逆序输出test.txt中中间部分的三行数据的效果。
上述命令的分解效果如下:
|