作者:@阿亮joy.
专栏:《吃透西嘎嘎》
座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根
rmdir是一个与mkdir相对应的命令。 mkdir是建立目录,而rmdir是删除命令。
语法: rmdir [-p] [dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
- -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm命令可以同时删除文件或目录
语法: rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
为了演示接下来的指令,我先通过mkdir
和touch
创建几个新文件。
rmdir 空目录
rmdir 空目录名称 #删除该空目录
注:rmdir指令只能删除空目录,不能删除非空目录和普通文件。
rm 文件名 #删除该文件
注:rm 指令默认是删除普通文件的,如果想要删除目录,需要加上 -r 选项。
rm -r 目录名 #递归删除指定的目录及其内部文件
有时候,我们删除一些文件,系统总会问我们是否想要删除。其实,Linux 系统也会这样。接下来,我给大家举个例子,这个例子涉及了权限的问题,大家可能还做不了,不过我们目前看一下知道就行了。
sudo touch 文件名是一个提权创建新文件的命令,也就是说用 root 用户的身份创建一个新文件。如果删除一个 root 身份创建的文件的话,Linux 系统会提示你是否要删除该文件,n 表示不是, y表示是。
rm -f 文件名 #强制删除该文件
如果删除一个不属于我们的文件,系统将会询问我们是否要删除,但是有时候我们需要删除很多的文件,每次都询问我们将会很麻烦。所以我们可以加上-f
选项,表示强制删除。
rm -rf 目录名 #递归强制删除指定的目录及其内部文件
rm -rf 目录名
指令可以删除 Linux 系统下的任何文件,所以就有了rm -rf /
这条删库跑路的指令。需要提醒大家的是,这条指令一定不要去尝试。如果你执行了这条指令,那么你的操作系统一定会挂掉,所以说要慎用。当然,如果作为一个实习生在公司实习,我们一般没有这么高的权限来接触到重要的数据,但是也不要尝试这条指令,因为这是要承担相应责任的。
如果我们在以上的指令都加上-i
选项的话,那么我们删除一个文件或者目录,系统都会询问我们是否删除该文件或者目录。注意:-r 选项最好不要和 -f 选项搭配使用。
那为什么我们删除一个文件或者目录,系统还要询问我呢?因为删除这个文件或者目录,我肯定是想删除的。但是有时候我们可能会出现误删的情况,系统询问你是否真的需要删除,给你一个挽留的机会,这样你也不会骂系统没有这个功能了。
Linux 的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问 Linux 手册页的命令是 man
语法: man [选项] 命令。
常用选项:
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按 下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,man 手册分为8章 :
- 1 是普通的命令
- 2 是系统调用,如 open,write 之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件
- 3 是库函数,如 printf,fread等
- 4是特殊文件,也就是 /dev 下的各种设备文件
- 5 是指文件的格式,比如 passwd等就会说明这个文件中各个字段的含义
- 6 是给游戏留的,由各个游戏自己定义
- 7 是附件还有一些变量,比如向 environ 这种全局变量在这里就有说明
- 8 是系统管理用的命令,这些命令只能由 root 使用,如 ifconfig
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 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链 接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
echo 指令
echo
指令是将信息输出到某个流中,可以是标准输出流,也可以是文件流。如果该文件流不存在,echo
指令会创建该文件流。如果该文件流存在,会清空该文件流里的内容,再进行写入。但是echo
指令并不能像printf
指令那样可以格式化输出。注意:如果使用echo
指令输出到文件流中,需要加上>
输出重定向。
将文件拷贝到目录中去
cp 文件名 目录名 #将指定的文件拷贝到指定的目录中去
cp -rf 目录名 目录名 ##将某个目录强制递归拷贝到指定的目录中去
mv命令是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),是 Linux系 统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视 mv 命令中第二个参数类型的不同(是目标文件还是目标目录), mv 命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时, mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv 命令将各参数指定的源文件均移至目标目录中。
常用选项:
- -f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
剪切文件到目录中去
mv 文件名 目录名 #将指定的文件剪切到指定的目录中去
将某个目录剪切到指定的目录中去
mv 文件名 不存在的文件名 #重命名文件
mv 目录名 不存在的目录名 #重命名目录
注意:mv 指令只有 -f 和 -i 选项,并没有 -r 选项。
语法: cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
使用脚本生成大文件
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
常用选项:
- -n 对输出的所有行编号
- q 退出more
more 文件名 #查看文件内容
注意:more 指令查看的内容并不会将全部内容直接显示出来,需要通过 Enter 键来下翻来查看剩下的内容。但是 more 指令只能下翻而不能上翻。q 退出查看内容。
more -数字 文件名 #查看文件的指定行内容
- less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极 其强大。
- less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看 。
- 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
- 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能:less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
选项:
- -i 忽略搜索时的大小写
- -N 显示每行的行号
- / 字符串:向下搜索“字符串”的功能
- ? 字符串:向上搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- q: quit
查看文件内容
less 指令可以通过上下键来实现上下翻阅,也支持显示行号和搜索功能,大家可以自己尝试一下。因为 less 指令比较好用,所以就推荐大家 使用 less 指令来查看大文本。通常来说,大文本就是是大型代码和日志。
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中,而 tail 当然就是看档案的结尾。
语法: head [参数]… [文件]…
功能:
head 用来显示档案的开头至标准输出中,默认head 命令打印其相应文件的开头10 行。
选项:
- -n<行数> 显示的行数
查看文件头部的内容
head 文件名 #默认打印文件开头的十行内容
head -数字 文件名 #查看文件的开头指定行的内容
tail 命令从指定点开始将文件写到标准输出。使用 tail 命令的 -f 选项可以方便地查阅正在改变的日志文件,tail - f filename 会把 filename 里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。
语法:
tail [必要参数][选择参数] [文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
- -f 循环读取
- -n<行数> 显示行数
查看文件尾部的内容
我们可以通过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.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
- %H : 小时(00~23)
- %M : 分钟(00~59)
- %S : 秒(00~59)
- %X : 相当于 %H:%M:%S
- %d : 日 (01~31)
- %m : 月份 (01~12)
- %Y : 完整年份 (0000~9999)
- %F : 相当于 %Y-%m-%d
显示时间
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),如有两个参数,则表示月份和年份
常用选项:
- -3 显示系统前一个月,当前月,下一个月的月历
- -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前
月在一年中的天数)- -y 显示当前年份的日日份
查看日历
cal 数字 #显示该年的日历
cal -3 #显示系统前一个月,当前月,下一个月的月历
本篇博客主要讲的还是 Linux 的基本指令,以上的指令不需要记,多敲敲就能够记住了。以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!谢谢大家!❣️