1.RHEL5/6 和 RHEL7/8在命令上的区别
RHEL 5/6 init - 串行式工作
RHEL 7/8 systemd - 并行式工作(更快),接管的服务更多,指令也会有变化
2.服务常用命令
systemd -- 服务名称
systemctl -- 配置工具
系统命令 | 作用 |
systemctl start 服务名称 | 开启服务 |
systemctl stop 服务名称 | 关闭服务 |
systemctl restart 服务名称 | 重启服务 |
systemctl status 服务名称 | 查看服务 |
systemctl reload 服务名称 | 重新加载服务(不终止服务) |
systemctl enable 服务名称 | 加入到启动项 |
systemctl disable 服务名称 | 开机不自动启动 |
systemctl is-enable 服务名称 | 查看特定服务是否为开机自启动 |
3.shell与bash的关系
Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器,这个 Bash 解释器,主要有以下 4 项优势:
➢ 通过上下方向键来调取执行过的 Linux 命令;
➢ 命令或参数仅需输入前几位就可以用 Tab 键补全;
➢ 具有强大的批处理脚本;
➢ 具有实用的环境变量功能。
注:Shell 与 Bash 是包含与被包含的关系。举例来说,在社会中有翻译官这个职业,它是由许多从业者共同组成的职业名称,而 Bash 则是其中一个出色的成员,是 Shell 终端程序中的一份子。
4.常用Linux命令格式:
命令名称 | 【命令参数】 | 命令对象 |
命令名称:就是语法中的“动词”,表达的是想要做的事情,如创建用户、查看文件、重启系统等。
命令参数:用于对命令进行调整,让“修改”过的命令能更好的贴合工作需求,达到事半功倍的效果。参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用“--”与“-”作为前缀,如下表
长格式 | man --help |
短格式 | man -h |
命令对象:一般指要处理的文件、目录、用户等资源名称,也就是命令执行后的“承受方”。
注:命令名称、命令参数、命令对象之间要用空格进行分隔,且字母严格区分大小写。长格式和长格式之间不能合并,长格式和短格式之间不能合并,短格式和短格式之间可以合并,保留一个“-”号,且字母不分前后顺序。
“[root@localhost ~]#”这部分是终端提示符,表示当前登录用户名为root,简单主机名为localhost,所在目录是~,即用户家目录,#表示管理员身份(如果是$则表示普通用户,相应的权限也会小一些)。
5.额外的4个快捷键/组合键小技巧
(1)Tab键:在Bash解释器的快捷键中, Tab键绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。
(2)Ctrl+C组合键:当同时按下键盘上的Ctrl和字母C的时候,意味着终止当前进程的运行。假如执行了一个错误命令,或者执行某个命令后迟迟无法结束,这时就可以冷静的按下Ctrl+C组合键,命令行终端的控制权会立刻回到我们手中。
(3)Ctrl+D组合键:当同时按下键盘上的Ctrl和字母D的时候,表示键盘输入结束。
(4)Ctrl+l组合键:当同时按下键盘上的Ctrl和字母l的时候,会清空当前终端中已有的内容(相当于清屏操作)。
6.常用系统工作命令
6.1 echo命令
功能是在终端设备上输出指定字符串或变量提取后的值,能够给用户一些简单的提醒信息,亦可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息进行二次处理,还可以同输出重定向符一起操作,将信息直接写入文件。如需提取变量值,需在变量名称前加入$符号,变量名称一般均为大写形式。
语法格式:echo 参数 字符串或$变量名
echo | 【字符串】或【$变量(大写)】 |
输出指定字符串到终端设备界面(默认为电脑屏幕):
[root@localhost ~]# echo linuxprob
linuxprob
输入某个变量值:
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
搭配转义符一起使用,输出纯字符串内容:
[root@localhost ~]# echo \@PATH
@PATH
搭配输出重定向符一起使用,将字符串内容直接写入文件中:(如果在继续执行echo www > Doc.txt,则结果是上一次写入的内容会被新的内容覆盖)
oot@localhost ~]# echo "Hello Word" > Doc.txt
搭配反引号执行命令,并将执行结果输出:
[root@localhost ~]# echo `uptime`
14:17:29 up 37 min, 2 users, load average: 0.02, 0.05, 0.05
输出带有换行符的内容,参数-e:
[root@localhost ~]# echo -e "First\nSecond\nThird"
First
Second
Third
指定删除字符串中某些字符,随后将内容输出,参数-e,转义字符\b,双引号,三者必备:
[root@localhost ~]# echo -e "123\b456"
12456
6.2 date命令
功能是显示或设置系统日期与时间信息。
语法格式:“date [+指定的格式]”
按照默认格式查看当前系统时间的 date 命令:
[root@localhost ~]# date
Wed Oct 30 14:34:51 CST 2024
按照 “年-月-日 小时 :分钟 :秒”的格式查看当前系统时间的 date 命令:
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2024-10-30 14:35:25
将系统的当前时间设置为 2020 年 11 月 1日 8点 30 分的 date 命令:
[root@localhost ~]# date -s "20201101 8:30:00"
Sun Nov 1 08:30:00 CST 2020
[root@localhost ~]# date
Sun Nov 1 08:30:02 CST 2020
date命令中的参数 %j 可用来查看今天是当年中的第几天:
[root@localhost ~]# date "+%j"
306
6.3 timedatectl命令
用于设置系统的时间,英文全称为“time date control”
语法格式:timedatectl [参数]
参数 | 作用 |
status | 显示状态信息 |
list-timezones | 列出已知时区 |
set-time | 设置系统时间 |
set-timezone | 设置生效时区 |
查看系统时间与时区的方法如下:
[root@localhost ~]# timedatectl status
Local time: Wed 2024-10-30 14:55:17 CST
Universal time: Wed 2024-10-30 06:55:17 UTC
RTC time: Wed 2024-10-30 14:54:35
Timezone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
如果日期不正确,可再手动修改系统日期:
[root@localhost ~]# timedatectl set-time 2024-09-30
如果时间不正确,可再手动修改系统时间:
[root@localhost ~]# timedatectl set-time 9:30
修改后的时间:
[root@localhost ~]# timedatectl status
Local time: Mon 2024-09-30 09:30:07 CST
Universal time: Mon 2024-09-30 01:30:07 UTC
RTC time: Mon 2024-09-30 01:30:07
Timezone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
6.4 reboot命令
用于重启系统,输入该命令后按回车键执行即可。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好是以 root 管理员的身份
来重启,普通用户在执行该命令时可能会被拒绝。
[root@localhost ~]# reboot
6.5 poweroff 命令
用于关闭系统,输入该命令后按回车键执行即可。
与上面相同,该命令也会涉及硬件资源的管理权限,因此最好还是以 root 管理员的身份
来关闭电脑,
[root@localhost ~]# poweroff
6.6 wget 命令
用于在终端命令行中下载网络文件,英文全称为“web get”。
语法格式:wget [参数] 网址”。
借助于 wget 命令,可以无须打开浏览器,直接在命令行界面中就能下载文件。如果您没有 Linux 系统的管理经验,当前只需了解一下 wget 命令的参数以及作用。表 2-6 所示为 wget 命令中的参数以及参数的作用。
尝试使用 wget 命令从站点中下载 PDF 格式的电子文档。执行该命令后的下载效果如下:
[root@localhost Desktop]# wget https://www.linuxprobe.com/docs/LinuxProbe.pdf
--2024-12-12 13:00:20-- https://www.linuxprobe.com/docs/LinuxProbe.pdf
Resolving www.linuxprobe.com (www.linuxprobe.com)... 117.72.45.242
Connecting to www.linuxprobe.com (www.linuxprobe.com)|117.72.45.242|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23335661 (22M) [application/pdf]
Saving to: ‘LinuxProbe.pdf.1’
LinuxProbe.pdf.1 100%[================================================================>] 22.25M 1.59MB/s in 15s
2024-12-12 13:00:35 (1.51 MB/s) - ‘LinuxProbe.pdf.1’ saved [23335661/23335661]
接下来,使用 wget 命令递归下载 www.linuxprobe.com 网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为 www.linuxprobe.com 的目录中。该命令的执行结果如下:
[root@linuxprobe~]# wget -r -p https://www.linuxprobe.com
--2020-09-28 19:26:12-- https://www.linuxprobe.com/
Resolving www.linuxprobe.com (www.linuxprobe.com)... 221.15.64.1
Connecting to www.linuxprobe.com (www.linuxprobe.com)|221.15.64.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘www.linuxprobe.com/index.html’
………………省略下载过程………………
6.7 ps 命令
用于查看系统中的进程状态,英文全称为“processes”。
语法格式:ps [参数]
在 Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各
自含义如下所示:
R(运行) | 进程正在运行或在运行队列中等待 |
S(中断) | 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。 |
D(不可中断) | 进程不响应系统异步信号,即便用 kill 命令也不能将其中断 |
Z(僵死) | 进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放 |
T(停止) | 进程收到停止信号后停止运行 |
除了上面 5 种常见的进程状态,还有可能是高优先级(<)、低优先级(N)、被锁进内存
(L)、包含子进程(s)以及多线程(l)这 5 种补充形式。
当执行 ps aux 命令后通常会看到如下进程状态(注: ps 命令可允许参数不加“-”号):
注:ps aux指令与top指令的区别在于,前者是静态的,后者是动态的。
6.8 pstree 命令
用于以树状图的形式展示进程之间的关系,英文全称为“process tree”,输入该命令后按回车键执行即可。
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───{at-spi2-registr}
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───{colord}
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─evolution-addre───4*[{evolution-addre}]
├─evolution-calen───4*[{evolution-calen}]
├─evolution-sourc───2*[{evolution-sourc}]
├─firewalld───{firewalld}
├─gconfd-2
├─gdm─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet+++
│ │ │ │ ├─gnome-setti+
│ │ │ │ ├─gnome-shell+++
│ │ │ │ ├─rhsm-icon──+++
│ │ │ │ ├─seapplet
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-min+
│ │ │ │ └─3*[{gnome-s+
│ │ │ └─2*[{gdm-session-wor}]
│ │ └─2*[{gdm-simple-slav}]
│ └─2*[{gdm}]
├─gnome-keyring-d───5*[{gnome-keyring-d}]
├─gnome-shell-cal───4*[{gnome-shell-cal}]
├─gnome-terminal-─┬─bash
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ └─3*[{gnome-terminal-}]
├─goa-daemon───3*[{goa-daemon}]
├─gsd-printer───{gsd-printer}
├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
├─gvfs-goa-volume───{gvfs-goa-volume}
├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
├─gvfs-mtp-volume───{gvfs-mtp-volume}
├─gvfs-udisks2-vo───{gvfs-udisks2-vo}
├─gvfsd───{gvfsd}
├─gvfsd-fuse───4*[{gvfsd-fuse}]
├─gvfsd-trash───{gvfsd-trash}
├─ibus-daemon─┬─ibus-dconf───2*[{ibus-dconf}]
│ ├─ibus-engine-sim───{ibus-engine-sim}
│ └─2*[{ibus-daemon}]
├─ibus-x11───{ibus-x11}
├─iprdump
├─iprinit
├─iprupdate
├─ksmtuned───sleep
├─libvirtd───10*[{libvirtd}]
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mission-control───2*[{mission-control}]
├─nautilus───3*[{nautilus}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───{pulseaudio}
├─rhsmcertd
├─rngd
├─rpc.statd
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd
├─systemd-hostnam
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tracker-store───6*[{tracker-store}]
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
└─vmtoolsd
[root@localhost ~]#
6.9 top 命令
用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。
前面介绍的命令都是静态地查看系统状态,不能实时滚动最新数据,而 top 命令能够动态地查看系统状态,因此完全可以将它看作是 Linux 中“强化版的 Windows 任务管理器”。top是相当好用的性能分析工具,该命令的运行界面如下所示:
top 命令执行结果的前 5 行为系统整体的统计信息,其所代表的含义如下:
第 1 行:系统时间、运行时间、登录终端数、系统负载(3 个数值分别为 1 分钟、5分钟、15 分钟内的平均值,数值越小意味着负载越低)。
第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为 CPU 数据并以百分比格式显示,例如“97.9 id”意味着有 97.9%的 CPU 处理器资源处于空闲。
第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
以默认格式显示系统运行信息:
[root@localhost Desktop]# top
top - 13:57:09 up 8:14, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 470 total, 2 running, 468 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1664676 used, 370948 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544716 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2227 root 20 0 1750496 467388 37980 S 0.7 23.0 10:42.07 gnome-shell
1 root 20 0 53624 7420 2496 S 0.0 0.4 0:02.19 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3
...
以默认格式显示系统运行信息,但提供完整的进程路径及名称:
[root@localhost Desktop]# top -c
top - 13:58:19 up 8:15, 2 users, load average: 0.20, 0.06, 0.06
Tasks: 470 total, 3 running, 467 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.4 us, 2.0 sy, 0.0 ni, 80.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1666772 used, 368852 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544724 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2227 root 20 0 1750496 467388 37980 S 14.3 23.0 10:47.62 /usr/bin/gno+
1132 root 20 0 184916 34076 7912 S 4.3 1.7 1:20.35 /usr/bin/Xor+
8080 root 20 0 619540 18972 12248 S 0.7 0.9 0:03.51 /usr/libexec+
996 root 20 0 267156 4176 3332 S 0.3 0.2 0:19.67 /usr/bin/vmt+
1 root 20 0 53624 7420 2496 S 0.0 0.4 0:02.19 /usr/lib/sys+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 0:00.08 [ksoftirqd/0]
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0+
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0]
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/0]
...
以批处理模式显示程序信息:(需要手动运行命令感受一下,代码截图看的不明显)
[root@localhost Desktop]# top -b
top - 13:59:08 up 8:16, 2 users, load average: 0.13, 0.07, 0.06
Tasks: 470 total, 3 running, 467 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.4 us, 0.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1666196 used, 369428 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544724 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2227 root 20 0 1750496 467388 37980 S 25.3 23.0 10:49.91 gnome-shell
1 root 20 0 53624 7420 2496 S 0.0 0.4 0:02.19 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
...
设定每隔5秒刷新一次信息:(需要手动运行命令感受一下,代码截图看的不明显)
[root@localhost ~]# top -d 5
设定总显示次数为5次,随后自动退出命令:(需要手动运行命令感受一下,代码截图看的不明显)
[root@localhost ~]# top -n 5
6.10 nice 命令
用于调整进程的优先级。
语法格式:nice 优先级数字 服务名称
在 top 命令输出的结果中,PR 和 NI 值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高。在日常的生产工作中,可以将一些不重要进程的优先级调低,让紧迫的服务更多地利用 CPU 和内存资源,以达到合理分配系统资源的目的。
例如将 bash 服务的优先级调整到最高:
[root@localhost ~]# nice -n -20 bash
[root@localhost Desktop]# pidof bash
9973 8084 1073
[root@localhost Desktop]# top -p 9973
top - 14:08:28 up 8:25, 2 users, load average: 0.10, 0.05, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1667524 used, 368100 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544904 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9973 root 0 -20 116468 2936 1676 S 0.0 0.1 0:00.01 bash
6.11 pidof 命令
用于查询某个指定服务进程的 PID 号码值,每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程。
语法格式:pidof [参数] 服务名称
例如查询本机上 sshd 服务程序的 PID:
[root@localhost Desktop]# pidof sshd
1629
[root@localhost Desktop]# top -p 1629
top - 14:10:14 up 8:27, 2 users, load average: 0.02, 0.04, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1667540 used, 368084 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544916 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1629 root 20 0 82956 3576 2732 S 0.0 0.2 0:00.00 sshd
查找多个指定服务所对应的进程PID号码:
[root@localhost Desktop]# pidof sshd crond
1629 2889
[root@localhost Desktop]# top -p 1629,2889
top - 14:14:37 up 8:31, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 2 total, 0 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 0.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2035624 total, 1669184 used, 366440 free, 57244 buffers
KiB Swap: 2097148 total, 180 used, 2096968 free. 544952 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1629 root 20 0 82956 3576 2732 S 0.0 0.2 0:00.00 sshd
2889 root 20 0 124304 1656 1032 S 0.0 0.1 0:00.43 crond
6.12 kill 命令
用于终止某个指定 PID 值的服务进程。
语法格式:kill [参数] 进程的 PID
例如终止sshd服务(这种操作的效果等同于强制停止 sshd 服务,终止后在使用pidof查询,发现已经不在运行)
[root@localhost ~]# kill 1646
[root@localhost ~]# pidof sshd
但有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程:
[root@localhost ~]# kill -9 1646
6.13 killall 命令
用于终止某个指定名称的服务所对应的全部进程。
语法格式:killall [参数] 服务名称
结束指定服务所对应的全部进程:
[root@localhost ~]# pidof httpd
35026 35025 35018 35017 35016
[root@localhost ~]# killall httpd
[root@localhost ~]# pidof httpd
[root@localhost ~]#
打印所有已知信号列表:
[root@localhost ~]# killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加一个&符号,这样命令将进入系统后台来执行。
7.系统状态检测命令
7.1 ifconfig 命令
用于获取网卡配置与网络状态等信息,英文全称为“interface config”。
语法格式:ifconfig [参数] [网络设备]
使用 ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址),以及 RX、TX 的接收数据包与发送数据包的个数及累计流量。
[root@localhost ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.48.128 netmask 255.255.255.0 broadcast 192.168.48.255
inet6 fe80::1249:3d7c:54f6:8d36 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4a:dd:05 txqueuelen 1000 (Ethernet)
RX packets 66784 bytes 93622828 (89.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11387 bytes 848739 (828.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 48 bytes 5616 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48 bytes 5616 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:d8:2b:7d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
7.2 uname 命令
用于查看系统内核版本与系统架构等信息,英文全称为“unix name”。
语法格式:uname [-a]
在使用 uname 命令时,一般要固定搭配上-a 参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
顺带一提,如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件,其命令以及相应的结果如下:
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
7.3 uptime 命令
用于查看系统的负载信息,输入该命令后按回车键执行即可。
它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况,负载值越低越好:
[root@localhost ~]# uptime
17:21:34 up 49 min, 2 users, load average: 0.09, 0.07, 0.05
注:“负载值越低越好”是对运维人员来讲的,越低表示越安全省心。但是公司购置的硬件设备如果长期处于空闲状态,则明显是种资源浪费,老板也不会开心。所以建议负载值保持在 1 左右,在生产环境中不要超过 5 就好。
7.4 free 命令
用于显示当前系统中内存的使用量信息。
语法格式:free [-h]
如果不使用-h(易读模式)查看内存使用量情况,则默认以 KB 为单位。这样一来,服务器如果有几百 GB 的内存,则换算下来就会是一大长串的数字,真不利于阅读。
[root@localhost ~]# free -h
total used free shared buffers cached
Mem: 1.9G 1.0G 936M 9.7M 924K 293M
-/+ buffers/cache: 757M 1.2G
Swap: 2.0G 0B 2.0G
信息说明:(由于安装的系统版本不同,所以显示信息略有不同)
7.5 who 命令
用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。
[root@localhost ~]# who
root tty2 2024-12-12 10:40 (tty2)
信息说明:
7.6 last 命令
用于调取主机的被访记录,输入该命令后按回车键执行即可。
Linux 系统会将每次的登录信息都记录到日志文件中,如果哪天想翻阅了,直接执行这条命令就行:
[root@localhost ~]# last
root pts/1 :0 Wed Oct 30 17:29 - 17:29 (00:00)
root pts/0 :0 Wed Oct 30 16:36 still logged in
root pts/0 :0 Wed Oct 30 16:32 - 16:35 (00:03)
root :0 :0 Wed Oct 30 16:32 still logged in
(unknown :0 :0 Wed Oct 30 16:32 - 16:32 (00:00)
reboot system boot 3.10.0-123.el7.x Wed Oct 30 16:32 - 17:31 (00:59)
root pts/1 :0 Wed Oct 30 15:23 - 15:32 (00:09)
root pts/0 :0 Wed Oct 30 13:40 - 15:32 (01:52)
root :0 :0 Wed Oct 30 13:40 - 15:32 (01:52)
(unknown :0 :0 Wed Oct 30 13:40 - 13:40 (00:00)
reboot system boot 3.10.0-123.el7.x Wed Oct 30 21:40 - 15:33 (-6:-7)
root pts/0 :0 Tue Oct 29 15:27 - crash (1+06:12)
root pts/0 :0 Tue Oct 29 14:42 - 15:27 (00:45)
root :0 :0 Tue Oct 29 14:41 - crash (1+06:58)
(unknown :0 :0 Tue Oct 29 14:41 - 14:41 (00:00)
reboot system boot 3.10.0-123.el7.x Tue Oct 29 22:41 - 15:33 (16:51)
root pts/0 :0 Tue Oct 29 14:34 - 14:39 (00:05)
root :0 :0 Tue Oct 29 14:34 - 14:39 (00:05)
(unknown :0 :0 Tue Oct 29 14:33 - 14:34 (00:00)
reboot system boot 3.10.0-123.el7.x Tue Oct 29 22:33 - 14:39 (-7:-54)
root :0 :0 Tue Oct 29 13:42 - 13:52 (00:10)
(unknown :0 :0 Tue Oct 29 13:42 - 13:42 (00:00)
reboot system boot 3.10.0-123.el7.x Tue Oct 29 21:42 - 13:52 (-7:-49)
reboot system boot 3.10.0-123.el7.x Tue Oct 29 21:41 - 13:41 (-7:-59)
wtmp begins Tue Oct 29 21:41:04 2024
7.7 ping 命令
用于测试主机之间的网络连通信。
语法格式:ping [参数] 主机地址
执行 ping 命令时,系统会使用 ICMP 向远端主机发出要求回应的信息,若连接远端主机的网络没有问题,远端主机会回应该信息。由此可见,ping 命令可用于判断远端主机是否在线并且网络是否正常。
我们使用 ping 命令测试一台在线的主机(其 IP 地址为 172.16.30.143),得到的回应是这样的:
[root@localhost ~]# ping 172.16.30.143
PING 172.16.30.143 (172.16.30.143) 56(84) bytes of data.
64 bytes from 172.16.30.143: icmp_seq=1 ttl=128 time=0.898 ms
64 bytes from 172.16.30.143: icmp_seq=2 ttl=128 time=0.628 ms
64 bytes from 172.16.30.143: icmp_seq=3 ttl=128 time=0.682 ms
64 bytes from 172.16.30.143: icmp_seq=4 ttl=128 time=0.684 ms
--- 172.16.30.143 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 425ms
rtt min/avg/max/mdev = 0.437/0.710/1.381/0.231 ms
测试一台不在线的主机(其 IP 地址为 192.168.10.20),得到的回应是这样的:
[root@localhost ~]# ping -c 4 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Host Unreachable
From 192.168.10.10 icmp_seq=2 Destination Host Unreachable
From 192.168.10.10 icmp_seq=3 Destination Host Unreachable
From 192.168.10.10 icmp_seq=4 Destination Host Unreachable
--- 192.168.10.20 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 68ms
pipe 4
7.8 tracepath 命令
用于显示数据包到达目的主机时途中经过的所有路由信息。
语法格式:tracepath [参数] 域名
当两台主机之间无法正常 ping 通时,要考虑两台主机之间是否有错误的路由信息,导致数据被某一台设备错误地丢弃。这时便可以使用 tracepath 命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题。下面的情况就很清晰了:
[root@localhost ~]# tracepath www.linuxprobe.com
1?: [LOCALHOST] pmtu 1500
1: no reply
2: 11.223.0.189 5.954ms asymm 1
3: 11.223.0.14 6.256ms asymm 2
4: 11.220.159.62 3.313ms asymm 3
5: 116.251.107.13 1.841ms
6: 140.205.50.237 2.416ms asymm 5
7: 101.95.211.117 2.772ms
8: 101.95.208.45 40.839ms
9: 101.95.218.217 13.898ms asymm 8
10: 202.97.81.162 8.113ms asymm 9
11: 221.229.193.238 15.693ms asymm 10
12: no reply
13: no reply
14: no reply
15: no reply
16: no reply
17: no reply
18: no reply
………………省略部分输出信息………………
7.9 netstat 命令
用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为“network status”。
语法格式:netstat [参数]
netstat 命令的常见参数以及作用如表所示
使用 netstat 命令显示详细的网络状况:
[root@localhost ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
udp 0 0 localhost.locald:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost.locald:bootpc 0.0.0.0:*
......
使用 netstat 命令显示网卡列表:
[root@localhost ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens160 1500 67094 0 0 0 11480 0 0 0 BMRU
lo 65536 48 0 0 0 48 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
[root@localhost ~]#
7.10 history 命令
用于显示执行过的命令历史。
语法格式:history [-c]
[root@localhost ~]# history
1 echo
2 echo adai
3 echo $PATH
4 date
5 date "+%Y - %m -%d"
6 date "+%H:%M:%S"
7 poweroff
8 top
9 man
...
240 uptime
241 free
242 cat /etc/redhat-release
243 free -h
244 who
245 last
246 history
247 history "who"
248 history
[root@localhost ~]# !244
who
root :0 2024-10-31 14:05 (:0)
root pts/0 2024-11-01 11:27 (:0)
[root@localhost ~]#
执行 history 命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,可以自定义/etc/profile 文件中的 HISTSIZE 变量值。在使用 history 命令时,可以使用-c 参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。总之,history 命令有很多有趣的玩法等待您去开发。
历史命令会被保存到用户家目录中的.bash_history 文件中。Linux 系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容:
[root@localhost ~]# cat ~/.bash_history
echo
echo adai
echo $PATH
date
date "+%Y - %m -%d"
date "+%H:%M:%S"
poweroff
top
man
man man
echo linuxprob
echo $PATH
echo \@PATH
echo "Hello Word" > Doc.txt
echo `uptime`
...
要清空当前用户在本机上执行的 Linux 命令历史记录信息,可执行如下命令:(不会修改.bash_history内容)
[root@localhost ~]# history -c
[root@localhost ~]# history
1 history
7.11 sosreport 命令
用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。
当 Linux 系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,抑或让他们能提前了解某些复杂问题。
[root@localhost ~]# sosreport
sosreport (version 3.0)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.
An archive containing the collected information will be generated in
/var/tmp and may be provided to a Red Hat support representative.
Any information provided to Red Hat will be treated in accordance with
the published support policies at:
https://access.redhat.com/support/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.
No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit.
#此处按下回车键进行确认
Please enter your first initial and last name [localhost.localdomain]:
#此处按下回车键进行确认
Please enter the case number that you are generating this report for:
#此处按下回车键进行确认
Running plugins. Please wait ...
Running 69/69: yum...
Creating compressed archive...
Your sosreport has been generated and saved in:
/var/tmp/sosreport-localhost.localdomain-20241030174825.tar.xz
The checksum is: df7117c26f1a7869113b6c562eb920b6
Please send this file to your support representative.
诊断文件位置:/var/tmp/sosreport-localhost.localdomain-20241030174825.tar.xz
8.查找定位文件命令
8.1 pwd 命令
用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。
[root@localhost ~]# pwd
/root
8.2 cd 命令
用于切换当前的工作路径,英文全称为“change directory”。
语法格式:cd [参数] [目录]
“cd -”命令返回到上一次所处的目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd Downloads/
[root@localhost Downloads]# pwd
/root/Downloads
[root@localhost Downloads]# cd -
/root
[root@localhost ~]# pwd
/root
“cd ..”命令进入上级目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd Downloads/
[root@localhost Downloads]# pwd
/root/Downloads
[root@localhost Downloads]# cd ..
[root@localhost ~]# pwd
/root
“cd~”命令切换到当前用户的家目录
/root
[root@localhost ~]# cd Downloads/
[root@localhost Downloads]# pwd
/root/Downloads
[root@localhost Downloads]# cd ~
[root@localhost ~]# pwd
/root
“cd~username”命令切换到其他用户的家目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd ~linuxprobe
[root@localhost linuxprobe]# pwd
/home/linuxprobe
8.3 ls 命令
用于显示目录中的文件信息,英文全称为“list”。
语法格式:ls [参数] [文件名称]
使用 ls 命令的-a 参数可以看到全部文件(包括隐藏文件),使用-l 参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性信息:
[root@localhost ~]# ls -al
total 64
dr-xr-x---. 14 root root 4096 Oct 31 10:23 .
drwxr-xr-x. 17 root root 4096 Oct 31 10:23 ..
-rw-------. 1 root root 1218 Oct 29 21:38 anaconda-ks.cfg
-rw-------. 1 root root 697 Oct 30 17:51 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 9 root root 4096 Oct 29 13:42 .cache
drwx------. 15 root root 4096 Oct 29 13:42 .config
...
如果想要查看目录属性信息,则需要额外添加一个-d 参数
oot@localhost ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Oct 31 10:23 /etc
8.4 tree 命令
用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。
[root@localhost ~]# ls
anaconda-ks.cfg Doc.txt Downloads Music Public Videos
Desktop Documents initial-setup-ks.cfg Pictures Templates
[root@localhost ~]# tree
.
├── anaconda-ks.cfg
├── Desktop
│ ├── tree
│ │ ├── basesystem-10.0-7.el7.centos.noarch.rpm
│ │ ├── bash-4.2.46-35.el7_9.x86_64.rpm
│ │ ├── centos-release-7-9.2009.2.el7.centos.x86_64.rpm
│ │ ├── filesystem-3.2-25.el7.x86_64.rpm
│ │ ├── glibc-2.17-326.el7_9.3.i686.rpm
│ │ ├── glibc-2.17-326.el7_9.3.x86_64.rpm
│ │ ├── glibc-common-2.17-326.el7_9.3.x86_64.rpm
│ │ ├── libgcc-4.8.5-44.el7.i686.rpm
│ │ ├── libgcc-4.8.5-44.el7.x86_64.rpm
│ │ ├── libselinux-2.5-15.el7.x86_64.rpm
│ │ ├── libsepol-2.5-10.el7.x86_64.rpm
│ │ ├── libstdc++-4.8.5-44.el7.i686.rpm
│ │ ├── libstdc++-4.8.5-44.el7.x86_64.rpm
│ │ ├── ncurses-base-5.9-14.20130511.el7_4.noarch.rpm
│ │ ├── ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm
│ │ ├── nspr-4.35.0-1.el7_9.i686.rpm
│ │ ├── nspr-4.35.0-1.el7_9.x86_64.rpm
│ │ ├── nss-softokn-freebl-3.90.0-6.el7_9.i686.rpm
│ │ ├── nss-softokn-freebl-3.90.0-6.el7_9.x86_64.rpm
│ │ ├── nss-util-3.90.0-1.el7_9.i686.rpm
│ │ ├── nss-util-3.90.0-1.el7_9.x86_64.rpm
│ │ ├── pcre-8.32-17.el7.i686.rpm
│ │ ├── pcre-8.32-17.el7.x86_64.rpm
│ │ ├── setup-2.8.71-11.el7.noarch.rpm
│ │ ├── tree-1.6.0-10.el7.x86_64.rpm
│ │ └── tzdata-2024a-1.el7.noarch.rpm
│ └── tree-1.6.0-10.el7.x86_64.tar.gz
├── Doc.txt
├── Documents
├── Downloads
├── initial-setup-ks.cfg
├── Music
├── Pictures
├── Public
├── Templates
└── Videos
9 directories, 30 files
系统没有tree指令,缺少该指令包,需要手动安装该指令包,安装完成后结果如上所示。
作为新手很容易犯错,开始是手动拖压缩文件进RedHat7系统,发现不能拖进来,尝试安装共享目录,结果问题更多,后来才发现原来可以在物理机上选择复制,再在虚拟机上找个文件夹右键粘贴即可,如此简单操作一下就能完成了,然后在进入放置压缩文件的目录,进行解压文件:
tar -xzf tree-1.6.0-10.el7.x86_64.tar.gz
解压出的文件夹为tree,进入该文件夹,执行安装tree工具包指令: (当前在tree文件夹中)
rpm -ivh --nodeps --force *.rpm
)
8.5 find 命令
用于按照指定条件来查找文件所对应的位置。
语法格式:find [查找范围] 寻找条件
-exec 参数的重要作用:把 find 命令搜索到的结果交由紧随其后的命令作进一步处理,且他的前面是一个减号“-”。
例如在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到/root/findresults 目录中。
(该实验的重点是“-exec {} \;”参数,其中的{}表示 find 命令搜索出的每一个文件,并且命令的结尾必须是“\;”。)完成该实验的具体命令如下:
[root@localhost ~]#mkdir -p /root/findresults
[root@localhost ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
找出/etc目录下所有以host开头的文件:
[root@localhost ~]# find /etc -name "host*"
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname
如果要在整个系统中搜索权限中包括 SUID 权限的所有文件,只需使用-4000 即可:
[root@localhost ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/mount
/usr/bin/umount
/usr/bin/passwd
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/Xorg
/usr/bin/staprun
/usr/bin/at
/usr/bin/sudo
...
8.6 locate 命令
用于按照名称快速搜索文件所对应的位置。(使用 find 命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试 locate 命令)
语法格式:locate 文件名称
第一次使用 locate 命令之前,记得先执行 updatedb 命令来生成索引数据库,然后再进行查找:
[root@localhost findresults]# updatedb
[root@localhost findresults]# ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2266432 Oct 31 14:50 /var/lib/mlocate/mlocate.db
使用 locate 命令搜索出所有包含“whereis”名称的文件所在的位置:
[root@localhost findresults]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz
8.7 whereis 命令
用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置。
语法格式:whereis 命令名称
与locate区别:,whereis 命令也是基于 updatedb 命令所生成的索引库文件进行搜索,它与 locate
命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。
使用 whereis 命令分别查找出 ls 和 pwd 命令所在的位置:
[root@localhost findresults]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost findresults]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
使用locate 查找ls的结果:(对比发现locate是将包含ls的文件都找出来了,定位ls.1p.gz是比较麻烦的)
[root@localhost findresults]# locate ls
/boot/grub2/i386-pc/blscfg.mod
/boot/grub2/i386-pc/cbls.mod
/boot/grub2/i386-pc/command.lst
/boot/grub2/i386-pc/crypto.lst
/boot/grub2/i386-pc/fs.lst
/boot/grub2/i386-pc/ls.mod
...
8.8 which 命令
用于按照指定名称快速搜索二进制程序(命令)所对应的位置。
语法格式:which 命令名称
which 命令是在 PATH 变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文(whereis),仅仅是想找到命令本身所在的路径,那么这个 which 命令就太合适了。
查找一下 locate 和 whereis 命令所对应的路径:
[root@localhost findresults]# which locate
/usr/bin/locate
[root@localhost findresults]# which whereis
/usr/bin/whereis
9.文本文件编辑命令
9.1 cat 命令
用于查看纯文本文件(内容较少的),英文全称为“concatenate”。
语法格式:cat [参数] 文件名称
在查看文本内容时还想顺便显示行号的话,在 cat 命令后面追加一个-n 参数:
[root@localhost ~]# cat -n initial-setup-ks.cfg
1 #version=RHEL7
2 # X Window System configuration information
3 xconfig --startxonboot
4
5 # License agreement
6 eula --agreed
7 # System authorization information
8 auth --enableshadow --passalgo=sha512
9 # Use CDROM installation media
10 cdrom
11 # Run the Setup Agent on first boot
12 firstboot --enable
13 # Keyboard layouts
14 keyboard --vckeymap=us --xlayouts='us'
9.2 more 命令
用于查看纯文本文件(内容较多的),命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页:
语法格式:more [参数] 文件名称
[root@localhost ~]# more initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network --bootproto=dhcp --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$LGryQNvgNmmsV03F$xgjGAdTUvtkPenvIMUIswD18X9ygbGPk4y/01UTTkaRtla
--More--(51%)
9.3 head 命令
用于查看纯文本文件的前 N 行。
语法格式:head [参数] 文件名称
查看文本中前 10 行的内容:
[root@localhost ~]# head -n 10 initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
[root@localhost ~]#
9.4 tail 命令
用于查看纯文本文件的后 N 行或持续刷新文件的最新内容。
语法格式:tail [参数] 文件名称
查看文本内容的最后 10 行:
[root@localhost ~]# tail -n 10 initial-setup-ks.cfg
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@multimedia
@print-client
@x11
%end
tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件时,此时的命令格式为“tail -f 文件名称”:
[root@localhost ~]# tail -f /var/log/messages
Oct 31 15:02:33 localhost dbus[1041]: [system] Activating via systemd: service name='net.reactivated.Fprint' unit='fprintd.service'
Oct 31 15:02:33 localhost systemd: Starting Fingerprint Authentication Daemon...
Oct 31 15:02:33 localhost dbus-daemon: dbus[1041]: [system] Successfully activated service 'net.reactivated.Fprint'
Oct 31 15:02:33 localhost dbus[1041]: [system] Successfully activated service 'net.reactivated.Fprint'
Oct 31 15:02:33 localhost systemd: Started Fingerprint Authentication Daemon.
Oct 31 15:02:33 localhost fprintd: ** (fprintd:3546): WARNING **: fprint init failed with error -99
Oct 31 15:02:33 localhost systemd: fprintd.service: main process exited, code=exited, status=157/n/a
Oct 31 15:02:33 localhost systemd: Unit fprintd.service entered failed state.
Oct 31 15:10:01 localhost systemd: Starting Session 9 of user root.
Oct 31 15:10:01 localhost systemd: Started Session 9 of user root.
9.5 tr 命令
用于替换文本内容中的字符,英文全称为“translate”。
语法格式:tr [原始字符] [目标字符]
(可以先使用 cat 命令读取待处理的文本,然后通过管道符把这些文本内容传递给 tr 命令进行替换操作即可)
把某个文本内容中的英文全部替换为大写:
[root@localhost ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512
# USE CDROM INSTALLATION MEDIA
CDROM
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
IGNOREDISK --ONLY-USE=SDA
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8
9.6 wc 命令
用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”。
语法格式:wc [参数] 文件名称
在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询:
[root@localhost ~]# wc -l /etc/passwd
38 /etc/passwd
9.7 stat 命令
用于查看文件的具体存储细节和时间等信息,英文全称为“status”。
语法格式:stat 文件名称
Linux 系统中的文件包含 3 种时间状态,分别是 Access Time(内容最后一次被访问的时间,简称为 Atime),ModifyTime(内容最后一次被修改的时间,简称为 Mtime)以及 Change Time(文件属性最后一次被修改的时间,简称为 Ctime)。
使用 state 命令查看文件的这 3 种时间状态信息:
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1218 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 68834572 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2024-10-30 17:48:25.350750994 +0800
Modify: 2024-10-29 21:38:52.834009379 +0800
Change: 2024-10-29 21:38:52.836009379 +0800
Birth: -
9.8 grep 命令
用于按行提取文本内容。
语法格式:grep [参数] 文件名称
grep 命令两个最常用的参数:
➢ -n 参数用来显示搜索到的信息的行号;
➢ -v 参数用于反选信息(即没有包含关键词的所有信息行)
在 Linux 系统中,/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令查找出当前系统中不允许登录系统的所有用户的信息:
[root@localhost ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
...
9.9 cut 命令
用于按“列”提取文本内容。
语法格式:cut [参数] 文件名称
按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f 参数设置需要查看的列数,还需要使用-d 参数来设置间隔符号。
接下来使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@localhost ~]# head -n 10 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...
9.10 diff 命令
用于比较多个文件之间内容的差异,英文全称为“different”。
语法格式:diff [参数] 文件名称 A 文件名称 B
在使用 diff 命令时,不仅可以使用--brief 参数来确认两个文件是否相同,还可以使用-c参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。
(先从本地弄两个文件A和B,然后放到虚拟机系统中)
先使用 cat 命令分别查看 diff_A.txt 和 diff_B.txt 文件的内容,然后进行比较,接下来使用 diff --brief 命令显示比较后的结果,判断文件是否相同,最后使用带有-c 参数的 diff 命令来描述文件内容具体的不同:
[root@localhost Desktop]# cat differ_A.txt
Hello Word
Hello Word
Hello Word
Hello Word
Hello Word
Hello Word
[root@localhost Desktop]# cat differ_B.txt
Hello Word 123
Hello Word
Hello Word
Hello Word
Hello Word 123
Hello Word
[root@localhost Desktop]# diff --brief differ_A.txt differ_B.txt
Files differ_A.txt and differ_B.txt differ
[root@localhost Desktop]# diff -c differ_A.txt differ_B.txt
*** differ_A.txt 2024-10-31 15:49:26.817657795 +0800
--- differ_B.txt 2024-10-31 15:50:30.209654233 +0800
***************
*** 1,7 ****
Hello Word
Hello Word
Hello Word
! Hello Word
! Hello Word
Hello Word
--- 1,7 ----
+ Hello Word 123
Hello Word
Hello Word
Hello Word
! Hello Word 123
Hello Word
9.11 uniq 命令
用于去除文本中连续的重复行,英文全称为“unique”。
语法格式:uniq [参数] 文件名称
[root@localhost Desktop]# cat differ_A.txt
Hello Word
Hello Word
Hello Word
Hello Word
Hello Word
Hello Word
[root@localhost Desktop]# uniq differ_A.txt
Hello Word
9.12 sort 命令
用于对文本内容进行再排序。
语法格式:sort [参数] 文件名称
在执行 sort 命令后默认会按照字母顺序进行排序:
[root@localhost Desktop]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@localhost Desktop]# sort fruit.txt
apple
banana
orange
pear
raspaberry
与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u 参数进行去重操作:
[root@localhost Desktop]# cat sort.txt
Welcome to linuxprobe.com
Red Hat certified
Welcome to linuxprobe.com
Free Linux Lessons
Linux Course
[root@localhost Desktop]# sort -u sort.txt
Free Linux Lessons
Linux Course
Red Hat certified
Welcome to linuxprobe.com
想对数字进行排序?一点问题都没有,而且完全不用担心出现 1 大于 20 这种问题(因为
有些命令只比较数字的第一位,忽略了十、百、千的位):
[root@localhost Desktop]# cat number.txt
45
12
3
98
82
67
24
56
54
9
[root@localhost Desktop]# sort -n number.txt
3
9
12
24
45
54
56
67
82
98
以第 3 个字段中的数字作为排序依据,那么可以用-t 参数指定间隔符,用-k 参数指定第几列,用-n 参数进行数字排序来搞定:
[root@localhost Desktop]# cat user.txt
saslauth:x:995:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:994:993::/var/lib/chrony:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost Desktop]# sort -t : -k 3 -n user.txt
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
chrony:x:994:993::/var/lib/chrony:/sbin/nologin
saslauth:x:995:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
10.文件目录管理命令
10.1 touch 命令
用于创建空白文件或设置文件的时间。
语法格式:touch [参数] 文件名称
先使用 ls 命令查看一个文件的修改时间,随后修改这个文件,最后再查看一下文件的修改时间,看是否发生了变化:
[root@localhost Desktop]# ls -l user.txt
-rw-r--r--. 1 root root 839 Oct 31 16:24 user.txt
[root@localhost Desktop]# echo "Visit the Linuxprobe.com to linux skills" >> user.txt
[root@localhost Desktop]# ls -l user.txt
-rw-r--r--. 1 root root 880 Oct 31 16:39 user.txt
如果不想让别人知道我们修改了它,那么这时就可以用 touch 命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):
[root@localhost Desktop]# ls -l user.txt
-rw-r--r--. 1 root root 839 Oct 31 16:24 user.txt
[root@localhost Desktop]# echo "Visit the Linuxprobe.com to linux skills" >> user.txt
[root@localhost Desktop]# ls -l user.txt
-rw-r--r--. 1 root root 880 Oct 31 16:39 user.txt
[root@localhost Desktop]# touch -d "2024-10-31 16:24" user.txt
[root@localhost Desktop]# ls -l user.txt
-rw-r--r--. 1 root root 880 Oct 31 16:24 user.txt
10.2 mkdir 命令
用于创建空白的目录,英文全称为“make directory”。
语法格式:mkdir [参数] 目录名称
除了能创建单个空白目录外,mkdir 命令还可以结合-p 参数来递归创建出具有嵌套层叠关系的文件目录:
[root@localhost Desktop]# mkdir linuxprobe
[root@localhost Desktop]# mkdir -p a/b/c/d/e
[root@localhost Desktop]# cd a/
[root@localhost a]# cd b/
[root@localhost b]# cd c/
[root@localhost c]# cd d/
[root@localhost d]# cd e/
[root@localhost e]#
10.3 cp 命令
用于复制文件或目录,英文全称为“copy”。
语法格式:cp [参数] 源文件名称 目标文件名称
在 Linux 系统中,复制操作具体分为 3 种情况:
➢ 如果目标文件是目录,则会把源文件复制到该目录中;
➢ 如果目标文件也是普通文件,则会询问是否要覆盖它;
➢ 如果目标文件不存在,则执行正常的复制操作。
注:复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r 参数。
接下来,使用 touch 命令创建一个名为 install.log 的普通空白文件,然后将其复制为一份名为 x.log 的备份文件,最后再使用 ls 命令查看目录中的文件:
[root@localhost Desktop]# touch install.log
[root@localhost Desktop]# cp install.log x.log
[root@localhost Desktop]# ls
differ_A.txt~ differ_B.txt~ install.log number.txt~ user.txt~ x.log
10.4 mv 命令
用于剪切或重命名文件,英文全称为“move”。
语法格式:mv [参数] 源文件名称 目标文件名称
剪切操作不同于复制操作,因为它默认会把源文件删除,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名操作:
[root@localhost Desktop]# mv x.log linux.log
[root@localhost Desktop]# ls
differ_A.txt~ differ_B.txt~ install.log linux.log number.txt~ user.txt~
10.5 rm 命令
用于删除文件或目录,英文全称为“remove”。
语法格式:rm [参数] 文件名称
在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上-f 参数来强制删除。另外,要想删除一个目录,需要在 rm 命令后面加一个-r 参数才可以,否则删除不掉。
下面尝试删除前面创建的 install.log 和 linux.log 文件,可以感受一下加与不加-f 参数的区别:
[root@localhost Desktop]# ls
differ_A.txt~ differ_B.txt~ install.log linux.log number.txt~ user.txt~
[root@localhost Desktop]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@localhost Desktop]# ls
differ_A.txt~ differ_B.txt~ linux.log number.txt~ user.txt~
[root@localhost Desktop]# rm -f linux.log
[root@localhost Desktop]#
10.6 dd 命令
用于按照指定大小和个数的数据块来复制文件或转换文件。
语法格式:dd if=参数值 of=参数值 count=参数值 bs=参数值
Linux系统中有一个名为/dev/zero 的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为 dd命令的输入文件,来生成一个指定大小的文件:
用 dd 命令从/dev/zero 设备文件中取出一个大小为 560MB 的数据块,然后保存成名为 560_file 的文件:
[root@localhost Desktop]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 2.51701 s, 233 MB/s
dd 命令的功能也绝不仅限于复制文件这么简单。如果想把光驱设备中的光盘制作成 iso格式的镜像文件,在 Windows 系统中需要借助于第三方软件才能做到,但在 Linux 系统中可以直接使用 dd 命令来压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像:
[root@localhost Desktop]# dd if=/dev/cdrom of=RHEL-server-7.0.iso
114488+0 records in
114488+0 records out
58617856 bytes (59 MB) copied, 0.232777 s, 252 MB/s
10.7 file 命令
用于查看文件的类型。
语法格式:file 文件名称
[root@localhost Desktop]# file 560_file
560_file: data
[root@localhost Desktop]# file /dev/sda
/dev/sda: block special
10.8 tar 命令
用于对文件进行打包压缩或解压。
语法格式:tar 参数 文件名称
注:-f 参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称
推荐的压缩指令 | tar -czvf 压缩包名称.tar.gz 要打包的目录 |
推荐的解压指令 | tar -xzvf 压缩包名称.tar.gz |
先使用 tar 命令把/etc 目录通过 gzip格式进行打包压缩,并把文件命名为 etc.tar.gz:
[root@localhost ~]# tar -czvf etc.tar.gz /etc
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-lohit-bengali.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/65-0-khmeros-base.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/31-cantarell.conf
/etc/fonts/conf.d/67-lohit-malayalam.conf
/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
...
接下来将打包后的压缩包文件指定解压到/root/etc 目录中(先使用 mkdir 命令创建/root/etc目录):
[root@localhost ~]# mkdir /root/etc
[root@localhost ~]# 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-lohit-bengali.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/65-0-khmeros-base.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/31-cantarell.conf
etc/fonts/conf.d/67-lohit-malayalam.conf
etc/fonts/conf.d/10-scale-bitmap-fonts.conf
etc/fonts/conf.d/65-0-lohit-kannada.conf
etc/fonts/conf.d/20-unhint-small-vera.conf
etc/fonts/conf.d/65-0-madan.conf
...