文本文件编辑命令
在Linux系统中“一切都是文件”,对服务程序进行配置自然也就是编辑程序的配置文件。
cat命令
cat命令用于查看纯文本文件(内容较少的),英文全称为:“concatenate”,语法格式为:“cat [参数] 文件名称”。
- 查看文本内容时显示行号:
[root@linuxprobe ~]# cat -n filename
more命令
more命令用于查看纯文本文件(内容较多的),语法格式为:“more [参数] 文件名称”。
- more命令会在最下面使用百分比的形式来提示已经阅读了多少内容,还可以使用空格键或回车键向下翻页:
[root@linuxprobe ~]# more filename
head命令
head命令用于查看纯文本文件的前N行,语法格式为:“head [参数] 文件名称”。
- 查看文本中前10行的内容:
[root@linuxprobe ~]# head -n 10 filename
tail命令
tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为:“tail [参数] 文件名称”。
- 查看文本内容的最后10行:
[root@linuxprobe ~]# tail -n 20 filename
- 实时查看最新日志文件,持续刷新一个文件的内容:
[root@linuxprobe ~]# tail -f filename
tr命令
tr命令用于替换文本内容中的字符,英文全称为:“translate”,语法格式为:“tr [原始字符] [目标字符]”。
- 把某个文本内容中的英文全部替换为大写:
[root@linuxprobe ~]# cat filename | tr [a-z] [A-Z]
wc命令
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为:“word counts”,语法格式为:“wc [参数] 文件名称”。
- wc的参数以及相应的作用如下表所示:
参数 | 作用 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
- Linux系统中,/etc/passwd是用于保存系统账户信息的文件,统计当前系统中有多少个用户:
[root@linuxprobe ~]# wc -l /etc/passwd
stat命令
stat命令用于查看文件的具体存储细节和时间等信息,英文全称为:“status”,语法格式为:“stat 文件名称”。
- 在Linux系统中,文件包含三种时间状态,分别是:
含义 | |
---|---|
Access Time | 最后一次内容被访问的时间,简称Atime |
Modify Time | 最后一次内容被修改的时间,简称Mtime |
Change Time | 文件属性最后一次被修改的时间,简称Ctime |
- 查看文件上面的三种时间状态信息:
grep命令
grep命令用于按行提取文本内容,语法格式为:“grep [参数] 文件名称”。
- 两个最常用的参数:
参数 | 含义 |
---|---|
-n | 用于显示搜索到信息的行号 |
-v | 用于反选信息(即没有包含关键词的所有信息行) |
- grep命令的参数及其作用如表所示
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行 |
- 在Linux系统中,/etc/passwd文件是保存着所有的用户信息,用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:
[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd
cut命令
cut命令用于按列提取文本内容,语法格式为:“cut [参数] 文件名称”。
- 系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@linuxprobe ~]# head -n 2 /etc/passwd
-
按列搜索,要使用-f参数来设置需要看的列数,-d参数来设置间隔符号
-
提取passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@linuxprobe ~]# cut -d : -f 1 /etc/passwd
diff命令
diff命令用于比较多个文件之间内容的差异,英文全称为:“different”,语法格式为:“diff [参数] 文件名称A 文件名称B”。
参数 | 含义 |
---|---|
--brief | 确认两个文件是否不同 |
-c | 详细比较出多个文件的差异之处 |
- 例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
[root@linuxprobe ~]# cat diff_A.txt
[root@linuxprobe ~]# cat diff_B.txt
- 接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
- 最后使用带有-c参数的diff命令来描述文件内容具体的不同:
[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
uniq命令
uniq命令用于去除文本中连续的重复行,英文全称为:“unique”,语法格式为:“uniq [参数] 文件名称”。
- 我们对两个文本内容进行操作,区别一目了然:
[root@linuxprobe ~]# cat uniq.txt
[root@linuxprobe ~]# uniq uniq.txt
sort命令
sort命令用于对文本内容进行再排序,语法格式为:“sort [参数] 文件名称”。
- sort命令的参数及其作用如表所示
参数 | 作用 |
---|---|
-f | 忽略大小写 |
-b | 忽略缩进与空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定间隔符 |
-k | 设置字段范围 |
- sort命令执行后默认会按照字母顺序进行排序,非常方便:
[root@linuxprobe ~]# cat fruit.txt
[root@linuxprobe ~]# sort fruit.txt
- 与uniq命令不同,sort命令不论内容之间是否夹杂有其它内容,只要有两个一摸一样的内容行,就可以使用**-u参数进行去重操作**:
[root@linuxprobe ~]# cat sort.txt
[root@linuxprobe ~]# sort -u sort.txt
- sort还能对数字进行排序,而且不会出现1小于20这种问题(有些命令只比较第一位):
[root@linuxprobe ~]# cat number.txt
[root@linuxprobe ~]# sort -n number.txt
- 下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子:
[root@linuxprobe ~]# cat user.txt
- 上图内容是用冒号进行间隔的五个字段,以第三个字段中的数字作为排序依据,可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序:
[root@linuxprobe ~]# sort -t : -k 3 -n user.txt
文件目录管理命令
Linux系统日常运维工作中最常用的命令,实现对文件的创建、修改、复制、剪切、更名与删除等操作。
touch命令
touch命令用于创建空白文件或设置文件的时间,语法格式为:“touch [参数] 文件名称”。
- 创建出一个名为linuxprobe的空白文本文件:
[root@linuxprobe ~]# touch linuxprobe
- 设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)。touch命令的参数及其作用如表所示。
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
- 先使用ls命令查看一个文件的修改时间,随后修改它,再查看一下文件时间发生了变化:
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
[root@linuxprobe ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg [root@linuxprobe ~]# ls -l anaconda-ks.cfg
- 如果不想让别人知道我们修改了它,可以用touch命令把修改后的文件时间设置成修改之前的时间(很多***就是这样做的):
[root@linuxprobe ~]# touch -d "2020-05-04 15:44" anaconda-ks.cfg
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
mkdir命令
mkdir命令用于创建空白的目录,英文全称为:“make directory”,语法格式为:“mkdir [参数] 目录名称”。
- 除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录:
[root@linuxprobe ~]# mkdir linuxprobe
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e
[root@linuxprobe linuxprobe]# cd a
[root@linuxprobe a]# cd b
[root@linuxprobe b]#
cp命令
cp命令用于复制文件或目录,英文全称为:“copy”,语法格式为:“cp [参数] 源文件名称 目标文件名称”。
- 在Linux系统中,复制操作具体分为3种情况:
目标文件 | cp作用 |
---|---|
目录 | 会把源文件复制到该目录中 |
普通文件 | 会询问是否要覆盖它 |
不存在 | 执行正常的复制操作 |
- 复制目录时要加上-r参数,cp命令的参数及其作用如表所示。
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r为上述参数) |
- 使用创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:
[root@linuxprobe ~]# touch install.log
[root@linuxprobe ~]# cp install.log x.log
[root@linuxprobe ~]# ls install.log x.log
mv命令
mv命令用于剪切或重命名文件,英文全称为:“move”,语法格式为:“mv [参数] 源文件名称 目标文件名称”。
- 剪切操作不同于复制操作,它会把源文件删除掉,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作:
[root@linuxprobe ~]# mv x.log linux.log
[root@linuxprobe ~]# ls install.log linux.log
rm命令
rm命令用于删除文件或目录,英文全称为:“remove”,语法格式为:“rm [参数] 文件名称”。
- 在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想看到确认信息,可使用rm -f来强制删除。
- 删除一个目录,需要在rm命令后面加一个-r参数才可以,否则删除不掉。
- rm命令的参数及其作用如表所示。
参数 | 作用 |
---|---|
-f | 强制执行 |
-i | 删除前询问 |
-r | 删除目录 |
-v | 显示过程 |
- 尝试删除前面创建的install.log和linux.log文件,感受下加与不加-f参数的区别:
[root@linuxprobe ~]# rm install.log
[root@linuxprobe ~]# rm -f linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#
dd命令
dd命令用于按照指定大小的数据块个数来复制文件或转换文件,语法格式为:“dd if=参数值 of=参数值 count=参数值 bs=参数值”。
- dd命令还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件。这个文件不会占用系统存储空间,却可以提供无穷无尽的数据,因此常常使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如表所示。
参数 | 作用 |
---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
- 用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。理解了这个命令后,以后就能随意创建任意大小的文件了:
[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
- 使用dd命令可以把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像:
[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-LinuxProbe.Com.iso
13873152+0 records in
13873152+0 records out
7103053824 bytes (7.1 GB, 6.6 GiB) copied, 27.8812 s, 255 MB/s
file命令
file命令用于查看文件的类型,语法格式为:“file 文件名称”。
[root@linuxprobe ~]# file anaconda-ks.cfg
[root@linuxprobe ~]# file /dev/sda
tar命令
tar命令用于对文件进行打包压缩或解压,语法格式为:“tar 参数 文件名称”。
Linux系统中主要使用的是.tar或.tar.gz或.tar.bz2格式,这些格式大部分都是由tar命令来生成的,tar命令的参数及其作用如表所示。
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
- 一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;
- 相应的解压命令为“tar -xzvf 压缩包名称.tar.gz”。
- 使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
- 将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令来创建/root/etc目录):
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc