linux就该这么学第2章笔记
二、常用命令
2.1命令格式
命令名称 [命令参数] [命令对象]
2.2常用系统工作命令
1.echo
“echo字符串”或“echo $变量”
2.date
date命令用于显示或设置系统的时间与日期,格式为: date [+指定的格式]
date -s 参数可以设置系统的当前时间;格式如: date -s “20201101 8:30:00”
参数 | 作用 |
---|---|
%S | 秒 |
%M | 分钟 |
%H | 小时(00~23) |
%I | 小时(00~12) |
%m | 月份 |
%p | 显示出AM或PM |
%a | 缩写的工作日名称 |
%A | 完整的工作日名称 |
%b | 缩写的月份名称 |
%B | 完整的月份名称 |
%q | 季度 |
%y | 简写年份 |
%Y | 完整年份 |
%d | 本月中的第几天 |
%j | 今年中的第几天 |
%n | 换行符 |
%t | 【Tab】 |
例: | |
date “+%Y-%m-%d %H:%M:%S” 2020-09-05 09:14:35 | |
3.timedatectl | |
timedatectl用于设置系统的时间,全称为"time date control" 格式为 “timedatectl [参数]” | |
参数 | 作用 |
- | - |
status | 显示状态信息 |
list-timezones | 列出已知时区 |
set-time | 设施系统时间 |
set-timezone | 设置生效时区 |
查看系统时间与时区的方法如下:
[root@linuxprobe ~]# timedatectl status
Local time: Sun 2020-09-06 19:51:22 CST
Universal time: Sun 2020-09-06 11:51:22 UTC
RTC time: Sun 2020-09-06 19:51:21
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@linuxprobe ~]# timedatectl set-timezone Asia/Shanghai
如果时间还是不正确,可再手动修改系统日期:
[root@linuxprobe ~]# timedatectl set-time 2021-05-18
而如果想修改时间的话,也很简单:
[root@linuxprobe ~]# timedatectl set-time 9:30
[root@linuxprobe ~]# date
Tue May 18 09:30:01 CST 2021
4.reboot
5.poweroff/shutdown/init 0
6.wget
wget用于在终端命令行中下载网络文件,英文全称为"web get",格式为:‘wget [参数] 网址’
参数 | 作用 |
---|---|
-b | 后台下载模式 |
-P | 下载到指定的目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内的所有资源 |
-r | 递归下载 |
7.ps
ps用于查看系统中的进程状态,英文全称为"processes",格式为 “ps [参数]”
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
进程的五种状态及其附加状态: |
五种状态:
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当都个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
附加状态:
<:高优先级
N:低优先级
L:被锁进内存
s:包含子进程
l:多线程
当执行ps aux命令后通常会看到如表2-8所示的进程状态。表2-8只是列举了部分输出值,而且正常的输出值中不包括中文注释。
表2-8 进程状态
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
root 1 0.0 0.5 244740 10636 ? Ss 07:54 0:02 /usr/lib/systemd/
systemd --switched-root --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 07:54 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 07:54 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 07:54 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 07:54 0:00 [kworker/0:0H-kbl
root 6 0.0 0.0 0 0 ? I< 07:54 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S 07:54 0:00 [ksoftirqd/0]
root 8 0.0 0.0 0 0 ? I 07:54 0:00 [rcu_sched]
root 9 0.0 0.0 0 0 ? S 07:54 0:00 [migration/0]
……………… 省略部分输出信息 ………………
8.pstree
pstree用于以树状图的形式展示进程之间的关系,英文全称为"porcess tree"
9.top
top命令用于动态地监视进程活动及系统负载等信息。top是相当好用的性能分析工具,非常好用。
在top中各个参数的代表含义如下:
第1行:系统时间(top - 00:00:00)、运行时间(up 36 min)、登陆终端数(1 user)、系统负载(3个数值分别为1、5、15分钟内的平均值,数值越小意味着负载越低,保持在1-5最好)(load average:0.05 0.03 0.01)
第2行:进程总数(Tasks:445 total)、运行中的进程数(1 running)、睡眠中的进程数(443 sleeping)、停止的进程数(0 stopped)、僵死的进程数(0 zombie)。
第3行:用户占用资源百分比(0.0us)、系统内核占用资源百分比(0.1 sy)、改变过优先级的进程资源百分比(0.0 ni)、空闲的资源百分比(99.9 id)等。
第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量(buff/cache)。
第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量(avail Mem)。
10.nice
nice用于调整进程的优先级,格式为:nice -n 优先级数字 服务名称
在top命令中输出的结果中,PR和NI值代表的事进程的优先级,数字越低(-20~19),优先级越高。
例: nice -n -20 bash
11.pidof
pidof命令用于查询某个指定的服务进程的PID,格式为:pidof 参数 服务名称。
例:pidof sshd
12.kill
kill命令用于中止某个指定PID的服务进程,格式为: kill [参数] PID值
例:kill -9 2156 (-9代表最高级别的强制杀死进程)
13.killall
killall命令用于中止某个指定名称的服务所对应的全部进程,格式为:killall [参数] 服务名称。
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用kill命令逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。下面以httpd服务程序为例,来结束其全部进程。
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#
2.3系统状态检测命令
1.ifconfig
RX:接收数据包的个数以及累计流量
TX:发送数据包的个数以及累计流量
2.uname
用来查看系统的内核版本与系统架构等信息,英文全称为"unix name",格式为:uname [-a]
如果要查看当前系统版本的详细信息,则需要查看redhat-release文件,其命令以及相应的结果如下:
[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
3.uptime
uptime命令用于查看系统的负载信息(即top命令的第一行),输入该命令后按回车键执行即可。
uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分),负载值越低越好:
TIPS:
“负载值越低越好”是对运维人员来讲的,越低表示越安全省心。但是公司购置的硬件设备如果长期处于空闲状态,则明显是种资源浪费,老板也不会开心。所以建议负载值保持在1左右,在生产环境中不要超过5就好。
4.free
free用于显示当前系统中内存的使用量信息,格式为:free [-h]
[root@linuxprobe ~]# free -h
表2-9 执行free -h命令后的输出信息
内存总量 已用量 空闲量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量 可用量
total used free shared buffers buff/cache available
Mem: 1.9Gi 1.4Gi 99Mi 20Mi 450Mi 348Mi
Swap: 2.0Gi 80Mi 1.9Gi
如果不使用-h(易读模式)查看内存使用量情况,则默认以KB为单位。这样一来,服务器如果有几百GB的内存,则换算下来就会是一大长串的数字,真不利于阅读。
5.who
who用于查看当前登入主机的用户终端信息
这3个简单的字母可以快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息;如果有远程用户,还会显示出来访者的IP地址。表2-10所示为执行who命令后的结果。
[root@linuxprobe ~]# who
表2-10 执行who命令的结果
登陆的用户名 终端设备 登陆到系统的时间
root tty2 2020-07-24 06:26 (tty2)
6.last
last用于调取主机的被访记录
Linux系统会将每次的登录信息都记录到日志文件(/var/log/message)中,如果哪天想翻阅了,直接执行这条命令就行:
[root@linuxprobe ~]# last
root pts/1 192.168.10.1 Tue May 18 10:30 - 11:03 (00:32)
root tty2 tty2 Fri Jul 24 06:26 gone - no logout
reboot system boot 4.18.0-80.el8.x8 Fri Jul 24 05:59 still running
root tty2 tty2 Tue Jul 21 05:19 - down (00:00)
reboot system boot 4.18.0-80.el8.x8 Tue Jul 21 05:16 - 05:19 (00:02)
wtmp begins Tue Jul 21 05:16:47 2020
7.ping
用于测试主机之间的网络连通性,格式为:ping [参数] IP
表2-11 ping命令中的参数以及作用
参数 | 作用 |
---|---|
-c | 总共发送次数 |
-l | 指定网卡名称 |
-i | 每次间隔时间(秒) |
-W | 最长等待时间(秒) |
8.tracepath
tracepath命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”。
9.netstat
netstat用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为"network status",格式为:netstat [参数]
表2-12 netstat命令中的参数以及作用
参数 | 作用 |
---|---|
-a | 显示所有连接中的Socket |
-p | 显示正在使用的Socket信息 |
-t | 显示TCP协议的连接状态 |
-u | 显示UDP协议的连接状态 |
-n | 使用IP地址,不使用域名 |
-l | 仅列出正在监听的服务状态 |
-i | 显示网卡列表信息 |
-r | 显示路由表信息 |
10.history
history命令用于显示执行过的命令历史,语法格式为“history [-c]”。 history命令应该是运维人员最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,可以使用-c参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。总之,history命令有很多有趣的玩法等待您去开发。
11.sosreport
sosreport命令用于收集系统配置及架构信息并输出诊断文档,
2.4查找定位文件命令
1.pws
(print working directory)
2.cd
(change directory)
~ 家目录 - 返回到上一次的目录
3.ls
(list),语法格式为“ls [参数] [文件名称]”
4.tree
tree命令用于以树状图的形式列出目录内容及结构
5.find
find命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。
本书中会多次提到“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如表2-13所示。
表2-13 find命令中的参数以及作用
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
-type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {}; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
这里需要重点讲解-exec参数的重要作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数有特殊要求,因此虽然exec是长格式形式,但它的前面依然只需要一个减号(-)。
例:如果要想获取该目录中所有以host开头的文件列表,可以执行如下命令
[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/avahi/hosts
/etc/hostname
如果要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/mount
/usr/bin/su
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/passwd
………………省略部分输出信息………………
进阶实验:
在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录中。
该实验的重点是“-exec {} ;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“;”。完成该实验的具体命令如下:
[root@linuxprobe ~]#find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
6.locate
locate命令用于按照名称快速搜索文件所对应的位置,格式为:locate 文件名称。
使用find命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试locate命令。在使用locate命令时,先使用updatedb命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用locate命令搜索文件时就是在该库中进行查找操作,速度会快很多。
第一次使用locate命令之前,记得先执行updatedb命令来生成索引数据库,然后再进行查找:
[root@linuxprobe ~]# updatedb
[root@linuxprobe ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2945917 Sep 13 17:54 /var/lib/mlocate/mlocate.db
使用locate命令搜索出所有包含“whereis”名称的文件所在的位置:
[root@linuxprobe ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz
7.whereis
whreris命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,格式为:whereis 命令名称
简单的说,whereis命令也是基于updatedb命令生成的索引库文件进行搜索,他与locate命令的区别事不关心那些相同名称的文件,而仅仅是快速找到对应的命令文件及其帮助文件所在的位置。
[root@linuxprobe ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@linuxprobe ~]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
8.which
which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那个这个which命令就太适合了。
9.总结一下
命令 | 作用 |
---|---|
find | 在指定范围内查找全部包含在条件内的同名文件 |
locate | 基于库文件/var/lib/mlocate/mlocate.db查找一些常见的且又知道大概名称的文件,速度比find快。 |
whereis | 也是基于updatedb生成的库文件,但只关心二进制程序(命令)、源代码、以及帮助文件所对应的位置 |
which | 基于PATH所指定的路径,搜索命令所在的路径,仅关心命令本身所在的路径 |
2.5文本文件编辑命令
1.cat
cat命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。-n 显示行号
2.more
more命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。
3.head
head命令用于查看纯文本文件的前N行,语法格式为“head [参数] 文件名称”。
4.tail
tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为“tail [参数] 文件名称”。
5.tr
tr命令用于替换文本内容中的字符,英文全称为“transform”,语法格式为“tr [原始字符] [目标字符]”。
例:cat anaconda-ks.cfg | tr [a-z] [A-Z]
6.wc
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语法格式为“wc [参数] 文件名称”
参数 | 作用 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
7.stat
stat命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为“stat文件名称”。
大家都知道,文件有一个修改时间。其实,除了修改时间之外,Linux系统中的文件包含3种时间状态,分别是Access Time(内容最后一次被访问的时间,简称为Atime),Modify Time(内容最后一次被修改的时间,简称为Mtime)以及Change Time(文件属性最后一次被修改的时间,简称为Ctime)。
8.grep
grep命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行。 |
9.cut
cut命令用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”。
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f参数设置需要查看的列数,还需要使用-d参数来设置间隔符号。
接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@linuxprobe ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
………………省略部分输出信息………………
参数 | 作用 |
---|---|
-f | 设置需要查看的列数 |
-d | 定义间隔符号为啥 |
10.diff
diff命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参数] 文件名称A 文件名称B”。
在使用diff命令时,不仅可以使用–brief参数来确认两个文件是否相同,还可以使用-c参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
-c 查看具体内容的不同
11.uniq
uniq命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文件名称”。
由uniq命令的英文全称unique(独特的,唯一的)可知,该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复的,保留的都是唯一的,自然也就是“独特的”“唯一的”了。
12.sort
sort命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。
有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。这个命令千万不能只讲理论,一定要借助于实战让大家一看就懂。sort命令的参数及其作用如表2-16所示。
表2-16 sort命令中的参数及其作用
参数 | 作用 |
---|---|
-f | 忽略大小写 |
-b | 忽略缩进与空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定间隔符 |
-k | 设置字段范围 |
首先,在执行sort命令后默认会按照字母顺序进行排序,非常方便:
[root@linuxprobe ~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@linuxprobe ~]# sort fruit.txt
apple
banana
orange
pear
raspaberry
此外,与uniq命令不同,sort命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u参数进行去重操作:
[root@linuxprobe ~]# cat sort.txt
Welcome to linuxprobe.com
Red Hat certified
Welcome to linuxprobe.com
Free Linux Lessons
Linux Course
[root@linuxprobe ~]# sort -u sort.txt
Free Linux Lessons
Linux Course
Red Hat certified
Welcome to linuxprobe.com
想对数字进行排序?一点问题都没有,而且完全不用担心出现1大于20这种问题(因为有些命令只比较数字的第一位,忽略了十、百、千的位):
[root@linuxprobe ~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@linuxprobe ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98
最后,我们挑战一个“高难度”的小实验。下面的内容节选自/etc/passwd文件中的前5个字段,并且进行了混乱排序。
[root@linuxprobe ~]# cat user.txt
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
不难看出,上面其实是5个字段,各个字段之间是用了冒号进行间隔,如果想以第3个字段中的数字作为排序依据,那么可以用-t参数指定间隔符,用-k参数指定第几列,用-n参数进行数字排序来搞定:
[root@linuxprobe ~]# sort -t : -k 3 -n user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd
2.6文件目录管理命令
1.touch
touch命令用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”。
对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(Mtime)、文件权限或属性的更改时间(Ctime)与文件的访问时间(Atime)上面。touch命令的参数及其作用如表2-17所示。
表2-17 touch命令中的参数及其作用
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
2.mkdir
mkdir命令用于创建空白的目录,英文全称为“make directory”,语法格式为“mkdir [参数] 目录名称”。
除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套层叠关系的文件目录
3.cp
cp命令用于复制文件或目录,英文全称为“copy”,语法格式为“cp [参数] 源文件名称 目标文件名称”。
大家对文件复制操作应该不陌生,几乎每天都会使用到。在Linux系统中,复制操作具体分为3种情况:
如果目标文件是目录,则会把源文件复制到该目录中;
如果目标文件也是普通文件,则会询问是否要覆盖它;
如果目标文件不存在,则执行正常的复制操作。
复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r参数。cp命令的参数及其作用如表2-18所示。
表2-18 cp命令中的参数及其作用
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r为上述参数) |
4.mv
mv命令用于剪切或重命名文件,英文全称为“move”,语法格式为“mv [参数] 源文件名称 目标文件名称”
5.rm
rm命令用于删除文件或目录,英文全称为“remove”,语法格式为“rm [参数] 文件 名称”。
表2-19 rm命令中的参数及其作用
参数 | 作用 |
---|---|
-f | 强制执行 |
-i | 删除前询问 |
-r | 删除目录 |
-v | 显示过程 |
6.dd
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if=参数值of=参数值count=参数值bs=参数值”。
dd命令是一个比较重要而且比较有特色的命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然,如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如表2-20所示。
表2-20 dd命令中的参数及其作用
参数 | 作用 |
---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
例如,用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:
[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 1.28667 s, 456 MB/s
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
考虑到有些读者会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小是bs块的大小,而用勺子盛饭的次数则是count块的个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。由上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。
7.file
file命令用于查看文件的类型,语法格式为“file文件名称”。
在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,但是它们又不像Windows系统那样都有后缀,因此很难通过文件名一眼判断出具体的文件类型,这时就需要使用file命令来查看文件类型了。
[root@linuxprobe ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block special
8.tar
tar命令用于对文件进行打包压缩或解压,语法格式为“tar参数 文件名称”。
在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件的体积小,在网速相同的情况下,体积越小则传输时间越短。在Linux系统中,主要使用的是.tar、.tar.gz或.tar.bz2格式,大家不用担心格式太多而记不住,其实这些格式大部分都是由tar命令生成的。tar命令的参数及其作用如表2-21所示。
表2-21 tar命令中的参数及其作用
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式的参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。刘遄老师一般使用“tar -czvf压缩包名称.tar.gz要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf压缩包名称.tar.gz”。下面我们逐个演示打包压缩与解压的操作,先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分压缩过程信息………………
接下来将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令创建/root/etc目录):
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解压过程信息………………