第3章 系统命令
唯有读第一流的书,才有希望当第二流的人。读书一事,不可求全,贪多嚼不烂,以精读为上,细嚼慢咽,真正把一本经典的精妙,全部吃进肚子里,将那些美好的意象、真知灼见的道理、隐匿于句章之间的精气神,一一化为己用,这才叫读书,否则只是翻书,翻过千万卷,撑死也是个两脚书柜
系统当前时间
date命令:
切换用户
su 用户名
sudo 命令:表示使用超级管理员身份执行该命令,如果你当前不是管理员,希望以管理员身份执行某个命令时,使用sudo,需要输入超级管理员的密码:
echo命令
输出字符串
1 | echo "Hello, world!" |
这将会输出 Hello, world!
和一个换行符。
输出变量
1 | name="John" |
这将会输出 My name is John
和一个换行符。在输出字符串时,使用 $
符号加上变量名即可。
输出多行
1 | echo "line 1 |
这将会输出三行文本,每行一条。
输出特殊字符
1 | echo -e "Line 1\nLine 2\tTable" |
这将会输出两行文本,第一行后接一个换行符,第二行中的 Table
前有一个制表符。
sort命令
sort命令可以对文件中的内容以“行”为单位进行升序和降序排列:
a.txt 文件内容如下:
![image.png](
升序:
降序:
将文件中的内容当做数字进行排序(不再当做字符串):
a.txt文件内容:
当做数字进行排序:
diff命令
diff命令可以用来比较两个文件的不同之处:
a.txt文件内容如下:
b.txt文件内容如下:
比较a.txt和b.txt文件之间的区别:
以上的比较结果中:1c1是什么含义?3c3,4是什么含义?
c 表示 change,改变的意思。
1c1表示:第一个文件的第1行 和 第二个文件的第1行 发生了改变。
3c3,4表示:第一个文件的第3行 和 第二个文件的第3,4行不同,发生了改变。
重定向
输出重定向
:以覆盖的形式写到文件中。
:以追加的形式写到文件中。
凡是在控制台上能够打印出来的,统一都可以重定向,可以将其打印到控制台的行为重定向到文件或其它设备。例如:
将 ls -al的执行结果重定向到 ls.txt 文件中。
ls.txt文件内容如下:
以上方式是采用覆盖的方式,所谓覆盖方式指的是,每一次执行时,都会把 ls.txt 文件全部清空,然后重新写入。
如果要以追加的方式,则需要使用 >> ,这个可以自行测试一下。
输入重定向
<:将文件内容输入给某个命令,这是一种默认的行为,通常 < 是可以省略的。例如:
a.txt文件内容如下:
将 a.txt 文件中的内容输入给 sort命令:
<<:可以接收键盘的输入,例如:
EOF是一个结束符,随意的,当键盘输入EOF之后,键盘输入则自动结束,然后sort命令将键盘输入的内容进行排序。
grep命令
在某段内容中搜索
例如: grep 0 a.txt (在a.txt中搜索0)
grep
是一个强大的命令行文本搜索工具,用于在文件中查找匹配的字符串或模式,并将匹配行作为输出。以下是 grep
命令的用法详解:
基本用法:
1 | grep 'pattern' file |
'pattern'
表示要匹配的字符串或模式。file
表示要搜索的文件名。如果不指定文件名,则grep
命令会从标准输入中读取数据,等待用户输入并匹配字符串。
搜索多个文件:
1 | grep 'pattern' file1 file2 |
file1
和file2
表示要搜索的多个文件名。也可以使用通配符*.txt
搜索所有扩展名为.txt
的文件。
递归搜索目录:
1 | grep -r 'pattern' dir |
-r
表示递归搜索目录。dir
表示要搜索的目录。
显示匹配行前的几行或后的几行:
1 | grep -A 2 'pattern' file # 显示匹配行后2行 |
-A
表示显示匹配行后的几行。-B
表示显示匹配行前的几行。-C
表示同时显示匹配行前后的几行。这三个选项后面必须跟一个数字,表示要显示的行数。
同时输出匹配结果的行号:
1 | grep -n 'pattern' file |
-n
表示只输出匹配结果所在的行号。
忽略大小写:
1 | grep -i 'pattern' file |
-i
表示忽略大小写。
找出不匹配的行:
1 | grep -v 'pattern' file |
-v
输出不匹配模式的行。
使用正则表达式匹配:
1 | grep -E 'pattern' file |
-E
表示使用正则表达式匹配。
管道 |
将前面命令的输出作为后面命令的输入,可以叠加,例如:
查看系统进程
ps [命令参数]
常用参数:
-e :显示当前所有进程
-f :显示 UID,PPID,C 与 STIME 栏位信息
UID:该进程的所属用户
PID:进程id
PPID:父进程id
C:CPU使用百分比
STIME:启动时间
TTY:启动该进程的终端设备是哪个
TIME:耗费的CPU时间
CMD:该进程对应的命令
sleep命令
在 Linux 中,sleep
是一个常用的命令,用于暂停程序的执行一段时间。sleep
命令的基本语法如下:
1 | sleep NUMBER[SUFFIX] |
其中,NUMBER
为需要暂停的时间,单位是秒;SUFFIX
则可以是以下之一:
s
:秒(默认);m
:分;h
:小时;d
:日。
例如:
1 | 暂停 3 秒 |
启动sleep进程,暂停1天:
启动sleep进程,在后台暂停1天:
5277是这个sleep进程的id。
kill进程
kill 进程号
kill -9 进程号(强行杀死)
killall 进程名
找到进程:
杀死进程:
杀死所有的sleep进程:
top命令
top
命令是用于查看正在运行的系统进程信息的命令。它会实时动态地显示系统资源的使用情况,如 CPU 占用率、内存使用情况、进程情况等。通常用于系统监控和性能调优。
僵尸进程:在操作系统中,僵尸进程 (Zombie Process) 是指一个已经执行结束的进程,但其进程描述符仍然留在进程列表中,它不再执行任何其他操作,但仍然占用一定内存空间。
交换分区(Swap),也称虚拟存储器,是一种在计算机内存不足时,为了增加内存所采用的一种技术。当系统内存不足时,操作系统会把暂时不需要的内存数据和程序信息通过交换机制存储到硬盘上的交换分区中,以节省内存的使用,从而保证共享内存的进程正常运行。
q:退出top命令。
free命令
free
命令可以用于查看物理内存和交换分区的使用情况。下面是一条可能的 free
命令的输出结果的示例:
uptime命令
显示系统运行时间:
df命令
df
命令是 Linux 系统中的一个磁盘空间使用情况查询命令,用于显示当前文件系统的磁盘空间使用状况,以及文件系统的挂载点、磁盘大小、已用空间、可用空间、使用占比等信息。df
命令是 “disk free” 的缩写。
对于程序员来说,应该重点关注以上红框中的内容,已用空间超过80%则需要重点注意,以防磁盘已满导致数据无法写入而丢失。
du命令
du
命令是 Linux 系统中的一个磁盘空间占用查询命令,用于显示文件或目录占用的磁盘空间大小。du
命令是 “disk usage” 的缩写:
4表示占用4个字节的空间。
重启
reboot
关机
shutdown -h now
poweroff
shutdown -h now
和 poweroff
都是用于关机的 Linux 命令,它们的区别如下:
shutdown -h now
命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统。通常会在关机前向所有用户发送通知消息。poweroff
命令相较于shutdown -h now
更为强制,它会立即关闭系统电源,不会等待正在运行的进程结束。使用poweroff
命令时需要特别小心,因为它可能会丢失尚未保存的数据。
综上所述,shutdown -h now
命令会逐步关闭进程,允许程序释放资源并保存数据;而 poweroff
命令则会立即关闭系统电源,可能会丢失一些尚未保存的数据。因此,在正常关机的情况下,建议使用 shutdown -h now
命令;只有在意外情况下,比如系统出现严重故障等情况,才应该使用 poweroff
命令。
ifconfig命令
查看网卡的ip地址。在windows当中是:ipconfig。在linux当中是ifconfig。
ping命令
查看计算机之间是否可以正常通信
语法:
- ping ip地址
- ping 域名
curl命令
模拟用户访问,模拟浏览器行为。
- 例如:curl http://www.baidu.com (可以直接查看百度首页的前端代码。)
curl
命令是 Linux 系统中的一个用于发送 HTTP 请求的工具。它支持各种协议,包括 HTTP、HTTPS、FTP、IMAP、SMTP 等,可以用于从网络中获取数据、上传文件等。
curl
命令的基本语法如下:
1 | curl [options] <URL> |
其中,URL
表示要请求的目标地址。
curl
命令的常用选项如下:
-i
:显示响应头信息。-I
:只显示响应头信息,不显示响应体。-X
:设置请求方法,包括 GET、POST、PUT、DELETE 等。-d
:设置请求体数据(POST 请求)。-H
:设置请求头信息。-o/-O
:下载文件,并保存到本地。-u
:设置认证信息。-A
:设置 User-Agent。-s
:静默模式,不输出进度信息。
以下是 curl
命令的一些使用示例:
- 请求一个 URL 并输出响应信息:
1 | curl www.example.com |
- 发送 POST 请求:
1 | curl -X POST -d "name=john&age=30" www.example.com/submit |
- 下载一个文件:
1 | curl -O www.example.com/test.zip |
- 设置请求头信息:
1 | curl -H "User-Agent: Mozilla/5.0" www.example.com |
总之,curl
命令是一个非常方便的工具,可以用于从网络中获取数据、上传文件等,并且支持多种协议和请求方式。需要注意的是,在实际使用 curl
命令时,还需要根据具体情况设置相应的选项和参数。
wget
下载资源,语法:wget 资源地址
下载tomcat :wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.20/bin/apache-tomcat-10.1.20.tar.gz
下载结果:
netstat查看网络连接状态及端口
在实际开发中,netstat最常用的操作是查看网络连接情况。通过使用netstat命令,开发人员可以快速了解当前系统上的所有网络连接,包括正在监听的端口、建立的连接、连接状态等信息。这对于排查网络问题和监控系统状态非常有用。另外,netstat还可以用于检查网络安全,例如查看哪些端口正在被占用,是否有不安全的连接等。
以下是netstat命令的常用参数和用法:
- 查看所有的网络连接状态:
1 | netstat -a |
LISTENING 状态:表示该端口已占用,正在监听,等待客户端的连接。
CONNECTED状态:表示网络连接已建立,但并没有开始数据传输。
ESTABLISHED 状态:表示网络已连接,数据正在传输中。
TIME_WAIT 状态:表示连接已经被终止,在双方都完成数据传输后,该连接会进入TIME_WAIT
状态,并等待一段时间后关闭。
- 查看所有处于监听状态的连接:
1 | netstat -l |
- 查看所有TCP连接状态:
1 | netstat -t |
- 查看所有UDP连接状态:
1 | netstat -u |
- 查看所有处于CONNECTED状态的连接:
1 | netstat -o |
- 查看指定端口的网络连接状态:
1 | netstat -an | grep 端口号 |
例如,查看80端口的网络连接状态:
1 | netstat -an | grep :80 |