Linux是一种开源的操作系统,它有许多强大的命令行工具,可以让用户对系统进行各种操作和管理。本文将介绍一些Linux最常见最全的命令,以及它们的用法和示例。
目录
- ls:用于列出目录中的文件和子目录
- cd:用于切换当前工作目录
- pwd:于显示当前工作目录的绝对路径
- cp:用于复制文件或目录
- mv:用于移动或重命名文件或目录
- rm:用于删除文件或目录
- mkdir:用于创建新的目录
- rmdir:用于删除空的目录
- cat:用于显示或连接文件的内容
- echo:用于输出指定的字符串或变量
- grep:用于在文件或输入中搜索匹配的字符串
- find:用于在目录中查找文件或目录
- ps:用于显示当前进程的信息
- kill:用于终止指定的进程
- ping:用于测试网络连通性
- ssh:用于远程登录到另一台主机
- scp:用于在本地和远程主机之间复制文件
- curl:用于从或向服务器传输数据
- gzip:用于压缩和解压缩文件
- tar:用于创建或解压缩归档文件
- chmod:用于修改文件或目录的权限
- chown:用于修改文件或目录的所有者和组
- df:用于显示磁盘空间的使用情况
- du:用于显示文件或目录的大小
- top:用于显示系统的资源占用情况
- free:用于显示内存的使用情况
- date:用于显示或设置系统的日期和时间
- awk:用于对文本进行处理
- sed:用于对文本进行编辑
- touch:用于创建空文件或者修改文件的访问和修改时间
- uname:用于获取操作系统的基本信息
- head:用于从文件顶部返回指定行数
- tail:用于从文件底部返回指定行数
- ifconfig:用于显示或配置网络接口信息
- netstat:用于显示网络连接和路由表的信息
- route:用于显示和修改网络路由表
- traceroute:用于显示数据包到达目的地的路径
- wget:用于从互联网直接下载文件
- ufw:用于管理防火墙
- apt、pacman、yum、rpm:管理软件包的工具
- apt
- pacman
- yum
- useradd:创建新用户
- usermod:修改现有用户
- groupadd:创建新用户组
- groupmod:修改现有用户组
- sudo:超级用户身份
ls命令用于列出目录中的文件和子目录,它有许多选项可以控制输出的格式和内容。常用的选项有:
-a
:显示所有文件,包括隐藏文件(以.
开头的文件)-l
:显示详细信息,包括文件的权限,所有者,组,大小,修改时间等-h
:以可读的格式显示文件的大小,例如KB,MB,GB等-S
:按文件的大小排序-t
:按文件的修改时间排序-r
:反向排序-d
:只显示目录,而不是目录中的内容示例:
# 列出当前目录中的文件和子目录,不包括隐藏文件
$ ls
Desktop Documents Downloads Music Pictures Videos
# 列出当前目录中的所有文件和子目录,包括隐藏文件,以及详细信息
$ ls -a -l
total 32
drwxr-xr-x 7 alice alice 4096 Nov 14 21:51 .
drwxr-xr-x 3 root root 4096 Nov 14 21:51 ..
-rw------- 1 alice alice 230 Nov 14 21:51 .bash_history
drwx------ 3 alice alice 4096 Nov 14 21:51 .config
drwxr-xr-x 2 alice alice 4096 Nov 14 21:51 Desktop
drwxr-xr-x 2 alice alice 4096 Nov 14 21:51 Documents
drwxr-xr-x 2 alice alice 4096 Nov 14 21:51 Videos
# 列出当前目录中的所有文件和子目录,包括隐藏文件,以及详细信息,以可读的格式显示文件的大小,按文件的大小排序,反向排序
$ ls -a -l -h -S -r
total 32K
drwxr-xr-x 2 alice alice 4.0K Nov 14 21:51 Videos
drwxr-xr-x 2 alice alice 4.0K Nov 14 21:51 Desktop
drwx------ 3 alice alice 4.0K Nov 14 21:51 .config
drwxr-xr-x 7 alice alice 4.0K Nov 14 21:51 .
drwxr-xr-x 3 root root 4.0K Nov 14 21:51 ..
# 列出当前目录中的所有目录,不包括隐藏目录
$ ls -d */
Desktop/ Documents/ Downloads/ Music/ Pictures/ Videos/
cd命令用于切换当前工作目录,它可以接受一个参数,表示要切换到的目录的路径。路径可以是绝对路径,也可以是相对路径。常用的特殊路径有:
.
:表示当前目录..
:表示上一级目录~
:表示用户的主目录-
:表示上一次访问的目录示例:
# 切换到用户的主目录
$ cd ~
$ pwd
/home/alice
# 切换到Desktop目录
$ cd Desktop
$ pwd
/home/alice/Desktop
# 切换到上一级目录
$ cd ..
$ pwd
/home/alice
# 切换到上一次访问的目录
$ cd -
$ pwd
/home/alice/Desktop
pwd命令用于显示当前工作目录的绝对路径,它没有参数。示例:
# 显示当前工作目录的绝对路径
$ pwd
/home/alice/Desktop
cp命令用于复制文件或目录,它可以接受两个或多个参数,表示要复制的源文件或目录,以及要复制到的目标文件或目录。常用的选项有:
-r
:递归复制目录及其内容-i
:在覆盖已存在的文件时提示用户确认-v
:显示复制的过程示例:
# 复制文件file1.txt到文件file2.txt
$ cp file1.txt file2.txt
$ ls
file1.txt file2.txt
# 复制目录dir1及其内容到目录dir2,如果dir2不存在,则创建之
$ cp -r dir1 dir2
$ ls
dir1 dir2
# 复制多个文件file1.txt和file2.txt到目录dir1
$ cp file1.txt file2.txt dir1
$ ls dir1
file1.txt file2.txt
# 复制文件file1.txt到文件file2.txt,如果file2.txt已存在,则提示用户确认
$ cp -i file1.txt file2.txt
cp: overwrite 'file2.txt'? y
$ ls
file1.txt file2.txt
# 复制目录dir1及其内容到目录dir2,显示复制的过程
$ cp -r -v dir1 dir2
'dir1' -> 'dir2'
'dir1/file1.txt' -> 'dir2/file1.txt'
'dir1/file2.txt' -> 'dir2/file2.txt'
$ ls
dir1 dir2
mv命令用于移动或重命名文件或目录,它可以接受两个或多个参数,表示要移动或重命名的源文件或目录,以及要移动到或重命名为的目标文件或目录。常用的选项有:
-i
:在覆盖已存在的文件时提示用户确认-v
:显示移动或重命名的过程示例:
# 重命名文件file1.txt为file2.txt
$ mv file1.txt file2.txt
$ ls
file2.txt
# 移动文件file2.txt到目录dir1
$ mv file2.txt dir1
$ ls
dir1
# 移动目录dir1到目录dir2,如果dir2不存在,则创建之
$ mv dir1 dir2
$ ls
dir2
# 移动多个文件file1.txt和file2.txt到目录dir1
$ mv file1.txt file2.txt dir1
$ ls dir1
file1.txt file2.txt
# 重命名文件file1.txt为file2.txt,如果file2.txt已存在,则提示用户确认
$ mv -i file1.txt file2.txt
mv: overwrite 'file2.txt'? y
$ ls
file2.txt
# 移动目录dir1到目录dir2,显示移动的过程
$ mv -v dir1 dir2
'dir1' -> 'dir2'
$ ls
dir2
rm命令用于删除文件或目录,它可以接受一个或多个参数,表示要删除的文件或目录。常用的选项有:
-r
:递归删除目录及其内容-i
:在删除文件或目录时提示用户确认-v
:显示删除的过程-f
:强制删除文件或目录,不提示用户确认示例:
# 删除文件file1.txt
$ rm file1.txt
# 删除目录dir1及其内容
$ rm -r dir1
# 删除多个文件file1.txt和file2.txt
$ rm file1.txt file2.txt
# 删除文件file1.txt,提示用户确认
$ rm -i file1.txt
rm: remove regular file 'file1.txt'? y
# 删除目录dir1及其内容,显示删除的过程
$ rm -r -v dir1
removed 'dir1/file1.txt'
removed 'dir1/file2.txt'
removed directory 'dir1'
# 强制删除文件file2.txt,不提示用户确认
$ rm -f file2.txt
mkdir命令用于创建新的目录,它可以接受一个或多个参数,表示要创建的目录的路径。常用的选项有:
-p
:创建多级目录,如果父目录不存在,则一并创建之-v
:显示创建的过程示例:
# 创建一个名为dir1的目录
$ mkdir dir1
$ ls
dir1
# 创建多个目录dir1,dir2和dir3
$ mkdir dir1 dir2 dir3
$ ls
dir1 dir2 dir3
# 创建一个多级目录dir1/dir2/dir3,如果父目录不存在,则一并创建之
$ mkdir -p dir1/dir2/dir3
$ ls
dir1
$ ls dir1
dir2
$ ls dir1/dir2
dir3
# 创建一个名为dir1的目录,显示创建的过程
$ mkdir -v dir1
mkdir: created directory 'dir1'
$ ls
dir1
rmdir命令用于删除空的目录,它可以接受一个或多个参数,表示要删除的目录的路径。常用的选项有:
-p
:删除多级目录,如果子目录为空,则一并删除之-v
:显示删除的过程示例:
# 删除一个空的目录dir1
$ rmdir dir1
# 删除多个空的目录dir1,dir2和dir3
$ rmdir dir1 dir2 dir3
# 删除一个多级目录dir1/dir2/dir3,如果子目录为空,则一并删除之
$ rmdir -p dir1/dir2/dir3
# 删除一个空的目录dir1,显示删除的过程
$ rmdir -v dir1
rmdir: removing directory, 'dir1'
cat命令用于显示或连接文件的内容,它可以接受一个或多个参数,表示要显示或连接的文件。常用的选项有:
-n
:显示行号-b
:显示非空行的行号-s
:压缩连续的空行为一行-E
:在每行的末尾显示一个$
符号示例:
# 显示文件file1.txt的内容
$ cat file1.txt
Hello
World
# 连接文件file1.txt和file2.txt的内容,并显示到标准输出
$ cat file1.txt file2.txt
Hello
World
Linux
Bash
# 连接文件file1.txt和file2.txt的内容,并重定向到文件file3.txt
$ cat file1.txt file2.txt > file3.txt
echo命令用于输出指定的字符串或变量,它可以接受一个或多个参数,表示要输出的内容。常用的选项有:
-n
:不换行-e
:解释转义字符,例如\n
表示换行,\t
表示制表符,\a
表示响铃等-E
:不解释转义字符,原样输出示例:
# 输出Hello World
$ echo Hello World
Hello World
# 输出Hello World,不换行
$ echo -n Hello World
Hello World$
# 输出Hello\nWorld,解释转义字符
$ echo -e Hello\nWorld
Hello
World
# 输出Hello\nWorld,不解释转义字符
$ echo -E Hello\nWorld
Hello\nWorld
# 输出一个变量的值,变量名用$符号表示
$ name=alice
$ echo $name
alice
# 输出多个参数,用空格分隔
$ echo Hello $name, how are you?
Hello alice, how are you?
grep命令用于在文件或输入中搜索匹配的字符串,它可以接受一个或多个参数,表示要搜索的模式和要搜索的文件或输入。常用的选项有:
-i
:忽略大小写-v
:反向匹配,显示不匹配的行-c
:显示匹配的行数-n
:显示匹配的行号-l
:显示匹配的文件名-r
:递归搜索目录及其内容示例:
# 在文件file1.txt中搜索字符串Hello
$ grep Hello file1.txt
Hello World
# 在文件file1.txt和file2.txt中搜索字符串Hello,忽略大小写
$ grep -i hello file1.txt file2.txt
file1.txt:Hello World
file2.txt:hello linux
# 在文件file1.txt中搜索字符串Hello,显示不匹配的行
$ grep -v Hello file1.txt
Linux
Bash
# 在文件file1.txt中搜索字符串Hello,显示匹配的行数
$ grep -c Hello file1.txt
1
# 在文件file1.txt中搜索字符串Hello,显示匹配的行号
$ grep -n Hello file1.txt
1:Hello World
# 在目录dir1中搜索字符串Hello,显示匹配的文件名
$ grep -l Hello dir1
dir1/file1.txt
# 在目录dir1及其内容中搜索字符串Hello,递归搜索
$ grep -r Hello dir1
dir1/file1.txt:Hello World
dir1/dir2/file2.txt:Hello Linux
find命令用于在目录中查找文件或目录,它可以接受一个或多个参数,表示要查找的目录和要查找的条件。常用的条件有:
-name
:按文件名匹配,可以使用通配符,例如*.txt
表示以.txt
结尾的文件-type
:按文件类型匹配,可以是f
表示普通文件,d
表示目录,l
表示链接等-size
:按文件大小匹配,可以使用+
表示大于,-
表示小于,c
表示字节,k
表示千字节,M
表示兆字节等-perm
:按文件权限匹配,可以使用-
表示必须全部满足,+
表示至少满足一个,/
表示任意一个都不满足等-user
:按文件所有者匹配-group
:按文件所属组匹配-mtime
:按文件修改时间匹配,可以使用+
表示大于,-
表示小于,单位是天-exec
:对匹配的文件执行指定的命令,命令的结尾用\;
表示示例:
# 在当前目录中查找文件名为file1.txt的文件
$ find . -name file1.txt
./file1.txt
# 在当前目录及其内容中查找文件名以.txt结尾的文件
$ find . -name "*.txt"
./file1.txt
./file2.txt
./dir1/file3.txt
./dir1/dir2/file4.txt
# 在当前目录及其内容中查找类型为目录的文件
$ find . -type d
.
./dir1
./dir1/dir2
# 在当前目录及其内容中查找大小大于1M的文件
$ find . -size +1M
./file5.mp4
./dir1/file6.mp3
# 在当前目录及其内容中查找权限为755的文件
$ find . -perm 755
./file1.txt
./dir1
# 在当前目录及其内容中查找所有者为alice的文件
$ find . -user alice
./file1.txt
./file2.txt
./file5.mp4
./dir1
# 在当前目录及其内容中查找所属组为users的文件
$ find . -group users
./file1.txt
./file2.txt
./file5.mp4
./dir1
# 在当前目录及其内容中查找修改时间在7天内的文件
$ find . -mtime -7
./file1.txt
./file2.txt
./file5.mp4
./dir1
# 在当前目录及其内容中查找文件名以.txt结尾的文件,并显示它们的内容
$ find . -name "*.txt" -exec cat {} \;
This is file3.txt
This is file4.txt
ps命令用于显示当前进程的信息,它可以接受一个或多个参数,表示要显示的进程和要显示的信息。常用的参数有:
-e
:显示所有进程-f
:显示完整格式的信息,包括进程的用户,父进程,启动时间,命令等-u
:显示指定用户的进程-p
:显示指定进程号的进程-a
:显示除会话领导和无终端的进程外的所有进程-x
:显示无终端的进程示例:
# 显示所有进程的简要信息
$ ps -e
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:00 kworker/0:0H-kb
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:00 ksoftirqd/0
11 ? 00:00:00 rcu_sched
12 ? 00:00:00 migration/0
13 ? 00:00:00 idle_inject/0
14 ? 00:00:00 cpuhp/0
15 ? 00:00:00 cpuhp/1
16 ? 00:00:00 idle_inject/1
17 ? 00:00:00 migration/1
18 ? 00:00:00 ksoftirqd/1
20 ? 00:00:00 kworker/1:0H-kb
21 ? 00:00:00 cpuhp/2
22 ? 00:00:00 idle_inject/2
23 ? 00:00:00 migration/2
kill命令用于终止指定的进程,它可以接受一个或多个参数,表示要终止的进程的进程号或信号。常用的信号有:
-9
:强制终止进程,不可被忽略或捕获-15
:正常终止进程,可以被忽略或捕获-2
:发送中断信号,相当于按下Ctrl+C-3
:发送退出信号,相当于按下Ctrl+Z示例:
# 终止进程号为1234的进程,发送默认的信号15
$ kill 1234
# 强制终止进程号为1234的进程,发送信号9
$ kill -9 1234
# 终止进程号为1234和5678的进程,发送信号15
$ kill 1234 5678
# 发送中断信号到进程号为1234的进程,相当于按下Ctrl+C
$ kill -2 1234
# 发送退出信号到进程号为1234的进程,相当于按下Ctrl+Z
$ kill -3 1234
ping命令用于测试网络连通性,它可以接受一个或多个参数,表示要测试的主机的域名或IP地址。常用的选项有:
-c
:指定发送的数据包的个数-i
:指定发送数据包的间隔,单位是秒-s
:指定发送数据包的大小,单位是字节-t
:指定数据包的生存时间,单位是跳数示例:
# 测试与www.google.com的网络连通性,发送4个数据包,每个数据包大小为56字节
$ ping www.google.com
PING www.google.com (142.250.67.228) 56(84) bytes of data.
64 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=1 ttl=117 time=5.77 ms
64 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=2 ttl=117 time=5.76 ms
64 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=3 ttl=117 time=5.76 ms
64 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=4 ttl=117 time=5.76 ms
--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.760/5.763/5.770/0.004 ms
# 测试与www.google.com的网络连通性,发送10个数据包,每个数据包大小为128字节,每隔2秒发送一个
$ ping -c 10 -i 2 -s 128 www.google.com
PING www.google.com (142.250.67.228) 128(156) bytes of data.
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=1 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=2 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=3 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=4 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=5 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=6 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=7 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=8 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=9 ttl=117 time=5.76 ms
136 bytes from nrt12s02-in-f4.1e100.net (142.250.67.228): icmp_seq=10 ttl=117 time=5.76 ms
--- www.google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 18029ms
rtt min/avg/max/mdev = 5.760/5.763/5.768/0.007 ms
# 测试与www.google.com的网络连通性,发送4个数据包,每个数据包大小为56字节,指定数据包的生存时间为5跳
$ ping -c 4 -s 56 -t 5 www.google.com
PING www.google.com (142.250.67.228) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Time to live exceeded
From 10.0.0.1 icmp_seq=2 Time to live exceeded
From 10.0.0.1 icmp_seq=3 Time to live exceeded
From 10.0.0.1 icmp_seq=4 Time to live exceeded
--- www.google.com ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3004ms
ssh命令用于远程登录到另一台主机,它可以接受一个或多个参数,表示要登录的主机的用户名,域名或IP地址,以及要执行的命令。常用的选项有:
-p
:指定远程主机的端口号-i
:指定私钥文件的路径-v
:显示详细的连接信息-X
:启用X11转发,可以在本地显示远程主机的图形界面示例:
# 远程登录到主机192.168.0.100,使用用户名bob
$ ssh bob@192.168.0.100
bob@192.168.0.100's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-88-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
bob@ubuntu:~$
# 远程登录到主机192.168.0.100,使用用户名bob,指定端口号2222
$ ssh bob@192.168.0.100 -p 2222
bob@192.168.0.100's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-88-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
bob@ubuntu:~$
# 远程登录到主机192.168.0.100,使用用户名bob,指定私钥文件的路径
$ ssh bob@192.168.0.100 -i ~/.ssh/id_rsa
# 远程登录到主机192.168.0.100,使用用户名bob,显示详细的连接信息
$ ssh bob@192.168.0.100 -v
scp命令用于在本地和远程主机之间复制文件,它可以接受两个或多个参数,表示要复制的源文件或目录,以及要复制到的目标文件或目录。常用的选项有:
-r
:递归复制目录及其内容-p
:保留文件的属性,如修改时间,访问权限等-q
:不显示复制的过程-P
:指定远程主机的端口号-i
:指定私钥文件的路径示例:
# 从本地复制文件file1.txt到远程主机192.168.0.100的用户bob的主目录
$ scp file1.txt bob@192.168.0.100:
bob@192.168.0.100's password:
file1.txt 100% 10 10.0KB/s 00:00
# 从本地复制目录dir1及其内容到远程主机192.168.0.100的用户bob的主目录,保留文件的属性
$ scp -r -p dir1 bob@192.168.0.100:
bob@192.168.0.100's password:
dir1/ 100% 0 0.0KB/s 00:00
dir1/file1.txt 100% 10 10.0KB/s 00:00
dir1/file2.txt 100% 10 10.0KB/s 00:00
# 从远程主机192.168.0.100的用户bob的主目录复制文件file1.txt到本地
$ scp bob@192.168.0.100:/file1.txt
bob@192.168.0.100's password:
file1.txt 100% 10 10.0KB/s 00:00
# 从远程主机192.168.0.100的用户bob的主目录复制目录dir1及其内容到本地,不显示复制的过程
$ scp -r -q bob@192.168.0.100:~/dir1
bob@192.168.0.100's password:
# 从本地复制文件file1.txt到远程主机192.168.0.100的用户bob的主目录,指定端口号2222,指定私钥文件的路径
$ scp -P 2222 -i ~/.ssh/id_rsa file1.txt bob@192.168.0.100:~
file1.txt 100% 10 10.0KB/s 00:00
curl命令用于从或向服务器传输数据,它可以接受一个或多个参数,表示要传输的URL和要传输的数据。常用的选项有:
-o
:将输出保存到指定的文件-O
:将输出保存到URL中的文件名-s
:不显示传输的过程-v
:显示详细的传输信息-L
:跟随重定向的URL-H
:添加自定义的请求头-X
:指定请求的方法,如GET,POST,PUT等-d
:指定请求的数据,用于POST或PUT方法-F
:指定请求的表单数据,用于POST方法-u
:指定请求的用户名和密码示例:
# 从URL https://www.example.com 获取数据,并显示到标准输出
$ curl https://www.example.com
Example Domain
...
# 从URL https://www.example.com 获取数据,并保存到文件 example.html
$ curl -o example.html https://www.example.com
# 从URL https://www.example.com/example.html 获取数据,并保存到文件 example.html
$ curl -O https://www.example.com/example.html
# 从URL https://www.example.com 获取数据,不显示传输的过程
$ curl -s https://www.example.com
Example Domain
...
# 从URL https://www.example.com 获取数据,显示详细的传输信息
$ curl -v https://www.example.com
* Trying 93.184.216.34:443...
* TCP_NODELAY set
* Connected to www.example.com (93.184.216.34) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
# 从URL https://www.example.com 获取数据,跟随重定向的URL
$ curl -L https://www.example.com
Example Domain
...
# 向URL https://www.example.com 发送POST请求,添加自定义的请求头,指定请求的数据
$ curl -X POST -H "Content-Type: application/json" -d '{"name":"alice","age":25}' https://www.example.com
Example Domain
...
# 向URL https://www.example.com 发送POST请求,指定请求的表单数据
$ curl -X POST -F "name=alice" -F "age=25" https://www.example.com
Example Domain
...
# 向URL https://www.example.com 发送GET请求,指定请求的用户名和密码
$ curl -u alice:123456 https://www.example.com
Example Domain
...
它是用于压缩和解压缩文件的一个常用的Linux命令。gzip命令的基本语法是:
gzip [options] [files]
其中,options是一些可选的参数,用于指定压缩或解压缩的方式和格式。files是要压缩或解压缩的文件名,可以是一个或多个。如果不指定files,那么gzip会从标准输入读取数据,并输出到标准输出。
gzip命令的常用参数有:
gzip命令的一些使用示例:
gzip -v file.txt
gzip -k -9 file.txt
gzip -qr dir
gzip -dv file.txt.gz
gzip -dr dir
gzip -l file.txt.gz
gzip -t file.txt.gz
gzip -c < file.txt > file.txt.gz
gzip -dc < file.txt.gz > file.txt
tar命令用于创建或解压缩归档文件,它可以接受一个或多个参数,表示要执行的操作,要创建或解压缩的归档文件,以及要归档或解压缩的文件或目录。常用的选项有:
-c
:创建归档文件-x
:解压缩归档文件-f
:指定归档文件的名称-v
:显示归档或解压缩的过程-z
:使用gzip压缩或解压缩归档文件-j
:使用bzip2压缩或解压缩归档文件-J
:使用xz压缩或解压缩归档文件示例:
# 创建一个名为archive.tar的归档文件,包含文件file1.txt和file2.txt
$ tar -c -f archive.tar file1.txt file2.txt
# 创建一个名为archive.tar.gz的归档文件,使用gzip压缩,包含文件file1.txt和file2.txt
$ tar -c -z -f archive.tar.gz file1.txt file2.txt
# 创建一个名为archive.tar.bz2的归档文件,使用bzip2压缩,包含文件file1.txt和file2.txt
$ tar -c -j -f archive.tar.bz2 file1.txt file2.txt
# 创建一个名为archive.tar.xz的归档文件,使用xz压缩,包含文件file1.txt和file2.txt
$ tar -c -J -f archive.tar.xz file1.txt file2.txt
# 创建一个名为archive.tar的归档文件,包含目录dir1及其内容,显示归档的过程
$ tar -c -v -f archive.tar dir1
dir1/
dir1/file1.txt
dir1/file2.txt
# 解压缩归档文件archive.tar,显示解压缩的过程
$ tar -x -v -f archive.tar
dir1/
dir1/file1.txt
dir1/file2.txt
# 解压缩归档文件archive.tar.gz,使用gzip解压缩
$ tar -x -z -f archive.tar.gz
# 解压缩归档文件archive.tar.bz2,使用bzip2解压缩
$ tar -x -j -f archive.tar.bz2
# 解压缩归档文件archive.tar.xz,使用xz解压缩
$ tar -x -J -f archive.tar.xz
chmod命令用于修改文件或目录的权限,它可以接受一个或多个参数,表示要修改的权限,要修改的文件或目录。常用的选项有:
-R
:递归修改目录及其内容的权限-v
:显示修改的过程示例:
# 修改文件file1.txt的权限,使得所有者可以读写,组成员和其他用户只能读
$ chmod 644 file1.txt
# 修改文件file1.txt的权限,使得所有者可以读写执行,组成员和其他用户只能读执行,使用符号表示权限
$ chmod u=rwx,g=rx,o=rx file1.txt
# 修改目录dir1及其内容的权限,使得所有者可以读写执行,组成员和其他用户只能读执行,递归修改
$ chmod -R 755 dir1
# 修改目录dir1及其内容的权限,使得所有者可以读写执行,组成员和其他用户只能读执行,递归修改,显示修改的过程
$ chmod -R -v 755 dir1
mode of 'dir1' changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)
mode of 'dir1/file1.txt' changed from 0666 (rw-rw-rw-) to 0644 (rw-r--r--)
mode of 'dir1/file2.txt' changed from 0666 (rw-rw-rw-) to 0644 (rw-r--r--)
chown命令用于修改文件或目录的所有者和组,它可以接受一个或多个参数,表示要修改的所有者和组,要修改的文件或目录。常用的选项有:
-R
:递归修改目录及其内容的所有者和组-v
:显示修改的过程示例:
# 修改文件file1.txt的所有者为bob,组为staff
$ chown bob:staff file1.txt
# 修改目录dir1及其内容的所有者为bob,组为staff,递归修改
$ chown -R bob:staff dir1
# 修改目录dir1及其内容的所有者为bob,组为staff,递归修改,显示修改的过程
$ chown -R -v bob:staff dir1
changed ownership of 'dir1' from alice:alice to bob:staff
changed ownership of 'dir1/file1.txt' from alice:alice to bob:staff
changed ownership of 'dir1/file2.txt' from alice:alice to bob:staff
df命令用于显示磁盘空间的使用情况,它可以接受一个或多个参数,表示要显示的文件系统或文件。常用的选项有:
-h
:以可读的格式显示磁盘空间,如K,M,G等-T
:显示文件系统的类型-a
:显示所有文件系统,包括特殊的文件系统,如proc,tmpfs等示例:
# 显示所有文件系统的磁盘空间使用情况
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1009220 0 1009220 0% /dev
tmpfs 204920 1408 203512 1% /run
/dev/sda1 51199104 9963200 38667664 21% /
tmpfs 1024596 0 1024596 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1024596 0 1024596 0% /sys/fs/cgroup
/dev/loop0 56832 56832 0 100% /snap/core18/2128
/dev/loop1 56832 56832 0 100% /snap/core18/2246
/dev/loop2 33152 33152 0 100% /snap/snapd/13270
/dev/loop3 33152 33152 0 100% /snap/snapd/13640
/dev/loop4 72320 72320 0 100% /snap/lxd/21545
/dev/loop5 69248 69248 0 100% /snap/lxd/21029
tmpfs 204916 16 204900 1% /run/user/1000
# 显示所有文件系统的磁盘空间使用情况,以可读的格式显示
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 986M 0 986M 0% /dev
tmpfs 201M 1.4M 199M 1% /run
/dev/sda1 49G 9.5G 37G 21% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
/dev/loop0 56M 56M 0 100% /snap/core18/2128
/dev/loop1 56M 56M 0 100% /snap/core18/2246
/dev/loop2 33M 33M 0 100% /snap/snapd/13270
/dev/loop3 33M 33M 0 100% /snap/snapd/13640
/dev/loop4 71M 71M 0 100% /snap/lxd/21545
/dev/loop5 68M 68M 0 100% /snap/lxd/21029
tmpfs 201M 16K 201M 1% /run/user/1000
# 显示所有文件系统的磁盘空间使用情况,显示文件系统的类型
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
udev devtmpfs 1009220 0 1009220 0% /dev
tmpfs tmpfs 204920 1408 203512 1% /run
/dev/sda1 ext4 51199104 9963200 38667664 21% /
tmpfs tmpfs 1024596 0 1024596 0% /dev/shm
tmpfs tmpfs 5120 4 5116 1% /run/lock
tmpfs tmpfs 1024596 0 1024596 0% /sys/fs/cgroup
/dev/loop0 squashfs 56832 56832 0 100% /snap/core18/2128
/dev/loop1 squashfs 56832 56832 0 100% /snap/core18/2246
/dev/loop2 squashfs 33152 33152 0 100% /snap/snapd/13270
/dev/loop3 squashfs 33152 33152 0 100% /snap/snapd/13640
/dev/loop4 squashfs 72320 72320 0 100% /snap/lxd/21545
/dev/loop5 squashfs 69248 69248 0 100% /snap/lxd/21029
tmpfs tmpfs 204916 16 204900 1% /run/user/1000
# 显示指定的文件系统或文件的磁盘空
# 显示指定的文件系统或文件的磁盘空间使用情况,如/dev/sda1或file1.txt
$ df /dev/sda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 51199104 9963200 38667664 21% /
$ df file1.txt
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 51199104 9963200 38667664 21% /
du命令用于显示文件或目录的大小,它可以接受一个或多个参数,表示要显示的文件或目录。常用的选项有:
-h
:以可读的格式显示文件或目录的大小,如K,M,G等-s
:只显示总的大小,而不显示每个子目录或文件的大小-a
:显示所有文件和目录的大小,而不只是目录的大小示例:
# 显示当前目录及其子目录的大小
$ du
4 ./dir1
8 ./dir2
16 .
# 显示当前目录及其子目录的大小,以可读的格式显示
$ du -h
4.0K ./dir1
8.0K ./dir2
16K .
# 显示当前目录的总大小,以可读的格式显示
$ du -s -h
16K .
# 显示当前目录及其子目录和文件的大小,以可读的格式显示
$ du -a -h
4.0K ./dir1/file4.txt
4.0K ./dir1/file5.txt
4.0K ./dir1
4.0K ./dir2/file6.txt
4.0K ./dir2/file7.txt
8.0K ./dir2
4.0K ./file1.txt
4.0K ./file2.txt
4.0K ./file3.txt
16K .
# 显示指定的文件或目录的大小,如file1.txt或dir1
$ du file1.txt
4 file1.txt
$ du dir1
4 dir1
top命令用于显示系统的资源占用情况,它可以实时更新,显示各个进程的信息,如PID,用户,CPU,内存,命令等。常用的选项有:
-d
:指定刷新的间隔,单位是秒-u
:指定显示某个用户的进程-p
:指定显示某个进程的信息,可以有多个示例:
# 显示系统的资源占用情况,实时更新
$ top
top - 08:30:10 up 1:05, 1 user, load average: 0.00, 0.01, 0.00
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1990.9 total, 1080.6 free, 281.4 used, 628.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1569.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1015 alice 20 0 922952 46296 30616 S 0.0 2.3 0:02.08 gnome-shell
826 root 20 0 282976 15732 12304 S 0.0 0.8 0:01.67 Xorg
948 alice 20 0 287808 11364 9368 S 0.0 0.6 0:00.14 gnome-session-b
971 alice 20 0 111760 9336 7780 S 0.0 0.5 0:00.06 ssh-agent
1000 alice 20 0 191484 9164 7840 S 0.0 0.4 0:00.05 ibus-daemon
1005 alice 20 0 111508 8940 7560 S 0.0 0.4 0:00.03 ibus-x11
1008 alice 20 0 109704 8860 7480 S 0.0 0.4 0:00.03 ibus-portal
1028 alice 20 0 274300 8796 7264 S 0.0 0.4 0:00.04 at-spi-bus-laun
1033 alice 20 0 109704 8760 7380 S 0.0 0.4 0:00.03 ibus-engine-sim
1040 alice 20 0 274300 8744 7216 S 0.0 0.4 0:00.04 at-spi-bus-laun
1051 alice 20 0 191484 8720 7400 S 0.0 0.4 0:00.04 ibus-daemon
1055 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1060 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1065 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1070 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1075 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1080 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1085 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1090 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
1095 alice 20 0 109704 8704 7324 S 0.0 0.4 0:00.03 ibus-engine-sim
# 显示系统的资源占用情况,指定刷新的间隔为2秒
$ top -d 2
top - 08:30:12 up 1:05, 1 user, load average: 0.00, 0.01, 0.00
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1990.9 total, 1080.6 free, 281.4 used, 628.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1569.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1015 alice 20 0 922952 46296 30616 S 0.0 2.3 0:02.08 gnome-shell
826 root 20 0 282976 15732 12304 S 0.0 0.8 0:01.67 Xorg
948 alice 20 0 287808 11364 9368 S 0.0 0.6 0:00.14 gnome-session-b
971 alice 20 0 111760 9336 7780 S 0.0 0.5 0:00.06 ssh-agent
1000 alice 20 0 191484 9164 7840 S 0.0 0.4 0:00.05 ibus-daemon
1005 alice 20 0 111508 8940 7560 S 0.0 0.4 0:00.03 ibus-x11
1008 alice 20 0 109704 8860 7480 S 0.0 0.4 0:00.03 ibus-portal
1028 alice 20 0 274300 8796 7264 S 0.0 0.4 0:00.04 at-spi-bus-laun
1033 alice 20 0 109704 8760 7380 S 0.0 0.4 0:00.03 ibus
free命令用于显示内存的使用情况,它可以接受一个或多个参数,表示要显示的内存类型或单位。常用的选项有:
-h
:以可读的格式显示内存的使用情况,如K,M,G等-t
:显示总的内存和交换空间的使用情况-m
:以兆字节为单位显示内存的使用情况-g
:以吉字节为单位显示内存的使用情况示例:
# 显示内存的使用情况
$ free
total used free shared buff/cache available
Mem: 2038996 281400 1080620 14080 677976 1569748
Swap: 0 0 0
# 显示内存的使用情况,以可读的格式显示
$ free -h
total used free shared buff/cache available
Mem: 1.9Gi 274Mi 1.0Gi 13Mi 662Mi 1.5Gi
Swap: 0B 0B 0B
# 显示内存的使用情况,显示总的内存和交换空间的使用情况
$ free -t
total used free shared buff/cache available
Mem: 2038996 281400 1080620 14080 677976 1569748
Swap: 0 0 0
Total: 2038996 281400 1080620
# 显示内存的使用情况,以兆字节为单位显示
$ free -m
total used free shared buff/cache available
Mem: 1990 274 1054 13 662 1533
Swap: 0 0 0
# 显示内存的使用情况,以吉字节为单位显示
$ free -g
total used free shared buff/cache available
Mem: 1 0 1 0 0 1
Swap: 0 0 0
date命令用于显示或设置系统的日期和时间,它可以接受一个或多个参数,表示要显示或设置的日期和时间的格式。常用的选项有:
-u
:显示或设置世界协调时(UTC)的日期和时间-s
:设置系统的日期和时间,需要root权限-d
:显示指定的日期和时间,而不是当前的日期和时间示例:
# 显示当前的日期和时间
$ date
Tue 14 Nov 2023 08:30:14 AM CST
# 显示当前的日期和时间,以指定的格式显示
$ date "+%Y-%m-%d %H:%M:%S"
2023-11-14 08:30:14
# 显示世界协调时(UTC)的日期和时间
$ date -u
Tue 14 Nov 2023 00:30:14 UTC
# 设置系统的日期和时间为2023-11-14 08:30:14,需要root权限
$ sudo date -s "2023-11-14 08:30:14"
Tue 14 Nov 2023 08:30:14 CST
# 显示指定的日期和时间,如明天的日期和时间
$ date -d "tomorrow"
Wed 15 Nov 2023 08:30:14 AM CST
awk命令用于对文本进行处理,它可以接受一个或多个参数,表示要执行的脚本,要处理的文件或输入。常用的选项有:
-F
:指定输入的分隔符,默认是空格-v
:指定变量的值-f
:指定脚本文件的路径示例:
# 对文件file1.txt的每一行进行打印
$ awk '{print $0}' file1.txt
# 对文件file1.txt的每一行进行打印,只打印第一列
$ awk '{print $1}' file1.txt
# 对文件file1.txt的每一行进行打印,只打印第二列,指定分隔符为l
$ awk -F l '{print $2}' file1.txt
# 对文件file1.txt的每一行进行打印,添加行号,使用变量NR表示行号
$ awk '{print NR,$0}' file1.txt
# 对文件file1.txt的每一行进行打印,添加行号,使用变量line表示行号,指定变量的值为1
$ awk -v line=1 '{print line,$0; line++}' file1.txt
# 对文件file1.txt的每一行进行打印,使用脚本文件script.awk,脚本文件的内容为{print $0}
$ awk -f script.awk file1.txt
sed命令用于对文本进行编辑,它可以接受一个或多个参数,表示要执行的脚本,要编辑的文件或输入。常用的选项有:
-e
:指定要执行的脚本,可以有多个-f
:指定脚本文件的路径-i
:直接修改文件,而不是输出到标准输出-n
:不显示原始的输入,只显示被修改的部分示例:
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,并显示到标准输出
$ sed 's/Hello/Hi/' file1.txt
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,直接修改文件
$ sed -i 's/Hello/Hi/' file1.txt
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,只显示被修改的部分
$ sed -n 's/Hello/Hi/p' file1.txt
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,使用g选项表示全局替换,即替换每一行中的所有匹配
$ sed 's/Hello/Hi/g' file1.txt
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,使用&符号表示匹配的字符串,可以在替换的字符串中使用
$ sed 's/Hello/[&]/' file1.txt
# 对文件file1.txt的每一行进行替换,将Hello替换为Hi,使用\1表示第一个括号中匹配的字符串,可以在替换的字符串中使用
$ sed 's/\(Hello\) \(World\)/\2 \1/' file1.txt
# 对文件file1.txt的每一行进行删除,删除包含Hello的行
$ sed '/Hello/d' file1.txt
# 对文件file1.txt的每一行进行插入,插入一行Hi在每一行的前面
$ sed 'i\Hi' file1.txt
# 对文件file1.txt的每一行进行追加,追加一行Hi在每一行的后面
$ sed 'a\Hi' file1.txt
# 对文件file1.txt的每一行进行执行多个脚本,使用-e选项指定多个脚本
$ sed -e 's/Hello/Hi/' -e 's/World/Everyone/' file1.txt
# 对文件file1.txt的每一行进行执行脚本文件script.sed,脚本文件的内容为s/Hello/Hi/
$ sed -f script.sed file1.txt
touch命令用于创建空文件或者修改文件的访问和修改时间,它可以接受一个或多个参数,表示要创建或修改的文件。常用的选项有:
-a
:只修改文件的访问时间,而不修改文件的修改时间-m
:只修改文件的修改时间,而不修改文件的访问时间-t
:指定文件的访问和修改时间,格式为[[CC]YY]MMDDhhmm[.ss]示例:
# 创建一个空文件file1.txt
$ touch file1.txt
# 创建多个空文件file2.txt和file3.txt
$ touch file2.txt file3.txt
# 修改文件file1.txt的访问和修改时间为当前时间
$ touch file1.txt
# 只修改文件file1.txt的访问时间为当前时间
$ touch -a file1.txt
# 只修改文件file1.txt的修改时间为当前时间
$ touch -m file1.txt
# 修改文件file1.txt的访问和修改时间为2023-11-14 08:30:00
$ touch -t 202311140830.00 file1.txt
uname命令用于获取操作系统的基本信息,它可以接受一个或多个参数,表示要显示的信息类型。常用的选项有:
-a
:显示所有的信息,包括内核名称,网络节点名,内核版本,内核发行号,硬件名称,处理器类型,硬件平台,操作系统名称等-s
:显示内核名称-n
:显示网络节点名-r
:显示内核版本-v
:显示内核发行号-m
:显示硬件名称-p
:显示处理器类型-i
:显示硬件平台-o
:显示操作系统名称示例:
# 显示操作系统的基本信息
$ uname
Linux
# 显示所有的信息
$ uname -a
Linux alice-pc 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# 显示内核名称
$ uname -s
Linux
# 显示网络节点名
$ uname -n
alice-pc
# 显示内核版本
$ uname -r
5.4.0-90-generic
# 显示内核发行号
$ uname -v
#101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021
# 显示硬件名称
$ uname -m
x86_64
# 显示处理器类型
$ uname -p
x86_64
# 显示硬件平台
$ uname -i
x86_64
# 显示操作系统名称
$ uname -o
GNU/Linux
head命令用于从文件顶部返回指定行数,它可以接受一个或多个参数,表示要显示的文件或行数。常用的选项有:
-n
:指定要显示的行数,可以是正数或负数,正数表示从顶部开始,负数表示从底部开始-c
:指定要显示的字节数,可以是正数或负数,正数表示从顶部开始,负数表示从底部开始示例:
# 显示文件file1.txt的前10行
$ head file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
# 显示文件file1.txt的前5行
$ head -n 5 file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
This is the fourth line of file1.txt
This is the fifth line of file1.txt
# 显示文件file1.txt的除了最后5行之外的所有行
$ head -n -5 file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
This is the fourth line of file1.txt
This is the fifth line of file1.txt
# 显示文件file1.txt的前20个字节
$ head -c 20 file1.txt
This is the first l
# 显示文件file1.txt的除了最后20个字节之外的所有字节
$ head -c -20 file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
This is the fourth line of file1.txt
This is the fifth line of file1.txt
tail命令用于从文件底部返回指定行数,它可以接受一个或多个参数,表示要显示的文件或行数。常用的选项有:
-n
:指定要显示的行数,可以是正数或负数,正数表示从底部开始,负数表示从顶部开始-c
:指定要显示的字节数,可以是正数或负数,正数表示从底部开始,负数表示从顶部开始-f
:持续显示文件的最新内容,直到按下Ctrl+C退出示例:
# 显示文件file1.txt的最后10行
$ tail file1.txt
This is the fifty-first line of file1.txt
This is the fifty-second line of file1.txt
This is the fifty-third line of file1.txt
This is the fifty-fourth line of file1.txt
This is the fifty-fifth line of file1.txt
This is the fifty-sixth line of file1.txt
This is the fifty-seventh line of file1.txt
This is the fifty-eighth line of file1.txt
This is the fifty-ninth line of file1.txt
This is the sixtieth line of file1.txt
# 显示文件file1.txt的最后5行
$ tail -n 5 file1.txt
This is the fifty-sixth line of file1.txt
This is the fifty-seventh line of file1.txt
This is the fifty-eighth line of file1.txt
This is the fifty-ninth line of file1.txt
This is the sixtieth line of file1.txt
# 显示文件file1.txt的除了最后5行之外的所有行
$ tail -n -5 file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
This is the fourth line of file1.txt
This is the fifth line of file1.txt
# 显示文件file1.txt的最后20个字节
$ tail -c 20 file1.txt
sixtieth line of file1.txt
# 显示文件file1.txt的除了最后20个字节之外的所有字节
$ tail -c -20 file1.txt
This is the first line of file1.txt
This is the second line of file1.txt
This is the third line of file1.txt
This is the fourth line of file1.txt
ifconfig命令用于显示或配置网络接口信息。它可以显示每个网络接口的IP地址、子网掩码、广播地址、MAC地址、MTU值等信息,也可以用于修改这些信息或启动或关闭网络接口。
ifconfig命令的语法格式如下:
ifconfig [interface] [options]
其中,interface是要操作的网络接口的名称,如eth0、lo等。如果不指定interface,那么ifconfig会显示所有网络接口的信息。options是一些可选的参数,用于修改网络接口的信息或状态。常用的options有:
ifconfig命令的示例:
# 显示所有网络接口的信息
ifconfig
# 显示eth0网络接口的信息
ifconfig eth0
# 为eth0网络接口添加一个IP地址和子网掩码
ifconfig eth0 add 192.168.1.100/24
# 为eth0网络接口删除一个IP地址和子网掩码
ifconfig eth0 del 192.168.1.100/24
# 设置eth0网络接口的MAC地址
ifconfig eth0 hw ether 00:11:22:33:44:55
# 设置eth0网络接口的MTU值为1500
ifconfig eth0 mtu 1500
# 启动eth0网络接口
ifconfig eth0 up
# 关闭eth0网络接口
ifconfig eth0 down
netstat命令用于显示网络连接和路由表的信息。它可以显示TCP、UDP、ICMP、IP等协议的连接状态、监听端口、套接字信息等,也可以显示路由表、接口统计、多播成员等信息。
netstat命令的语法格式如下:
netstat [options]
其中,options是一些可选的参数,用于指定要显示的信息的类型和格式。常用的options有:
netstat命令的示例:
# 显示所有连接和监听端口
netstat -a
# 显示所有TCP连接和监听端口,以数字形式显示IP地址和端口号,并显示对应的进程ID和程序名
netstat -antp
# 显示所有UDP连接和监听端口,以数字形式显示IP地址和端口号,并显示对应的进程ID和程序名
netstat -anup
# 显示路由表
netstat -r
# 显示网络接口的统计信息
netstat -i
# 显示各个协议的统计信息
netstat -s
route命令用于显示和修改网络路由表。它可以显示当前系统的路由表,也可以用于添加、删除或修改路由条目。
route命令的语法格式如下:
route [options] [command]
其中,options是一些可选的参数,用于指定要显示或修改的路由表的类型。常用的options有:
command是要执行的操作,可以是以下之一:
如果不指定command,那么route会显示当前的路由表。
route命令的示例:
# 显示当前的路由表,以数字形式显示IP地址和网关
route -n
# 添加一条默认路由,网关为192.168.1.1,网络接口为eth0
route add default gw 192.168.1.1 eth0
# 删除一条默认路由
route del default
# 添加一条静态路由,目的网络为10.0.0.0/24,网关为192.168.1.2,网络接口为eth0
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.2 eth0
# 删除一条静态路由
route del -net 10.0.0.0 netmask 255.255.255.0
# 添加一条静态路由,目的主机为10.0.0.1,网关为192.168.1.2,网络接口为eth0
route add -host 10.0.0.1 gw 192.168.1.2 eth0
# 删除一条静态路由
route del -host 10.0.0.1
traceroute命令用于显示数据包到达目的地的路径。它可以显示数据包经过的每个路由器的IP地址、主机名、往返时间等信息,从而帮助我们分析网络的连通性和性能。
traceroute命令的语法格式如下:
traceroute [options] destination
其中,destination是要发送数据包的目的地,可以是IP地址或主机名。options是一些可选的参数,用于指定发送数据包的方式和显示结果的格式。常用的options有:
traceroute命令的示例:
# 显示数据包到达www.baidu.com的路径,使用UDP协议发送数据包
traceroute www.baidu.com
# 显示数据包到达8.8.8.8的路径,使用ICMP协议发送数据包,显示数字形式的IP地址
traceroute -n -I 8.8.8.8
# 显示数据包到达www.google.com的路径,使用TCP协议发送数据包,指定最大跳数为20,每个跳数发送2个数据包,等待回应的最长时间为3秒
traceroute -T -m 20 -q 2 -w 3 www.google.com
wget命令用于从互联网直接下载文件,它可以接受一个或多个参数,表示要下载的文件的URL或选项。常用的选项有:
-O
:指定下载文件的输出文件名,如果不指定,则使用URL中的文件名-c
:继续下载之前未完成的文件,而不是重新开始下载-b
:在后台模式下载文件,不占用终端-q
:静默模式下载文件,不显示任何信息-i
:从指定的文件中读取URL列表,每行一个URL示例:
# 下载一个文件,使用URL中的文件名
$ wget https://example.com/file1.txt
# 下载一个文件,指定输出文件名为file2.txt
$ wget -O file2.txt https://example.com/file1.txt
# 继续下载之前未完成的文件
$ wget -c https://example.com/file1.txt
# 在后台模式下载文件,不占用终端
$ wget -b https://example.com/file1.txt
# 静默模式下载文件,不显示任何信息
$ wget -q https://example.com/file1.txt
# 从指定的文件中读取URL列表,每行一个URL
$ cat url-list.txt
ufw命令用于管理防火墙,它可以接受一个或多个参数,表示要执行的操作或选项。常用的选项有:
enable
:启用防火墙disable
:禁用防火墙status
:显示防火墙的状态和规则allow
:允许指定的端口或服务通过防火墙deny
:拒绝指定的端口或服务通过防火墙delete
:删除指定的规则示例:
# 启用防火墙
$ sudo ufw enable
Firewall is active and enabled on system startup
# 禁用防火墙
$ sudo ufw disable
Firewall stopped and disabled on system startup
# 显示防火墙的状态和规则
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
# 允许端口80通过防火墙
$ sudo ufw allow 80
Rule added
Rule added (v6)
# 拒绝端口25通过防火墙
$ sudo ufw deny 25
Rule added
Rule added (v6)
# 删除拒绝端口25的规则
$ sudo ufw delete deny 25
Rule deleted
Rule deleted (v6)
这些命令都是用于管理软件包的工具,它们可以安装,卸载,更新,查询软件包。不同的Linux发行版使用不同的包管理器,例如:
这些命令的用法和选项有些差异,但是基本的功能和逻辑都是类似的。下面我会以apt为例,介绍一些常用的操作和选项,其他的包管理器你可以参考[这个网站]进行比较和学习。
apt命令是Ubuntu和Debian的包管理器,它可以接受一个或多个参数,表示要执行的操作或选项。常用的操作有:
install
:安装指定的软件包或更新已安装的软件包remove
:卸载指定的软件包,但保留其配置文件purge
:卸载指定的软件包,并删除其配置文件update
:更新软件包的列表,从软件源获取最新的信息upgrade
:更新所有已安装的软件包,安装最新的版本search
:搜索软件包的名称或描述,找到匹配的软件包show
:显示指定的软件包的详细信息,如版本,大小,依赖等常用的选项有:
-y
:自动回答所有的提示,不需要用户确认-s
:模拟模式,只显示要执行的操作,但不实际执行-f
:修复模式,尝试修复依赖关系或损坏的软件包-q
:安静模式,只显示错误和警告,不显示其他信息# 安装一个软件包,如vim
$ sudo apt install vim
# 卸载一个软件包,如vim,但保留其配置文件
$ sudo apt remove vim
# 卸载一个软件包,如vim,并删除其配置文件
$ sudo apt purge vim
它是Arch Linux和Manjaro的包管理器,它可以接受一个或多个参数,表示要执行的操作或选项。常用的操作有:
-S
:安装指定的软件包或组,或者从软件源同步数据库-R
:卸载指定的软件包或组,或者删除孤立的软件包-U
:安装本地的软件包文件-Q
:查询已安装的软件包或组,或者显示软件包的信息-Ss
:搜索软件包的名称或描述,找到匹配的软件包-Syu
:更新所有已安装的软件包,安装最新的版本常用的选项有:
-y
:刷新软件源数据库-u
:升级所有已安装的软件包-q
:安静模式,只显示必要的信息-s
:搜索模式,根据关键字查找软件包-i
:显示软件包的详细信息,如版本,大小,依赖等示例:
# 安装一个软件包,如vim
$ sudo pacman -S vim
# 卸载一个软件包,如vim
$ sudo pacman -R vim
# 查询已安装的软件包或组,如vim或base
$ pacman -Q vim
vim 8.2.3458-1
$ pacman -Q base
base 2-2
# 显示软件包的详细信息,如vim
$ pacman -Qi vim
# 搜索软件包的名称或描述,找到匹配的软件包,如vim
$ pacman -Ss vim
它是Red Hat和CentOS的包管理器,它可以接受一个或多个参数,表示要执行的操作或选项。常用的操作有:
install
:安装指定的软件包或组,或者从软件源同步数据库remove
:卸载指定的软件包或组,或者删除孤立的软件包update
:更新所有已安装的软件包,安装最新的版本search
:搜索软件包的名称或描述,找到匹配的软件包info
:显示指定的软件包或组的详细信息,如版本,大小,依赖等list
:列出软件源中的所有软件包或组,或者已安装的软件包或组常用的选项有:
-y
:自动回答所有的提示,不需要用户确认-q
:安静模式,只显示必要的信息-v
:详细模式,显示更多的信息示例:
# 安装一个软件包,如vim
$ sudo yum install vim
useradd命令用于在Linux系统中创建新的用户账号。创建用户账号时,可以指定一些选项,如用户ID,用户组,登录目录,登录Shell等。创建用户账号后,还需要使用passwd命令为用户设置密码。
useradd命令的语法格式如下:
useradd [选项] 用户名
常用的选项有:
-c
:添加备注文字,通常是用户的全名或者其他描述信息。-d
:指定用户的登录目录,如果不存在则自动创建。-e
:指定用户的有效期限,格式为YYYY-MM-DD。-f
:指定在密码过期后多少天即关闭该账号,0表示立即关闭,-1表示永不关闭。-g
:指定用户所属的基本用户组,可以是用户组名或用户组ID。-G
:指定用户所属的附加用户组,可以是一个或多个用户组名或用户组ID,以逗号分隔。-m
:创建用户的登录目录,如果指定了-d
选项,则以-d
选项为准。-M
:不创建用户的登录目录,即使系统默认值要求创建。-n
:不创建以用户名为名的用户组。-r
:创建系统账号,系统账号的用户ID小于500,且没有登录目录。-s
:指定用户的默认Shell,可以是Shell的绝对路径或名称,如/bin/bash或bash。-u
:指定用户的用户ID,必须是唯一的且大于等于500(除非指定了-r
选项)。useradd命令的示例:
# 创建一个普通用户,用户名为alice,用户组为users,登录目录为/home/alice,登录Shell为/bin/bash
useradd -g users -d /home/alice -s /bin/bash alice
# 创建一个系统用户,用户名为backup,用户ID为999,没有登录目录,登录Shell为/sbin/nologin
useradd -r -u 999 -s /sbin/nologin backup
usermod命令用于修改现有用户的账号信息,如用户ID,用户组,登录目录,登录Shell等。修改用户信息时,需要确保用户没有登录,没有运行任何进程。
usermod命令的语法格式如下:
usermod [选项] 用户名
常用的选项有:
-c
:修改用户的备注文字。-d
:修改用户的登录目录,如果指定了-m
选项,则同时移动用户的旧目录内容到新目录。-e
:修改用户的有效期限,格式为YYYY-MM-DD。-f
:修改在密码过期后多少天即关闭该账号,0表示立即关闭,-1表示永不关闭。-g
:修改用户所属的基本用户组,可以是用户组名或用户组ID。-G
:修改用户所属的附加用户组,可以是一个或多个用户组名或用户组ID,以逗号分隔。如果不带任何用户组,则删除用户的所有附加用户组。-l
:修改用户的用户名,需要确保新用户名不存在。-L
:锁定用户的密码,使密码无效。-m
:移动用户的登录目录,需要与-d
选项一起使用。-o
:允许修改用户的用户ID为一个已经存在的用户ID。-p
:修改用户的密码,需要使用加密后的密码字符串,可以使用openssl命令生成。-s
:修改用户的登录Shell,可以是Shell的绝对路径或名称,如/bin/bash或bash。-u
:修改用户的用户ID,需要确保新用户ID不存在。-U
:解锁用户的密码,使密码恢复有效。usermod命令的示例:
# 修改用户alice的用户名为bob,同时移动其登录目录和邮件目录
usermod -l bob -m -d /home/bob alice
# 修改用户bob的用户ID为888,同时修改其基本用户组为staff
usermod -u 888 -g staff bob
# 修改用户bob的密码为123456(加密后的字符串)
usermod -p $(openssl passwd -1 123456) bob
# 锁定用户bob的密码,不允许登录
usermod -L bob
groupadd命令用于在Linux系统中创建新的用户组。创建用户组时,可以指定一些选项,如用户组ID,用户组密码等。创建用户组后,可以使用useradd或usermod命令将用户添加到用户组中。
groupadd命令的语法格式如下:
groupadd [选项] 用户组名
常用的选项有:
-f
:如果用户组已经存在,则不报错,直接退出。-g
:指定用户组的用户组ID,必须是唯一的且大于等于500。-K
:覆盖配置文件/etc/login.defs中的设置。-o
:允许创建用户组ID不唯一的用户组。-p
:指定用户组的密码,需要使用加密后的密码字符串,可以使用openssl命令生成。-r
:创建系统用户组,系统用户组的用户组ID小于500。groupadd命令的示例:
# 创建一个普通用户组,用户组名为dev,用户组ID为600
groupadd -g 600 dev
# 创建一个系统用户组,用户组名为sys,用户组ID为999
groupadd -r -g 999 sys
# 创建一个用户组,用户组名为admin,用户组密码为123456(加密后的字符串)
groupadd -p $(openssl passwd -1 123456) admin
groupmod命令用于修改现有用户组的属性,如用户组名,用户组ID,用户组密码等。修改用户组信息时,需要确保用户组没有被任何进程使用。
groupmod命令的语法格式如下:
groupmod [选项] 用户组名
常用的选项有:
-g
:修改用户组的用户组ID,需要确保新用户组ID不存在。-n
:修改用户组的用户组名,需要确保新用户组名不存在。-o
:允许修改用户组的用户组ID为一个已经存在的用户组ID。-p
:修改用户组的密码,需要使用加密后的密码字符串,可以使用openssl命令生成。groupmod命令的示例:
# 修改用户组dev的用户组ID为700
groupmod -g 700 dev
# 修改用户组dev的用户组名为develop
groupmod -n develop dev
# 修改用户组develop的密码为654321(加密后的字符串)
groupmod -p $(openssl passwd -1 654321) develop
sudo命令用于以超级用户(root)的身份运行指定的命令,通常需要输入当前用户的密码进行验证。sudo命令可以让普通用户执行一些或者全部的root命令,如halt,reboot,shutdown,init等等。sudo命令的授权信息保存在/etc/sudoers文件中,可以使用visudo命令编辑该文件。
你好,这是必应。我可以帮你写一篇博客介绍sudo命令,它是一个用于以超级用户身份运行命令的Linux命令。请看我的回答:
Linux命令介绍:sudo
Linux系统中,有些命令只能由超级用户(root)执行,如halt,reboot,shutdown,init等。如果普通用户想要执行这些命令,就需要使用sudo命令。sudo命令可以让系统管理员授权一些或全部的root权限给普通用户,从而提高系统的安全性和灵活性。
sudo的基本用法
sudo命令的基本语法格式如下:
sudo [选项] [命令]
其中,命令是要以超级用户身份执行的命令,可以是任何有效的Linux命令。选项是一些可选的参数,用于指定sudo的行为和设置。常用的选项有:
-b
:在后台运行命令,不占用终端。-h
:显示帮助信息。-l
:显示当前用户可以执行的命令列表。-u
:指定要切换的用户,可以是用户名或用户ID。默认是root。-v
:更新当前用户的认证时间戳,延长sudo的有效期。-k
:使当前用户的认证时间戳失效,下次使用sudo时需要重新输入密码。-s
:启动一个Shell,以指定的用户身份运行。默认是root。-i
:启动一个登录Shell,以指定的用户身份运行。默认是root。-p
:指定密码提示符,可以使用一些转义字符,如%u表示用户名,%h表示主机名等。-S
:从标准输入读取密码,而不是从终端。-n
:在没有终端的情况下运行命令,如果需要输入密码,则失败。-H
:设置HOME环境变量为目标用户的家目录。-E
:保留当前用户的环境变量,而不是重置为默认值。-C
:关闭大于或等于指定的文件描述符号。-V
:显示版本信息。下面给出一些sudo命令的使用示例,以说明sudo的功能和用法。
sudo ls /
sudo -u bob whoami
sudo -n apt update
sudo -i
sudo -l
sudo -k