rmdir 是一个与 mkdir 相对应的命令。 mkdir 是建立目录,而 rmdir 是删除命令。
语法: rmdir [-p] [dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
rm 命令可以同时删除文件或目录
语法: rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
为了演示接下来的指令,我先通过mkdir
和touch
创建几个新文件。
rmdir 空目录
rmdir 空目录名称 #删除该空目录
注:rmdir 指令只能删除空目录,不能删除非空目录和普通文件。
rm 文件 / 目录名
rm 文件名 #删除该文件
注:rm 指令默认是删除普通文件的,如果想要删除目录,需要加上 -r 选项。
rm -r 目录名 #递归删除指定的目录及其内部文件
有时候,我们删除一些文件,系统总会问我们是否想要删除。其实,Linux 系统也会这样。接下来,我给大家举个例子,这个例子涉及了权限的问题,大家可能还做不了,不过我们目前看一下知道就行了。
sudo touch 文件名是一个提权创建新文件的命令,也就是说用 root 用户的身份创建一个新文件。如果删除一个 root 身份创建的文件的话,Linux 系统会提示你是否要删除该文件,n 表示不是, y 表示是。
rm -f 文件名 #强制删除该文件
如果删除一个不属于我们的文件,系统将会询问我们是否要删除,但是有时候我们需要删除很多的文件,每次都询问我们将会很麻烦。所以我们可以加上-f
选项,表示强制删除。
rm -rf 目录名 #递归强制删除指定的目录及其内部文件
rm * -rf #强制删除当前目录下的所有文件
rm -rf 目录名
指令可以删除 Linux 系统下的任何文件,所以就有了rm -rf /
这条删库跑路的指令。需要提醒大家的是,这条指令一定不要去尝试。如果你执行了这条指令,那么你的操作系统一定会挂掉,所以说要慎用。当然,如果作为一个实习生在公司实习,我们一般没有这么高的权限来接触到重要的数据,但是也不要尝试这条指令,因为这是要承担相应责任的。
如果我们在以上的指令都加上-i
选项的话,那么我们删除一个文件或者目录,系统都会询问我们是否删除该文件或者目录。注意:-r 选项最好不要和 -f 选项搭配使用。
那为什么我们删除一个文件或者目录,系统还要询问我呢?因为删除这个文件或者目录,我肯定是想删除的。但是有时候我们可能会出现误删的情况,系统询问你是否真的需要删除,给你一个挽留的机会,这样你也不会骂系统没有这个功能了。
Linux 的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问 Linux 手册页的命令是 man
语法: man [选项] 命令。
常用选项:
解释一下,man 手册分为8章 :
man 是一个查看指令、系统调用和 C语言接口的一个手册。
man man #查找man手册
我们只需要了解前三个章节,其他章节不要求掌握。
man top #查看top命令
man printf #查看printf命令
注:printf 也是一条指令,所以我们可以这样用它。如下图:
当然,printf
也是 C语言中的一个库函数。所以我们可以输入man 3 printf
来查看printf
函数。
man 3 printf #查看第三章节的printf
如果指定在第几个章节找,那么系统就只会在这个章节找。如果没有指定在第几个章节找,那么系统会从第一个章节找,如果没有找到会给出提示系统没有你想要查找的东西。
有些小伙伴可能没有安装 man 手册,那么可以通过输入yum install -y man-pages
来安装。安装完成后,就可以查看 man 手册了。注意,需要用 root 用户安装 man 手册。
语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明:cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
echo 指令
echo
指令是将信息输出到某个流中,可以是标准输出流,也可以是文件流。如果该文件流不存在,echo
指令会创建该文件流。如果该文件流存在,会清空该文件流里的内容,再进行写入。但是echo
指令并不能像printf
指令那样可以格式化输出。注意:如果使用echo
指令输出到文件流中,需要加上>
输出重定向。
将文件拷贝到目录中去
cp 文件名 目录名 #将指定的文件拷贝到指定的目录中去
将目录拷贝到目录中去
cp -rf 目录名 目录名 ##将某个目录强制递归拷贝到指定的目录中去
注意:cp 指令可以加上 -r 、-f 和 -i 选项。
mv 命令是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),是 Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
常用选项:
剪切文件到目录中去
mv 文件名 目录名 #将指定的文件剪切到指定的目录中去
剪切目录到目录中去
mv 源目录 目的目录 #将某个目录剪切到指定的目录中去
对文件进行重命名
mv 文件名 不存在的文件名 #重命名文件
对目录进行重命名
mv 目录名 不存在的目录名 #重命名目录
注意:mv 指令只有 -f 和 -i 选项,并没有 -r 选项。
语法: cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
使用脚本生成大文件
cnt=0; while [ $cnt -le 10000 ] ; do echo "hello 106 [$cnt]"; let cnt++; done > test.txt
该脚本生成了一万零一行的hello 106
的大文件。注意:这条指令要和我写的一模一样。
查看文件内容
cat 文件名 #查看文件内容
cat -n 文件名 #带行号查看文件内容
tac 文件名 #将文件内容反过来打印
注意:cat 和 tac 指令并不适合查看大文本,只适合小文本或者代码片段。如果想要查看大文件,我们就需要学习 more 和 less 指令。
语法: more [选项][文件]
功能: more命令,功能类似 cat
常用选项:
more 文件名 #查看文件内容
注意:more 指令查看的内容并不会将全部内容直接显示出来,需要通过 Enter 键来下翻来查看剩下的内容。但是 more 指令只能下翻而不能上翻。q 退出查看内容。
more -数字 文件名 #查看文件的指定行内容
输入 more 指令后,也可以查找指定的内容。
语法: less [参数] 文件
功能:less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
选项:
查看文件内容
less 指令可以通过上下键来实现上下翻阅,也支持显示行号和搜索功能,大家可以自己尝试一下。因为 less 指令比较好用,所以就推荐大家使用 less 指令来查看大文本。通常来说,大文本就是是大型代码和日志。
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中,而 tail 当然就是看档案的结尾。
语法: head [参数]… [文件]…
功能:
head 用来显示档案的开头至标准输出中,默认head 命令打印其相应文件的开头10 行。
选项:
查看文件头部的内容
head 文件名 #默认打印文件开头的十行内容
head -数字 文件名 #查看文件的开头指定行的内容
tail 命令从指定点开始将文件写到标准输出。使用 tail 命令的 -f 选项可以方便地查阅正在改变的日志文件,tail - f filename 会把 filename 里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。
语法:
tail [必要参数][选择参数] [文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
查看文件尾部的内容
我们可以通过head
指令和tail
指令来查看文件头部和尾部的内容,那如果我想查看中间的十行内容呢?比如第 1000 行到第 1009 行的内容。
借助临时文件
head -1010 test.txt > tmp.txt #将test.txt的前1010行内容重定向到tmp.txt文件中去
tail -10 tmp.txt #显示tmp.txt文件的尾部10行内容
借助管道
head -1010 test.txt | tail -10
我们可以看到,该指令借助了管道一次就能完成任务。那什么是管道呢?指令中的|
就是管道。在 Linux 系统下,管道是用来传输 “资源” 的,且只有一个入口和一个出口。在这里,我们学习一下管道的命令行操作,到了后面的进程间通信,我会给大家讲解管道的原理和实现编码。
注:head
指令默认是往显示器打印的,而tail
指令默认是从文件中读取数据的。但是加上管道后,head
指令就往管道中打印了,而tail
指令就从管道中读取数据了。其实管道是内存空间(以后讲解)。
如果我们想将这十行内容逆置并提前前三行,通过管道|
也能够做到。见下图:
管道除了能实现系统自带的指令,也能实现我们自己实现的功能。比如我们写一个可以将小写字母转换成大写字母的 C语言代码。
我们再将可执行程序change
拷贝到上一级目录中,然后逆置后的前三行内容全部改成大写。
这就是我想要向大家介绍管道的作用。那么我还想跟大家说明一件事,其实键盘和显示器也是一种文件流。因为 Linux 系统有着一切皆文件的设计哲学。
date 显示
date 指定格式显示时间: date +%Y:%m:%d date
用法: date [OPTION] [+FORMAT]
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
显示时间
date #显示时间
除了%
,其余符号可以任意填写,但不能是空格符。
2.时间戳
date +%s #显示从1970年1月1日0时0分0秒到当前时间的秒数
注意:时间戳是非常重要的概念,各行各业都要使用到时间戳。如果时间戳失效了的话,会导致非常大的问题。比如:如果时间戳出现了误差,那么列车的运行就会受到很大影响,甚至发生事故。
将时间戳转换成标准的时间
date +%Y/%m/%d-%H:%M:%S -d@时间戳
可以注意到,时间为 0 转换成标准时间并不是格林威治时间的 1970 年 1 月 1 日 0 时 0 分 0秒,原因是该时间转换成了北京时间的 1970 年 1 月 1日 8时 0 分 0秒。
cal 命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。 “阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数][月份][年份]
功能:用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
查看日历
cal 数字 #显示该年的日历
cal -3 #显示系统前一个月,当前月,下一个月的月历
cal -j #显示当前月的日期是当年的第几天
有关千年虫问题的一个优质视频:点击即可跳转。