第一章 磁盘和文件管理

1、磁盘管理

1.1 目录结构
[root@xy /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  • 1.
  • 2.
  1. /bin:bin是二进制(binary)的缩写,包含基本命令行程序,这些程序在没有文件系统的情况下也能运行,因此通常存储在引导媒体中。
  2. /boot:包含系统启动时所需的文件,如内核(vmlinuz)和引导加载程序(如GRUB)。
  3. /dev:dev是设备(device)的缩写,包含指向设备节点的文件。这些文件用于访问系统硬件设备。
  4. /etc:包含系统配置文件。
  5. /home:用户的家目录通常位于此,每个用户的默认家目录通常以用户名命名,例如/home/username
  6. /lib:包含系统共享库文件,是/bin和/sbin可执行文件的依赖库。
  7. /media:挂载用于媒体设备的目录,如CD-ROM和USB驱动器。
  8. /mnt:用于临时挂载文件系统的目录。
  9. /opt:第三方应用程序的安装位置,例如Oracle数据库。
  10. /proc:包含有关正在运行的进程和系统的信息。
  11. /root:root用户的家目录。
  12. /sbin:包含系统二进制文件,通常仅由系统管理员使用。
  13. /srv:服务的数据目录,如网络服务的站点。
  14. /sys:包含系统硬件信息的目录,例如设备树。
  15. /tmp:临时文件存储位置。
  16. /usr:包含大量应用程序和文件,例如/usr/bin包含用户程序,/usr/lib包含共享库等。
  17. /var:包含在正常操作中会改变的文件,如日志文件和打印队列。
1.2 pwd

pwd 显示出当前/活动目录的名称

[root@xy /]# pwd
/
[root@xy /]# 
  • 1.
  • 2.
  • 3.
1.3 man、–help
1.3.1 man命令

man 格式化并显示在线帮助手册页

空格翻页

q退出

1.3.2 --help参数

查看一个命令的帮助,一次性列出

[root@xy /]# ls --help
用法:ls [选项]... [文件]...
  • 1.
  • 2.
1.4 ls

ls [选项] [文件或目录]

常用选项:

  • -l 以长列表格式显示信息,包括文件权限、文件大小、拥有者、所属组以及修改时间等信息。
  • -a 显示所有文件,包括隐藏文件(以.开头的文件)。
  • -d 只显示目录本身,而不显示其内容。
  • -R 递归地列出目录及其子目录的内容。
  • -h 人类可读的文件大小,例如 1K、2M、3G 等。
  • -t 按修改时间排序。
  • -r 以反向顺序排序。
  • -S 按文件大小排序。
  • -i 显示文件的 inode 号。
  • -F 在文件名后添加表示文件类型的字符:* 表示可执行文件,/ 表示目录,@ 表示符号链接。
[root@xy tmp]# ll -a /opt
总用量 0
drwxr-xr-x.  3 root root  16 72  12:38 .
dr-xr-xr-x. 17 root root 224 72  2024 ..
drwxr-xr-x.  2 root root   6 1031 2018 rh
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
1.5 cd

cd … 回到上一级

cd ~ 回到主目录

cd / 回到根目录

cd opt 切换当前目录下的opt

[root@xy tmp]# pwd
/tmp
[root@xy tmp]# cd ..
[root@xy /]# pwd
/
[root@xy /]# cd ~
[root@xy ~]# pwd
/root
[root@xy ~]# cd /
[root@xy /]# pwd
/
[root@xy /]# cd opt/
[root@xy opt]# pwd
/opt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

2、文件管理

2.1 mkdir

mkdir [选项] 目录…

  • -m:设置新目录的文件模式(权限),通常表示为数字字符串,如“755”或“644”。
  • -p:如果指定的目录已存在,则此选项可确保不报告任何错误。它还允许根据需要创建父目录。
  • -v:提供详细的输出,解释 mkdir 命令正在做什么。
[root@xy opt]# mkdir -pvm 777 /opt/test /opt/test/test1
mkdir: 已创建目录 "/opt/test"
mkdir: 已创建目录 "/opt/test/test1"
[root@xy opt]# ll
总用量 0
drwxr-xr-x. 2 root root  6 1031 2018 rh
drwxrwxrwx. 3 root root 19 72 14:10 test
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
2.2 touch

touch [选项] 文件…

常用选项:

  • -a: 仅更新访问时间。
  • -m: 仅更新修改时间。
  • -c: 如果文件已存在,则不创建新文件。
  • -t: 设置文件时间戳为指定的时间戳。
[root@xy opt]# touch test.txt test2.java
[root@xy opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rw-r--r--. 1 root root 0 72 14:15 test2.java
-rw-r--r--. 1 root root 0 72 14:15 test.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
2.3 rm

rm [选项] 文件或目录…

常用选项:

  • -f: 强制删除,不提示确认。
  • -i: 交互式模式,在删除每个文件之前提示确认。
  • -r: 递归删除,删除目录及其所有子目录和文件。
  • -v: 详细模式,显示正在删除的文件或目录。
[root@xy opt]# mkdir -p /opt/test/test1
[root@xy opt]# touch /opt/test/test1/test.txt
[root@xy opt]# touch test2.txt
[root@xy opt]# mkdir -p /opt/test2
[root@xy opt]# 
[root@xy opt]# rm -rfv test
已删除"test/test1/test.txt"
已删除目录:"test/test1"
已删除目录:"test"
[root@xy opt]#
[root@xy opt]# rm -fv test2.txt 
已删除"test2.txt"
[root@xy opt]# 
[root@xy opt]# mkdir -p /opt/test2
[root@xy opt]# rm -rvi test2
rm:是否删除目录 "test2"?yes
已删除目录:"test2"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
2.4 cp

cp [选项] [源文件或目录] [目标文件或目录]

常用选项:

  • -r-R:递归复制目录及其所有子目录。
  • -f:强制覆盖现有文件。
  • -i:在覆盖现有文件之前询问用户确认。
  • -v:显示复制过程的详细信息。
  • -p:保留源文件的权限、时间戳和所有者信息。
  • -l:创建硬链接而不是复制文件。
  • -s:创建符号链接而不是复制文件。
root@localhost:/opt# mkdir -p a/b/c
root@localhost:/opt# cp -rv a test
'a' -> 'test'
'a/b' -> 'test/b'
'a/b/c' -> 'test/b/c'
root@localhost:/opt#
root@localhost:/opt# touch a/b/c/test.txt
root@localhost:/opt# cp -rv a test2
'a' -> 'test2'
'a/b' -> 'test2/b'
'a/b/c' -> 'test2/b/c'
'a/b/c/test.txt' -> 'test2/b/c/test.txt'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
2.5 mv

mv [选项] [源文件或目录] [目标文件或目录]

常用选项:

  • -f--force:强制覆盖现有文件或目录,无需询问用户确认。
  • -i--interactive:在覆盖现有文件或目录之前询问用户确认。
  • -v--verbose:显示移动或重命名过程的详细信息。
  • -b--backup:在覆盖现有文件或目录之前创建备份。
  • -S--suffix:指定备份文件的扩展名。
  • -u--update:仅当源文件比目标文件更新时才执行移动操作。

常见操作:

  • 移动单个文件:mv file1.txt directory1
  • 移动多个文件:mv file1.txt file2.txt directory1
  • 移动目录:mv directory1 directory2
  • 重命名文件:mv file1.txt file2.txt
  • 重命名目录:mv directory1 directory2
  • 强制覆盖现有文件:mv -f source_file destination_file
2.6 find

find [路径] [选项] [表达式]

常用选项:

  • -name: 根据文件名进行匹配。例如 find /home/user/ -name "test.txt" 会查找 /home/user/ 目录下名为 test.txt 的文件。

  • -iname:-name 相似,但忽略大小写。例如 find /home/user/ -iname "test.txt" 会找到名为 test.txtTest.txt 以及 TEST.txt 等文件。

  • -type:

    根据文件类型进行匹配。常用的文件类型包括:

    • f: 普通文件
    • d: 目录
    • l: 符号链接
    • c: 字符设备文件
    • b: 块设备文件
  • -size: 根据文件大小进行匹配。例如 find /home/user/ -size +10M 会找到大于 10 MB 的文件。可以使用 k 表示 KB,M 表示 MB,G 表示 GB。

  • -exec: 在匹配到文件后执行指定的命令。例如 find /home/user/ -name "*.txt" -exec ls -l {} \; 会列出所有以 .txt 结尾的文件的详细信息。{} 表示匹配到的文件,\; 结束 -exec 命令。

表达式:

  • !: 取反操作。例如 find /home/user/ -type f ! -name "*.txt" 会找到所有不是 .txt 文件的普通文件。
  • -o: 或操作。例如 find /home/user/ -name "*.txt" -o -name "*.html" 会找到所有 .txt 或者 .html 文件。
  • -a: 与操作。例如 find /home/user/ -type f -a -size +10M 会找到所有大小大于 10 MB 的普通文件。
2.7whereis 、 which
2.7.1 whereis
  • 功能: 查找命令、源代码文件和手册页的路径。
  • 原理: 通过搜索系统预先定义的数据库(通常在 /usr/share/misc/ 目录下)来查找目标。
  • 优点: 速度快,因为直接从数据库中读取信息。
  • 缺点: 数据库可能不是最新,可能无法找到最新安装的命令或文件。
2.7.2 which
  • 功能: 查找命令的完整路径。
  • 原理: 遍历 PATH 环境变量中的每个目录,寻找与命令名称匹配的可执行文件。
  • 优点: 可以找到最近安装的命令,因为会遍历 PATH 环境变量。
  • 缺点:whereis 速度慢,因为它需要遍历文件系统。
root@localhost:/opt# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
root@localhost:/opt# which ls
/usr/bin/ls
  • 1.
  • 2.
  • 3.
  • 4.

3、链接

ln [选项] 源文件 目标文件

常用选项:

  • -s--symbolic:创建软链接。
  • -f--force:强制覆盖目标文件。
  • -i--interactive:在覆盖目标文件之前提示用户确认。
  • -n--no-dereference:不解析软链接。
  • -b--backup:创建备份文件。
  • -v--verbose:显示详细的信息。

ln 命令是 Linux 中用于创建文件或目录链接的命令。它可以用来创建两种类型的链接:硬链接和软链接

硬链接

  • 硬链接是原始文件的一个副本,它拥有与原始文件相同的inode号。
  • 硬链接不能跨越文件系统。
  • 删除原始文件不会影响硬链接,反之亦然。
  • 无法创建目录的硬链接。

软链接

  • 软链接是一个指向原始文件的指针,它存储了原始文件的路径。
  • 软链接可以跨越文件系统。
  • 删除原始文件会使软链接失效
  • 可以创建指向目录的软链接。

软连接案例

root@localhost:/opt# mkdir -p a/b/c
root@localhost:/opt# echo 'hello world' > a/b/c/hello.txt
root@localhost:/opt# ln -s a/b/c/hello.txt hello-ln.txt
root@localhost:/opt# cat a/b/c/hello.txt
hello world
root@localhost:/opt# echo 'hello world222' > hello-ln.txt
root@localhost:/opt# cat a/b/c/hello.txt
hello world222
root@localhost:/opt# ll -i
a/            hello-ln.txt
root@localhost:/opt# ll -i
total 12
32769 drwxr-xr-x  3 root root 4096 Jul  3 17:13 ./
    2 drwxr-xr-x 20 root root 4096 Jul  3 14:34 ../
 2372 drwxr-xr-x  3 root root 4096 Jul  3 17:13 a/
36074 lrwxrwxrwx  1 root root   15 Jul  3 17:13 hello-ln.txt -> a/b/c/hello.txt
root@localhost:/opt# ll -i a/b/c/
total 12
36072 drwxr-xr-x 2 root root 4096 Jul  3 17:13 ./
36071 drwxr-xr-x 3 root root 4096 Jul  3 17:13 ../
36073 -rw-r--r-- 1 root root   15 Jul  3 17:13 hello.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

硬链接案例

root@localhost:/opt# ln a/b/c/hello.txt hello-ln2.txt
root@localhost:/opt# ll -i
total 16
32769 drwxr-xr-x  3 root root 4096 Jul  3 17:16 ./
    2 drwxr-xr-x 20 root root 4096 Jul  3 14:34 ../
 2372 drwxr-xr-x  3 root root 4096 Jul  3 17:13 a/
36074 lrwxrwxrwx  1 root root   15 Jul  3 17:13 hello-ln.txt -> a/b/c/hello.txt
36073 -rw-r--r--  2 root root   15 Jul  3 17:13 hello-ln2.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

4、压缩与解压

tar [选项] [档案文件] [文件或目录…]

常用选项:

选项描述
-c创建档案文件
-x提取档案文件
-t列出档案文件内容(c、x、t参数只能出现一个)
-f指定档案文件名,后面不能跟参数
-z使用 gzip 压缩 (扩展名通常为:.tar.gz,特点:速度最快)
-j使用 bzip2 压缩 (扩展名通常为: .tar.gz,特点:体积最小)
-v详细模式,显示操作进度
-C解压缩具体目录
root@localhost:/opt# touch t1.txt t2.txt
root@localhost:/opt# mkdir -p a/b/c
root@localhost:/opt# ls
a  t1.txt  t2.txt
root@localhost:/opt# tar -zcf test.tar.gz t1.txt t2.txt a/
root@localhost:/opt#
root@localhost:/opt# tar -tvf test.tar.gz
-rw-r--r-- root/root         0 2024-07-03 17:59 t1.txt
-rw-r--r-- root/root         0 2024-07-03 17:59 t2.txt
drwxr-xr-x root/root         0 2024-07-03 17:59 a/
drwxr-xr-x root/root         0 2024-07-03 17:59 a/b/
drwxr-xr-x root/root         0 2024-07-03 17:59 a/b/c/
root@localhost:/opt#
root@localhost:/opt# mkdir test
root@localhost:/opt# tar -zxf test.tar.gz -C test/
root@localhost:/opt# ls test/
a  t1.txt  t2.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

5、文件编辑

基本操作:

  • 进入编辑模式:
    • i:插入模式,在光标所在位置插入文本。
    • a:追加模式,在光标所在位置后插入文本。
    • o:在当前行下方插入新行。
    • O:在当前行上方插入新行。
  • 退出编辑模式:
    • ESC:退出编辑模式,回到命令模式。
  • 保存文件:
    • :w:保存当前文件。
    • :wq:保存并退出 Vi。
    • :x:保存并退出 Vi,但只有当文件被修改过时才会保存。
  • 退出 Vi:
    • :q:退出 Vi,如果文件被修改过,则会提示保存。
    • :q!:强制退出 Vi,不保存修改。

移动光标:

  • 基本移动:
    • h:左移。
    • j:下移。
    • k:上移。
    • l:右移。
  • 单词移动:
    • w:下一个单词的开头。
    • b:上一个单词的开头。
    • e:下一个单词的结尾。
    • B:上一个单词的结尾。
  • 行首行尾:
    • 0:移至行首。
    • ^:移至行首第一个非空白字符。
    • $:移至行尾。
  • 页面移动:
    • Ctrl+f:向下翻页。
    • Ctrl+b:向上翻页。
    • H:移至屏幕顶端。
    • M:移至屏幕中间。
    • L:移至屏幕底部。

删除和修改:

  • 删除字符:
    • x:删除光标所在字符。
    • X:删除光标前一个字符。
    • dw:删除光标所在单词。
    • db:删除光标前一个单词。
    • dd:删除当前行。
  • 粘贴:
    • p:粘贴剪切板内容。
    • P:在当前行上方粘贴剪切板内容。
  • 替换:
    • r:用下一个输入的字符替换光标所在字符。
    • R:进入替换模式,用后续输入的字符替换从光标所在位置开始的所有字符。
    • cw:替换光标所在单词。
    • c$:替换从光标所在位置到行尾的所有字符。

其他常用指令:

  • 复制行: yy

  • 跳转行号: num + gg (默认gg行首) GG(反向跳转行尾)

  • 撤销操作: u

  • 查找文本: /pattern (正向查找),?pattern (反向查找)

  • 替换文本: :%s/pattern/replacement/g (全局替换)

  • 显示行号: :set number

  • 隐藏行号: :set nonumber

第二章 系统命令

1、系统当前时间

date

root@localhost:~# date
Thu Jul  4 12:09:31 CST 2024
  • 1.
  • 2.

2、切换用户

su 用户名

sudo 命令: 使用超级管理员身份执行命令

root@localhost:~# su xieyang
xieyang@localhost:/root$ ls -al
ls: cannot open directory '.': Permission denied
xieyang@localhost:/root$ sudo ls -l
total 8
drwxr-xr-x 2 root root 4096 Jul  3 13:57 IdeaProjects
drwx------ 3 root root 4096 Jul  2 17:56 snap
xieyang@localhost:/root$ su root
Password:
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

3、 echo

echo [选项] [字符串]

选项:

  • -n: 抑制输出结尾的换行符。 2
  • -e: 启用转义序列的解释,例如 \n(换行)、\t(制表符)、\a(响铃)等。

1. 打印文本

root@localhost:~# echo "hello world!"
hello world!
  • 1.
  • 2.

2. 打印变量

root@localhost:~# name="tom"
root@localhost:~# echo $name
tom
  • 1.
  • 2.
  • 3.

3. 使用 -e 选项来解释转义字符

root@localhost:/opt# echo -e "hello world\n你好 世界"
hello world
你好 世界
  • 1.
  • 2.
  • 3.

4. 使用 -n 选项来抑制换行符

root@localhost:/opt# echo -n "Hello, world!"
Hello, world!root@localhost:/opt#
  • 1.
  • 2.

5. 测试命令

root@localhost:/opt# ls
hello.txt  test  test.txt  test2.txt
root@localhost:/opt# echo rm -rfv t*
rm -rfv test test.txt test2.txt
  • 1.
  • 2.
  • 3.
  • 4.

6. 格式化输出

root@localhost:/opt# echo -e "\033[32mThis is green text.\033[0m"
This is green text.
  • 1.
  • 2.

4、sort

sort [选项] [文件]

常用选项:

  • -r--reverse:反向排序。
  • -n--numeric-sort:按数字顺序排序。
  • -k--key=KEYDEF:指定排序键,多个排序键用逗号分隔。
  • -t--field-separator=SEP:指定字段分隔符。
  • -u--unique:只输出唯一行。
  • -f--ignore-case:忽略大小写。
  • -b--ignore-leading-blanks:忽略行首空白字符。
  • -M--month-sort:按月份顺序排序。
  • -d--dictionary-order:按字典顺序排序。
root@localhost:/opt# cat num.txt
tom
smith
100
22
root@localhost:/opt# sort num.txt
100
22
smith
tom
root@localhost:/opt# sort -n num.txt
smith
tom
22
100
root@localhost:/opt# sort -nr num.txt
100
22
tom
smith
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

5、diff

root@localhost:/opt# echo -e 'hello world\n你好 世界' > test1.txt
root@localhost:/opt# echo -e 'hello world\n你好 世界2' > test2.txt
root@localhost:/opt# diff test1.txt test2.txt
2c2
< 你好 世界
---
> 你好 世界2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

6、重定向

6.1 输出重定向

command > output_file

  • command:要执行的命令。
  • >:重定向符号。
  • output_file:目标文件,用于保存命令的输出结果。
  1. ls -l 命令的输出结果保存到 file.txt 文件中:

    root@localhost:/opt# ls -l > file.txt
    
    • 1.
  2. date 命令的输出结果追加到 file.txt 文件末尾:

    root@localhost:/opt# date >> file.txt
    root@localhost:/opt# cat file.txt
    total 12
    -rw-r--r-- 1 root root  0 Jul  4 13:15 file.txt
    -rw-r--r-- 1 root root 44 Jul  4 13:09 hello3.txt
    -rw-r--r-- 1 root root 26 Jul  4 13:03 test1.txt
    -rw-r--r-- 1 root root 27 Jul  4 13:03 test2.txt
    Thu Jul  4 13:15:37 CST 2024
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.

其他重定向符号:

  • >>:追加重定向,将输出内容追加到目标文件末尾。
  • 2>:错误重定向,将错误信息重定向到目标文件。
  • &>:同时重定向标准输出和错误输出。
6.2 输入重定向

command < input_file

  • command:要执行的命令。
  • <:输入重定向符号。(可省略)
  • input_file:包含输入数据的源文件。
root@localhost:~# cat num.txt
5
2
1
root@localhost:~# sort -n num.txt
1
2
5
root@localhost:~# sort -n < num.txt
1
2
5
root@localhost:~# sort -n <<flag
> 2
> 3
> 1
> flag
1
2
3
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

7、grep

grep [选项] [文件]

常用选项:

  • -E: 使用扩展正则表达式。
  • -i: 忽略大小写。
  • -n: 显示行号。
  • -v: 反向匹配。
  • -c: 统计匹配行的数量。
  • -l: 仅显示包含匹配行的文件名。
  • -h: 不显示文件名。
  • -r: 递归搜索目录。
  • -A:显示匹配行的后n行。
  • -B:显示匹配行的前n行。
  • -C: 显示匹配行的上下文n行。
root@localhost:/opt# cat title.txt
1女生退租遭辱骂致死案二审维持原判热
2老板娘一天卖出200斤知了日入过万热
3一见中塔情
4品牌螺蛳粉疑用福寿螺?官方通报
5男子在合肥一购物中心坠楼身亡
6男生复读一年高考成绩涨380分
7官方回应环卫工降薪停工致垃圾遍地
8渝北水木天地三人被杀系谣言
9神十八乘组圆满完成第二次出舱活动
1000后视障主播用声音温暖他人
11特斯拉进入江苏省政府用车采购目录热
12台艺人被批用大陆用语
13美国警察拦下“UFO”
14大韩航空空姐行李箱内发现实弹
15徒步旅行女主播公路边直播时被车撞
root@localhost:/opt#
root@localhost:/opt# grep '0' title.txt
2老板娘一天卖出200斤知了日入过万热
6男生复读一年高考成绩涨380分
1000后视障主播用声音温暖他人
root@localhost:/opt# grep '0' title.txt -n
3:2老板娘一天卖出200斤知了日入过万热
7:6男生复读一年高考成绩涨380分
11:1000后视障主播用声音温暖他人
root@localhost:/opt# grep '0' title.txt -c
3
root@localhost:/opt# grep '0' . -r
./file.txt:-rw-r--r-- 1 root root  0 Jul  4 13:15 file.txt
./file.txt:-rw-r--r-- 1 root root 44 Jul  4 13:09 hello3.txt
./file.txt:-rw-r--r-- 1 root root 26 Jul  4 13:03 test1.txt
./file.txt:-rw-r--r-- 1 root root 27 Jul  4 13:03 test2.txt
./file.txt:Thu Jul  4 13:15:37 CST 2024
./title.txt:2老板娘一天卖出200斤知了日入过万热
./title.txt:6男生复读一年高考成绩涨380分
./title.txt:1000后视障主播用声音温暖他人
root@localhost:/opt#
root@localhost:/opt# grep '0' . -rl
./file.txt
./title.txt
root@localhost:/opt# grep '000' title.txt -A 3
1000后视障主播用声音温暖他人
11特斯拉进入江苏省政府用车采购目录热
12台艺人被批用大陆用语
13美国警察拦下“UFO”
root@localhost:/opt# grep '000' title.txt -C 3
7官方回应环卫工降薪停工致垃圾遍地
8渝北水木天地三人被杀系谣言
9神十八乘组圆满完成第二次出舱活动
1000后视障主播用声音温暖他人
11特斯拉进入江苏省政府用车采购目录热
12台艺人被批用大陆用语
13美国警察拦下“UFO”
root@localhost:/opt# grep '11|13' title.txt -E
11特斯拉进入江苏省政府用车采购目录热
13美国警察拦下“UFO”
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.

8、管道

管道符号: |

基本用法:

command1 | command2

  • command1: 第一个命令,它的输出将作为 command2 的输入。
  • command2: 第二个命令,接收 command1 的输出作为输入。
root@localhost:/opt# ls -a
.  ..  file.txt  hello3.txt  test1.txt  test2.txt  title.txt
root@localhost:/opt# ls -a | grep 't.{1,5}\.txt' -E
test1.txt
test2.txt
title.txt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

9、ps

ps [选项]

常用选项:

  • -a:显示所有进程,包括与终端无关的进程。
  • -e:等同于 -a,显示所有进程。
  • -f:显示进程的完整信息,包括命令行参数。
  • -u:显示进程的所有者信息。
  • -x:显示所有进程,包括没有控制终端的进程。
  • -aux:显示所有进程的详细状态信息,包括用户、CPU 使用率、内存占用等。
  • -p PID:指定要查看的进程 ID。
  • -C 程序名:指定要查看的程序名。
  • -l:显示进程的较长信息,包含更详细的进程属性。
  • -j: 以 JSON 格式显示进程信息,便于自动化脚本解析。
  • -U 用户名: 显示特定用户的进程信息。
  • -G 组名: 显示特定组的进程信息。

示例:

  • 查看当前终端的进程: ps
  • 查看所有进程完整信息: ps -ef
  • 查看所有进程的详细信息: ps -aux
  • 查看名为 ‘bash’ 进程的详细信息: ps -aux | grep bash
  • 查看名为 ‘apache2’ 进程的详细信息: ps -C apache2

10、sleep

sleep [number][unit]

  • number: 指定休眠的时长。

  • unit
    可选的单位,可以是以下几种:
    • s: 秒 (默认)
    • m: 分钟
    • h: 小时
    • d: 天
date
sleep 3
date
  • 1.
  • 2.
  • 3.
root@localhost:/opt# date
sleep 3
date
Thu Jul  4 14:56:20 CST 2024
Thu Jul  4 14:56:23 CST 2024
root@localhost:/opt#
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

11、kill

kill 命令的基本语法:

kill [选项] 进程ID

选项:

  • -s 信号编号: 指定要发送的信号。如果省略,默认发送 SIGTERM 信号。
  • -SIG信号名称: 指定要发送的信号,使用信号名称。
  • -9: 强制终止进程,相当于 SIGKILL 信号。
  • -15: 优雅地终止进程,相当于 SIGTERM 信号。

进程ID: 目标进程的 ID 号。可以使用 ps 命令查看进程 ID。

示例:

  • 使用进程 ID 终止进程: kill 1234
  • 发送 SIGKILL 信号强制终止进程: kill -9 1234
  • 发送 SIGTERM 信号优雅地终止进程: kill -15 1234
  • 使用信号名称终止进程: kill -SIGTERM 1234

常用信号:

  • SIGTERM (15): 终止进程,允许进程进行清理工作。
  • SIGKILL (9): 立即终止进程,不进行清理工作。
  • SIGINT (2): 中断进程,通常由 Ctrl+C 键触发。
  • SIGQUIT (3): 退出进程,通常由 Ctrl+\ 键触发。
root@localhost:~# sleep 1d&
[1] 44492
root@localhost:~# ps -ef | grep 'sleep'
root       44492   39023  0 15:07 pts/3    00:00:00 sleep 1d
root       44565   39023  0 15:08 pts/3    00:00:00 grep --color=auto sleep
root@localhost:~# kill -15 44492
root@localhost:~# ps -ef | grep 'sleep'
root       44615   39023  0 15:08 pts/3    00:00:00 grep --color=auto sleep
[1]+  Terminated              sleep 1d
root@localhost:~# ps -ef | grep 'sleep'
root       44636   39023  0 15:08 pts/3    00:00:00 grep --color=auto sleep
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

使用 & 符号可以将命令放到后台运行。这表示命令不会阻塞终端,你可以在终端继续输入其他命令。

其他用法:

  • kill -l: 列出所有可用信号。
  • kill -0 进程ID: 检查进程是否存在。

注意:

  • 使用 kill -9 强制终止进程会导致数据丢失,建议谨慎使用。
  • 使用 kill 命令需要拥有相应的权限,通常需要 root 权限。

12、top

top - 16:48:08 up  4:43,  1 user,  load average: 0.02, 0.02, 0.00
Tasks:  43 total,   1 running,  42 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15602.3 total,  14403.7 free,    624.4 used,    574.3 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  14713.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  165888  11028   7992 S   0.3   0.1   1:16.58 systemd
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

概要信息 包含以下几行:

  1. 系统时间信息: 显示当前时间、系统启动时间、系统运行时间、登录用户数量和系统负载。
  2. 任务信息: 显示系统中进程的总数量,以及处于不同状态的进程数量,包括运行中的进程、睡眠中的进程、停止的进程和僵尸进程。
  3. CPU 使用情况: 显示 CPU 的不同使用状态,包括用户进程使用时间、系统进程使用时间、nice 值进程使用时间、空闲时间、等待 I/O 时间、硬件中断时间、软件中断时间和虚拟化时间。
  4. 内存使用情况: 显示物理内存的使用情况,包括总内存、空闲内存、已使用内存和缓存/缓冲区内存。
  5. 交换空间使用情况: 显示交换空间的使用情况,包括总交换空间、空闲交换空间、已使用交换空间和可用交换空间。

进程列表 显示系统中正在运行的所有进程,并包含以下信息:

  1. 进程 ID(PID): 每个进程的唯一标识符。

  2. 用户(USER): 拥有该进程的用户。

  3. 优先级(PR): 进程的优先级,数字越小优先级越高。

  4. nice 值(NI): 进程的 nice 值,用于调整进程的优先级。

  5. 虚拟内存(VIRT): 进程使用的虚拟内存大小。

  6. 驻留内存(RES): 进程实际占用的物理内存大小。

  7. 共享内存(SHR): 进程使用的共享内存大小。

  8. 状态(S):

    进程当前所处的状态,包括:

    • R:运行状态
    • S:睡眠状态
    • T:停止状态
    • Z:僵尸状态
  9. CPU 使用率(%CPU): 进程占用的 CPU 时间比例。

  10. 内存使用率(%MEM): 进程占用的内存比例。

  11. 运行时间(TIME+): 进程运行的总时间。

  12. 命令(COMMAND): 进程的命令名称或命令行。

13、free

free 命令通常与 -h 选项一起使用,以使输出结果更易读

root@localhost:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       635Mi        14Gi       3.0Mi       575Mi        14Gi
Swap:          4.0Gi          0B       4.0Gi
  • 1.
  • 2.
  • 3.
  • 4.

free 命令的输出包含以下几列信息:

  • total: 系统总内存大小。
  • used: 目前被进程使用的内存量。
  • free: 未被使用的空闲内存量。
  • shared: 多个进程共享的内存量。
  • buff/cache: 内核用于缓冲区、页面缓存和slab分配的内存量。
  • available: 可用于启动新应用程序的估计内存量,不包括交换空间。

14、uptime

root@localhost:~# uptime
 17:00:00 up  4:55,  1 user,  load average: 0.01, 0.02, 0.00
  • 1.
  • 2.

uptime 命令是一个简单的但非常有用的 Linux 命令,它提供了关于系统运行时间、当前登录用户数量和系统负载平均值的信息。

15、df

df [选项]

df 命令用于显示文件系统磁盘使用情况,它会显示每个文件系统的总大小、已使用空间、剩余空间、使用百分比以及挂载点。

  • -h: 以易于阅读的单位(例如,KB、MB、GB)显示磁盘空间。

  • -a: 显示所有文件系统,包括未挂载的文件系统。

  • -k: 以 KB 为单位显示磁盘空间。

  • -m: 以 MB 为单位显示磁盘空间。

  • -T: 显示文件系统的类型。

16、du

du [选项] 目录名

du 命令用于显示目录和文件占用的磁盘空间,它会递归地遍历指定目录并计算每个文件或目录占用的空间大小。

  • -a: 显示每个文件的磁盘使用量,而不是每个目录的总计。
  • -h: 以易于阅读的单位(例如,KB、MB、GB)显示磁盘空间。
  • -s: 只显示总计,不显示每个文件的磁盘使用量。
  • -c: 显示所有文件或目录的总计。
  • -d: 指定递归深度,例如 -d 1 表示只递归一层。
  • --apparent-size: 显示文件的实际大小,而不考虑块大小。

17、 重启

reboot

18、关机

shutdown -h now

poweroff

shutdown -h nowpoweroff 都是用于关机的 Linux 命令,它们的区别如下

  1. shutdown -h now命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统,通常会在关机前向所有用户发送通知消息。
  2. poweroff 命令相较于 shutdowmn -h now更为强制,它会立即关闭系统电源,不会等待正在运行的进程结束,它可能会丢失尚未保存的数据。

19 ifconfig

root@localhost:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.89.141  netmask 255.255.240.0  broadcast 172.20.95.255
        inet6 fe80::215:5dff:fec1:b4f9  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:c1:b4:f9  txqueuelen 1000  (Ethernet)
        RX packets 22  bytes 2432 (2.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29  bytes 2426 (2.4 KB)
        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 38  bytes 4805 (4.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 4805 (4.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

20、 ping

ping [选项] 目标地址

常用选项:

  • -c count:指定发送的 ICMP 数据包数量。
  • -i interval:指定发送 ICMP 数据包的时间间隔,单位为秒。
  • -s packetsize:指定发送的 ICMP 数据包的大小,单位为字节。
  • -t:持续发送 ICMP 数据包,直到手动停止。
  • -W timeout:指定等待目标主机响应的超时时间,单位为秒。
root@localhost:~# ping -c 3 -i 2 -s 1024 www.baidu.com
PING www.baidu.com (183.2.172.185) 1024(1052) bytes of data.
1032 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=52 time=27.9 ms
1032 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=52 time=28.2 ms
1032 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=52 time=28.5 ms

--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 27.941/28.242/28.537/0.243 ms
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

21、curl

 curl 命令详解_大鱼的技术博客_51CTO博客

22、wget

wget [选项]… [URL]…

  • -O: 指定下载文件的名称。
  • -P: 指定下载文件的保存目录。
  • -c: 从断点处继续下载。
  • -b: 在后台运行。
  • -q: 静默模式,不显示进度信息。
root@localhost:~# wget -O /opt/test.index https://www.example.com/index.html
--2024-07-04 17:45:42--  https://www.example.com/index.html
Resolving www.example.com (www.example.com)... 93.184.215.14, 2606:2800:21f:cb07:6820:80da:af6b:8b2c
Connecting to www.example.com (www.example.com)|93.184.215.14|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: ‘/opt/test.index’

/opt/test.index       100%[========================>]   1.23K  --.-KB/s    in 0s

2024-07-04 17:45:43 (144 MB/s) - ‘/opt/test.index’ saved [1256/1256]

root@localhost:~# ls /opt/
test.index
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

23 、netstat

netstat [选项]

常用选项:

  • -a:显示所有活动 TCP 连接和正在监听的 TCP 和 UDP 端口。
  • -b:显示创建每个连接或监听端口的应用程序。
  • -e:显示以太网统计信息,例如发送和接收的字节数和数据包数量。
  • -n:显示活动 TCP 连接,但地址和端口号以数字形式表示,不会尝试确定名称。
  • -o:显示活动 TCP 连接并包含每个连接的进程 ID (PID)。
  • -p <Protocol>:显示指定协议的连接。
  • -s:按协议显示统计信息。
  • -r:显示 IP 路由表的内容。

以下是一些 netstat 命令的示例:

  • netstat -a:显示所有活动 TCP 连接和正在监听的 TCP 和 UDP 端口。
  • netstat -b:显示创建每个连接或监听端口的应用程序。
  • netstat -e:显示以太网统计信息,例如发送和接收的字节数和数据包数量。
  • netstat -n:显示活动 TCP 连接,但地址和端口号以数字形式表示,不会尝试确定名称。
  • netstat -o:显示活动 TCP 连接并包含每个连接的进程 ID (PID)。
  • netstat -p tcp:显示 TCP 协议的连接。
  • netstat -s:按协议显示统计信息。
  • netstat -r:显示 IP 路由表的内容。
  • netstat -o 5:每隔 5 秒显示活动 TCP 连接和进程 ID。

第三章 文件内容查看

1、 cat

cat [选项] [文件…]

常用选项:

  • -A: 显示所有字符,包括不可打印字符和换行符。
  • -b: 对非空行进行编号。
  • -e: 显示不可打印字符,并在行尾显示 $ 符号。
  • -E: 在每行末尾显示 $ 符号。
  • -n: 对所有行进行编号,包括空行。
  • -s: 将多个空行压缩为一行。
  • -t: 将制表符显示为 ^I。
root@localhost:/opt# cat hello.txt
tom
jack    test
lily
smith


hello world
root@localhost:/opt# cat hello.txt -Ans
     1  tom $
     2  jack^Itest$
     3  lily$
     4  smith$
     5  $
     6  hello world$
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

2、more

more [选项] 文件名

常用选项:

  • -<number> 每个屏幕显示行数 。
  • +<number> 从行号开始显示文件。
  • +/<pattern> 从匹配位置前良好开始显示内容。
  • -p 清除原内容的方式进行翻页。
  • -s将多个空行压缩为一行。

常用操作:

  • 下一行:回车键
  • 下一页:空格键
  • 上一页:b
  • 显示行号:=
  • 显示文件名和行号::f
  • 退出:q
  • 在文件中搜索字符串:/
root@localhost:/opt# ps -e | more -5 -p
  PID TTY          TIME CMD
    1 ?        00:00:58 systemd
    2 ?        00:00:00 init-systemd(Ub
    7 ?        00:00:00 init
   42 ?        00:00:00 systemd-journal
5 # 按下 = 显示行号
   62 ?        00:00:00 systemd-udevd
   75 ?        00:00:00 snapfuse
   76 ?        00:00:00 snapfuse
   82 ?        00:00:00 snapfuse
   87 ?        00:00:00 snapfuse
/agetty # 搜索
...skipping
  261 ?        00:00:00 agetty
  274 tty1     00:00:00 agetty
  281 ?        00:00:00 sshd
  303 ?        00:00:08 python3.10
  341 ?        00:00:00 SessionLeader
[Not a file] line 28 # :f 显示文件和行号
  342 ?        00:00:00 Relay(343)
  343 pts/0    00:00:00 bash
  344 pts/1    00:00:00 login
  382 ?        00:00:00 systemd
  383 ?        00:00:00 (sd-pam)
  392 pts/1    00:00:00 bash
  407 ?        00:00:39 python3
 5013 ?        00:00:00 SessionLeader
 5014 ?        00:00:00 Relay(5015)
 5015 pts/2    00:00:00 sh # 按q退出
root@localhost:/opt#
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

3、less

less [选项] [文件…]

less 命令是一个 Linux 命令行工具,它可以逐页显示文件内容或命令输出。它类似于 more 命令,但功能更强大。

less 命令的主要优点包括:

  • 逐页显示文件内容: less 命令可以逐页显示文件内容,方便查看大型文件。
  • **支持向前和向后滚动:**与 more 命令只能向前滚动不同,less 命令可以向前和向后滚动,方便查看文件中的特定内容。
  • 支持搜索: less 命令支持在文件中搜索特定字符串,方便查找特定内容。
  • 支持标记: less 命令支持标记文件中的特定位置,方便快速返回。
  • 支持实时监控: less 命令可以实时监控文件内容的改变,方便查看文件内容的实时更新。
3.1 less基础用法

常用选项:

  • -g突出显示使用搜索找到的最后一个字符串。默认情况下,less 突出显示所有与最后搜索命令匹配的字符串。
  • -i在搜索期间忽略大小写敏感性。
  • -N在每行的开头显示行号。
  • -p[pattern]指示 less 从输入文件中的指定模式的第一次出现开始。
  • -s将连续的空行合并成单个空行。

常用操作:

  • 上下箭头、Enter、e、j 向下滚动一行。
  • 上箭头、y、k 向上滚动一行。
  • 空格键、Page Down 向下滚动一页。
  • Page Up、b 向上滚动一页。
  • Home、g 跳转到文件开头。
  • End、G 跳转到文件末尾。
  • /[string] 向前搜索指定的字符串。
  • ?[string] 向后搜索指定的字符串。
  • n 搜索下一个匹配项。
  • N 搜索上一个匹配项。
  • =显示行详情
  • v 使用vim编辑器进行编辑
  • q 退出 。
3.2 less命令标记

m键标记(set mark)

'键可回到标记点(goto mark)

3.3 less命令实时监控

less +F [其他选项] [文件…]

ctrl +c终止监控,按F,再次进入监控模式

3.4 less命令查看多文件

less [选项] [文件…]

:n 下一个文件

:p上一个文件

4、head

head [选项] [文件…]

常用选项:

  • -n 数字: 显示文件的头 数字 行。
  • -c 数字: 显示文件的头 数字 字节。
  • -q--quiet: 不显示文件名。
root@localhost:/opt# head -c 3 hello.txt
第root@localhost:/opt# head -qn 3 hello.txt hello2.txt
第1行 测试
第2行 测试
第3行 测试
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 17:31 ?        00:01:20 /sbin/init
root         2     1  0 17:31 ?        00:00:00 /init
root@localhost:/opt#
root@localhost:/opt# head -n 3 hello.txt hello2.txt
==> hello.txt <==
第1行 测试
第2行 测试
第3行 测试


==> hello2.txt <==
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 17:31 ?        00:01:20 /sbin/init
root         2     1  0 17:31 ?        00:00:00 /init
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

5、tail

tail [选项] [文件…]

常用选项:

  • -n 数字: 显示文件的最后 数字 行。
  • -c 数字: 显示文件的最后 数字 字节。
  • -f: 跟踪文件并持续显示新增内容。
  • -q: 不显示文件名。
root@localhost:/opt# tail -n 3 hello.txt hello2.txt
==> hello.txt <==
第255行 测试
第256行 测试


==> hello2.txt <==
root     70311 70309  0 22:23 pts/4    00:00:00 -bash
root     70570 70311  0 22:24 pts/4    00:00:00 ps -ef
hello world
root@localhost:/opt# tail -qn 3 hello.txt hello2.txt
第255行 测试
第256行 测试

root     70311 70309  0 22:23 pts/4    00:00:00 -bash
root     70570 70311  0 22:24 pts/4    00:00:00 ps -ef
hello world
root@localhost:/opt# tail -qfn 3 hello.txt hello2.txt
第255行 测试
第256行 测试

root     70311 70309  0 22:23 pts/4    00:00:00 -bash
root     70570 70311  0 22:24 pts/4    00:00:00 ps -ef
hello world
hello tail
hello2 tail

root@localhost:/opt# tail -fn 3 hello.txt hello2.txt
==> hello.txt <==
第256行 测试

hello tail

==> hello2.txt <==
root     70570 70311  0 22:24 pts/4    00:00:00 ps -ef
hello world
hello2 tail

==> hello.txt <==
hello tail2

==> hello2.txt <==
hello2 tail2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

第四章 Linux用户管理

1、用户组的管理

使用root账户查看当前系统用户组

cat /etc/group

查看用户所在组

groups [用户名…]

root@localhost:/opt# groups root xieyang
root : root docker
xieyang : xieyang adm dialout cdrom floppy sudo audio dip video plugdev netdev docker
  • 1.
  • 2.
  • 3.
1.1 用户组的添加

groupadd [选项] 组名

常用选项:

  • -g GID:指定用户组的组 ID(GID)。
  • -r:创建系统组。
  • -f:如果组已经存在,则强制命令成功退出。
  • -K:覆盖 /etc/login.defs 文件中的默认值。
  • -p:使用 crypt(3) 加密密码。
  • -o:允许添加一个具有非唯一 GID 的组。
root@localhost:/opt# groupadd -g 1024 test
root@localhost:/opt# cat /etc/group | grep 'test'
test:x:1024:
  • 1.
  • 2.
  • 3.
1.2 用户组的修改

groupmod [选项] 组名

常用选项:

  • -g GID:将组的组 ID(GID)更改为指定的 GID。
  • -n 新组名:将组的名称更改为指定的 新组名
  • -p 密码:设置组的密码。密码将使用 crypt(3) 加密。
  • -o:在使用 -g 选项更改 GID 时,允许将 GID 更改为非唯一值。
  • -a:在使用 -U 选项添加用户时,将用户追加到现有成员列表,而不是替换列表。
  • -U 用户列表:将用户列表添加到组中。
  • -R 根目录:在指定的 根目录 中应用更改。
  • -P 前缀目录:在指定的 前缀目录 中应用更改。
root@localhost:/opt# groupmod -g 2048 test
root@localhost:/opt# tail -n 1 /etc/group
test:x:2048:
root@localhost:/opt# groupmod -n test2 test
root@localhost:/opt# tail -n 1 /etc/group
test2:x:2048:
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
1.3 用户组的删除

groupdel [选项] 组名

常用选项:

  • -f:如果组存在,则强制命令成功退出。
root@localhost:/opt# groupdel -f test2
root@localhost:/opt# cat /etc/group | grep 'test2'
  • 1.
  • 2.

2、用户的管理

2.1 添加用户

useradd [选项] 用户名

以下是一些常用的 useradd 命令选项:

  • -m: 创建用户主目录。默认情况下,用户主目录位于 /home/用户名

  • -u UID:指定用户的用户 ID(UID)。

  • -g GID:指定用户的初始组 ID(GID)。

  • -G 组列表:指定用户所属的附加组。

  • -d 主目录:指定用户的家目录。

  • -s Shell:用户的登录 Shell。

  • -c 注释:用户的注释信息。

  • -p 密码:设置用户密码。密码将使用 crypt(3) 加密。

  • -r:创建系统用户。

root@localhost:/opt# useradd -p 123456 -g xieyang -G root -d /home/test -m test
root@localhost:/opt# groups test
test : xieyang root
  • 1.
  • 2.
  • 3.

注意:

  • 未指定用户组默认和用户名一致
  • 未指定用户组目录默认/home/{用户名}
  • -p 密码123456是密文,明文需要解密。
2.2 设置密码

passwd [选项] [用户名]

使用方法

以下是一些使用 passwd 命令的示例:

  1. 修改当前用户的密码:

    passwd
    
    • 1.

    系统会提示您输入当前密码和新密码。

  2. 修改其他用户的密码:

    sudo passwd 用户名
    
    • 1.
  3. 强制用户立即更改密码:

    sudo passwd -f 用户名
    
    • 1.

    下次用户登录系统时,系统会提示用户输入新的密码。

2.4 修改用户

usermod [选项] 用户名

常用选项:

  • -l 新用户名:修改用户的用户名。
  • -u 新 UID:修改用户的用户 ID(UID)。
  • -g 新 GID:修改用户的初始组 ID(GID)。
  • -G 组列表:修改用户所属的附加组。
  • -d 新主目录:修改用户的主目录。
  • -s 新登录 Shell:修改用户的登录 Shell。
  • -c 新注释:修改用户的注释信息。
  • -L:锁定用户账户。
  • -U:解锁用户账户。
  • -p 新密码:设置用户的密码。密码将使用 crypt(3) 加密。
root@localhost:~# usermod -l test2 test
root@localhost:~# groups test2
test2 : test
  • 1.
  • 2.
  • 3.
2.4 删除用户

userdel [选项] 用户名

以下是一些常用的 userdel 命令选项:

  • -r:删除用户的主目录。
  • -f:如果用户已登录,则强制删除用户。
  • -R:删除用户的主目录及其所有内容,即使主目录不为空。
root@localhost:/# userdel -Rf test
  • 1.

3、为用户组添加目录权限

chgrp [选项] [组名] [文件或目录]
  • 1.

常用选项:

  • -R--recursive:递归地对文件和目录进行操作。
  • -H:如果命令行参数是目录的符号链接,则遍历它。与 -R 选项一起使用。
  • -L:在递归遍历中,遍历遇到的目录的每个符号链接。与 -R 选项一起使用。
root@localhost:/opt# mkdir java
root@localhost:/opt# ll
total 12
drwxr-xr-x  3 root root 4096 Jul  5 18:45 ./
drwxr-xr-x 20 root root 4096 Jul  5 18:27 ../
drwxr-xr-x  2 root root 4096 Jul  5 18:45 java/
root@localhost:/opt# chmod 775 java/
root@localhost:/opt# ll
total 12
drwxr-xr-x  3 root root 4096 Jul  5 18:45 ./
drwxr-xr-x 20 root root 4096 Jul  5 18:27 ../
drwxrwxr-x  2 root root 4096 Jul  5 18:45 java/
root@localhost:/opt# chgrp -R test java/
root@localhost:/opt# ll
total 12
drwxr-xr-x  3 root root 4096 Jul  5 18:45 ./
drwxr-xr-x 20 root root 4096 Jul  5 18:27 ../
drwxrwxr-x  2 root test 4096 Jul  5 18:45 java/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

第六章 文件权限

1、文件权限查看

root@localhost:/opt# ll
total 12
drwxr-xr-x  3 root root 4096 Jul  5 18:45 ./
drwxr-xr-x 20 root root 4096 Jul  5 19:03 ../
drwxrwxr-x  2 root test 4096 Jul  5 19:05 java/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

文件类型:

  • d 表示这是一个 目录 (directory),而不是普通文件。在 Linux 中,目录是用来存放文件的地方,它本身也是一种特殊的"文件"。
  • -: 表示普通文件,例如文本文件、图片文件、视频文件等等。
  • b : 表示块设备文件,通常用于存储设备,例如硬盘、U 盘、光盘等等。
  • c : 表示字符设备文件,通常用于串行设备,例如键盘、鼠标、串口等等。
  • p : 表示命名管道文件,用于进程间通信。
  • l : 表示符号链接文件,它指向另一个文件或目录。
  • s : 表示套接字文件,用于网络通信。

权限 (rwx):

  • 权限信息由三个部分组成,分别表示 拥有者同组用户其他人 对目录的权限。
  • rwx: 代表目录的 拥有者 拥有 读 (read)、写 (write) 和 执行 (execute) 权限。

特殊权限 (.):

  • . 表示 没有设置特殊的权限,例如 setuid 或 sticky bit。
  • setuid (set user ID) 允许文件以拥有者的身份运行,即使执行文件的人不是拥有者。
  • sticky bit 允许只有拥有者可以删除目录下的文件,其他用户只能删除自己创建的文件。

2、ugo 和 421

在 Linux 系统中,chmod 命令使用两种方式来设置文件权限:

  • 符号模式 (Symbolic Mode): 使用 ugo+ - = rwx 等符号来表示权限设置。
  • 八进制模式 (Octal Mode): 使用三位数字来表示权限,其中每个数字代表一个权限类别(用户、组、其他)。
2.1 UGO的含义

ugo 代表了 Linux 权限控制的三个主要类别:

  • u (user): 文件所有者。
  • g (group): 文件所属组。
  • o (other): 其他所有用户。
2.2 421 的含义

421 代表了八进制模式中的权限设置,对应于以下含义:

  • 4: 读取权限
  • 2: 写入权限
  • 1: 执行权限

因此,421 的含义是:

  • 4: 文件所有者拥有读取权限。
  • 2: 文件所有者拥有写入权限。
  • 1: 文件所有者拥有执行权限。
2.3 UGO和 421 的关系

ugo421 是两种不同的表示方式,它们可以互相转换:

  • 使用 ugo 符号模式可以表达 421 中的权限设置。例如,chmod u+rwx file 等同于 chmod 700 file
  • 使用 421 八进制模式可以表达 ugo 中的权限设置。例如,chmod 777 file 等同于 chmod ugo+rwx file

3、chmod

chmod [选项] [模式] [文件或目录]
  • 1.

常用选项:

  • -R--recursive:递归地对文件和目录进行操作。

模式:

模式可以是以下两种形式之一:

符号模式:

  • u:用户(文件所有者)
  • g:组(文件所属组)
  • o:其他用户
  • a:所有用户(u、g 和 o)
  • +:添加权限
  • -:删除权限
  • =:设置精确权限
  • r:读取权限
  • w:写入权限
  • x:执行权限

示例:

  • chmod u+x file1: 为文件所有者添加执行权限
  • chmod g-w file2: 从文件所属组中删除写入权限
  • chmod o=rx file3: 为其他用户设置读取和执行权限

八进制模式:

  • 使用三位数字表示每个用户(用户、组、其他)的权限:
    • 第一位:读取权限(4)
    • 第二位:写入权限(2)
    • 第三位:执行权限(1)
  • 使用三位数字组合表示权限,例如:
    • 7 = 4+2+1 = 读、写、执行
    • 6 = 4+2 = 读、写
    • 5 = 4+1 = 读、执行
    • 0 = 0 = 没有权限

示例:

  • chmod 777 file1: 为所有用户设置读、写、执行权限
  • chmod 644 file2: 为用户和组设置读写权限,其他用户设置只读权限
  • chmod 000 file3: 为所有用户取消所有权限

4、chown

chown [选项] [所有者][:所属组] [文件或目录]

常用选项:

  • -R--recursive:递归地对文件和目录进行操作。

所有者:

  • 可以是用户名或用户 ID。
  • 如果省略,则保持当前所有者不变。

所属组:

  • 可以是组名或组 ID。
  • 如果省略,则保持当前所属组不变。
  • 所有者和所属组之间用冒号 : 分隔。

文件或目录:

  • 是要更改所有权的目标文件或目录名。

chown 命令的示例:

  • 将文件 file1 的所有者更改为 user1
chown user1 file1
  • 1.
  • 将目录 mydir 的所有者更改为 user2,并将其所属组更改为 group1
chown user2:group1 mydir
  • 1.
  • 递归地将目录 mydir 及其所有子目录和文件的拥有者更改为 user1,并将其所属组更改为 group1
chown -R user1:group1 mydir
  • 1.

第七章 软件安装

1、yum

  • 主要用于 Red Hat 系 Linux 发行版,如 CentOS、RHEL、Fedora
  • 基于 RPM (Red Hat Package Manager) 格式。

基本用法:

sudo yum [操作] [参数] [软件包名称]

常用操作:

  • install: 安装软件包
  • update: 更新所有已安装软件包到最新版本
  • upgrade: 更新所有软件包到最新版本(包括未安装的软件包)
  • remove: 删除软件包
  • erase: 删除软件包及所有配置文件
  • search: 搜索软件包
  • list: 列出所有已安装软件包
  • info: 显示软件包详细信息
  • clean: 清理缓存

常用参数:

  • -y: 自动确认,不需要用户输入确认信息
  • -q: 静默模式,不显示任何信息

示例:

  • 安装 Firefox:sudo yum install firefox
  • 更新所有软件包:sudo yum update
  • 删除 Firefox:sudo yum remove firefox
  • 搜索 Firefox:sudo yum search firefox
  • 显示 Firefox 详细信息:sudo yum info firefox

2、apt

  • 主要用于 Debian 系 Linux 发行版,如 Debian、Ubuntu、Mint
  • 基于 deb (Debian Package) 格式。

基本用法:

sudo apt [操作] [参数] [软件包名称]

常用操作:

  • install: 安装软件包
  • update: 更新软件源
  • upgrade: 更新所有已安装软件包到最新版本
  • remove: 删除软件包
  • purge: 删除软件包及所有配置文件
  • search: 搜索软件包
  • list: 列出所有软件包
  • show: 显示软件包详细信息
  • autoremove: 删除不再需要的依赖包

常用参数:

  • -y: 自动确认,不需要用户输入确认信息
  • -q: 静默模式,不显示任何信息

示例:

  • 安装 Firefox:sudo apt install firefox
  • 更新软件源:sudo apt update
  • 更新所有软件包:sudo apt upgrade
  • 删除 Firefox:sudo apt remove firefox
  • 搜索 Firefox:sudo apt search firefox
  • 显示 Firefox 详细信息:sudo apt show firefox

3、安装jdk

基于Ubuntu系统安装多版本JDK

# 查询需要安装的jdk版本
sudo apt list | grep  'openjdk-8|openjdk-11|openjdk-17' -E

# 安装jdk8、jdk11、jdk17
sudo apt install -y openjdk-8-jdk
sudo apt install -y openjdk-11-jdk
sudo apt install -y openjdk-17-jdk

# 查看java、javac版本
java -version
javac -version

# 修改java默认版本
sudo update-alternatives --config java
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

第八章 Shell编程

1、Shell 的作用

  • 命令解释器: Shell 负责解释用户输入的命令,并将其转换为内核可以理解的指令。
  • 脚本语言: Shell 也是一种脚本语言,允许用户编写一系列命令,并将其保存为脚本文件,以便重复执行。
  • 环境管理: Shell 提供了用户环境管理功能,例如设置环境变量、管理用户权限等。
  • 程序控制: Shell 提供了各种控制结构,例如循环、分支等,可以让用户编写更复杂的脚本。
  • 系统交互: Shell 可以与其他程序进行交互,例如调用系统命令、读取文件内容、输出结果等。

2、常用的 Shell 类型

  • bash: 最常用的 Shell,也是大多数 Linux 发行版的默认 Shell。它功能强大、配置灵活,并提供丰富的扩展功能。
  • zsh: 一个功能更强大的 Shell,它提供更丰富的命令自动补全、主题定制等功能。
  • sh: 一种简单的 Shell,通常用作其他 Shell 的基础。
  • ksh: Korn Shell,功能强大,提供对编程语言的支持。
  • csh: C Shell,语法类似于 C 语言,适用于熟悉 C 语言的用户。

3、shell的基础语法

3.1 注释

单行注释

# 这是一行注释
echo "hello world" # 打印hello world
  • 1.
  • 2.

多行注释 : + 空格 + ''

: '
打印hello world
语法 echo "hello world"
'
echo "hello world"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

eg.

root@localhost:/opt# echo  '#!/bin/bash' > test.sh
root@localhost:/opt#
root@localhost:/opt# echo -e "
# 这是一行注释
: '
打印hello world
语法 echo \"hello world\"
'
echo \"hello world\"" >> test.sh
root@localhost:/opt#
root@localhost:/opt# chmod 744 test.sh
root@localhost:/opt# ./test.sh
hello world
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
3.2 变量

变量类型

Shell 变量主要分为三种类型:

  • 本地变量: 在当前 Shell 环境中定义的变量,只能在当前 Shell 中使用,子 Shell 无法访问。
  • 环境变量: 在系统级别定义的变量,可以被所有子 Shell 继承,并且可以传递给子进程。
  • 特殊变量: 由 Shell 预先定义的一些变量,用于存储系统信息或 Shell 状态。

变量命名规则

  • 只能包含字母、数字和下划线,并且必须以字母或下划线开头。
  • 区分大小写。
  • 不能使用 Shell 的保留字(如 ifelsefor 等)。

变量赋值

使用 = 号将值赋给变量。

name="张三"
age=25
  • 1.
  • 2.

引用变量

使用 $ 符号引用变量的值。

echo "我的名字是 $name,我今年 $age 岁。" 
  • 1.

变量类型声明

  • 本地变量: 默认情况下,所有变量都是本地变量。
  • 环境变量: 使用 export 命令将本地变量声明为环境变量。
# 写入环境变量
export PATH=$PATH:/usr/local/bin

# 打印所有环境变量
env
printenv
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

特殊变量

  • $0: 当前脚本的文件名。
  • $1$2$9: 脚本的第一个、第二个…第九个参数。
  • $*: 所有参数,以空格分隔。
  • $@: 所有参数,每个参数用双引号括起来。
  • $?: 上一个命令的退出状态码。
  • $$: 当前 Shell 的进程 ID。
  • $#: 参数的个数。

变量操作

  • 读取变量: 使用 echo 命令显示变量的值。
  • 修改变量: 重新赋值即可修改变量的值。
  • 删除变量: 使用 unset 命令删除变量。

变量的作用域

  • 本地变量: 只在当前 Shell 中有效。
  • 环境变量: 在所有子 Shell 中有效,并可以传递给子进程。

变量扩展

  • 命令替换: 使用 $(command) 或 `` (反引号) 将命令的输出结果赋给变量。
  • 算术扩展: 使用 $((expression)) 进行算术运算。
  • 字符串扩展: 使用 "${variable#pattern}""${variable%pattern}" 等进行字符串操作。
#!/bin/bash

# 定义本地变量
name="李四"
age=30

# 定义环境变量
export HOME="/home/user"

# 使用特殊变量
echo "当前脚本文件名:$0"
echo "参数个数:$#"

# 读取变量
echo "我的名字是 $name,我今年 $age 岁。"
echo "我的主目录是 $HOME"

# 修改变量
age=31
echo "我今年 $age 岁。"

# 删除变量
unset name

# 命令替换
date_str=$(date +%Y-%m-%d)
echo "今天是 $date_str"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
3.3 控制语句
3.3.1 if
  • if:判断语句的开始。

  • elif:前面的条件都不成立,判断条件。

  • [ ]: 条件判断表达式。可以使用各种比较运算符。

  • then:如果条件成立,执行该代码块。

  • else:如果条件不成立,执行该代码块。(可选)

  • fi:if 语句结束标志。

  • 比较运算符:

    • -eq:等于
    • -ne:不等于
    • -gt:大于
    • -lt:小于
    • -ge:大于等于
    • -le:小于等于
    #!/bin/bash
    if [ $1 -lt 18 ]; then
       echo "$1 小于 18 岁,未成年"
    elif [ $1 -ge 18 ]; then
       echo "$1 大于 18 岁,已成年"
    fi
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
  • 字符串比较:

    • ==:字符串相等
    • !=:字符串不相等
    • -z:字符串为空
    • -n:字符串不为空
    if [ "$name" == "张三" ]; then
      echo "你好,张三!"
    fi
    
    • 1.
    • 2.
    • 3.
  • 文件测试:

    • -f:文件存在且为普通文件
    • -d:文件存在且为目录
    • -r:文件存在且可读
    • -w:文件存在且可写
    • -x:文件存在且可执行
    if [ -f /etc/passwd ]; then
      echo "/etc/passwd 文件存在"
    fi
    
    • 1.
    • 2.
    • 3.
  • 逻辑运算符:

    • -a:逻辑与(and)
    • -o:逻辑或(or)
    • !:逻辑非(not)
    if [ "$age" -gt 18 -a "$gender" == "男" ]; then
      echo "你是成年男性"
    fi
    
    • 1.
    • 2.
    • 3.
3.3.2 for
  • for:循环语句的开始。
  • i in {1..5}: 循环变量和循环范围。 {1..5} 代表从 1 到 5 的整数序列。
  • do:循环体开始。
  • done:循环体结束。
#!/bin/bash

for i in {1..5}; do
  echo "循环次数:$i"
done 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
3.3.3 while
  • while:循环语句的开始。
  • [ $count -lt 5 ]: 循环条件。
  • do:循环体开始。
  • done:循环体结束。
#!/bin/bash
count=0
while [ $count -lt 5 ]; do
  echo "循环次数:$count"
  count=$((count + 1))
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
3.3.4 break、continue
  • break:跳出当前循环。
  • continue:跳过当前循环的剩余语句,继续执行下一次循环。
#!/bin/bash
# 打印99乘法表
for i in {1..9}; do
    for j in {1..9}; do
        if [ $j -le $i ]; then
                echo -ne "$j*$i=$((j*i))\t"
        else
            break
        fi
    done
    echo
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
3.4、函数

在 Linux Shell 脚本中,函数是将一段代码封装成可重复使用的模块,类似于其他编程语言中的函数或方法。使用函数可以:

  • 提高代码重用性: 将常用的代码块封装成函数,可以在脚本中多次调用,避免重复编写。
  • 增强代码可读性: 将脚本逻辑划分成多个函数,使脚本结构更加清晰,易于理解和维护。
  • 简化脚本逻辑: 将复杂的操作封装成函数,可以简化主脚本的代码,提高脚本的可维护性。

1. 函数定义

使用 function 关键字或直接使用函数名定义函数,函数体用花括号 {} 包含。

bash# 使用 function 关键字定义函数
function func_name {
  # 函数体代码
}

# 直接使用函数名定义函数
func_name() {
  # 函数体代码
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
#!/bin/bash
# 定义函数
print_echo() {
   echo -ne "$1*$2=$(($1*$2))\t"
}
# 打印99乘法表
for i in {1..9}; do
    for j in {1..9}; do
        if [ $j -le $i ]; then
                print_echo $j $i
        else
            break
        fi
    done
    echo
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
#!/bin/bash

# 定义一个函数,计算两个数的和
function add {
  sum=$(( $1 + $2 ))
  echo "两个数的和为:$sum"
}

# 定义一个函数,判断一个数是否为偶数
function is_even {
  if [ $(( $1 % 2 )) -eq 0 ]; then
    echo "$1 是偶数"
  else
    echo "$1 不是偶数"
  fi
}

# 主脚本代码
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2

add $num1 $num2

read -p "请输入一个数字: " num
is_even $num
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
3.5 crontab定时任务

管理 crontab

  • 编辑 crontab:

    crontab -e
    
    • 1.
  • 查看 crontab:

    crontab -l
    
    • 1.
  • 删除 crontab:

    crontab -r
    
    • 1.
  • 切换编辑器:

     select-editor
    
    • 1.

crontab 格式定义

* * * * * command
  • 1.

其中,每个星号代表一个时间字段:

  • 分钟 (0-59)
  • 小时 (0-23)
  • 日期 (1-31)
  • 月份 (1-12)
  • 星期 (0-6,0 代表周日)

每个字段可以使用以下字符:

  • 星号 (*):代表所有可能的值。
  • 逗号 (,): 分隔多个值。 例如:0,30 表示 0 分和 30 分。
  • 减号 (-):表示一个范围。 例如:1-5 表示 1 到 5 的所有值。
  • 斜杠 (/): 表示步长。 例如:*/5 表示每 5 分钟执行一次。

常用 crontab 示例

  • 每天凌晨 2:00 执行备份脚本:

    0 2 * * * /path/to/backup_script.sh
    
    • 1.
  • 每周日凌晨 4:00 清理系统日志:

    0 4 * * 0 /path/to/cleanup_logs.sh
    
    • 1.
  • 每小时的 15 分钟执行系统更新:

    15 * * * * /usr/bin/apt-get update
    
    • 1.