第一章 磁盘和文件管理
1、磁盘管理
1.1 目录结构
/bin
:bin是二进制(binary)的缩写,包含基本命令行程序,这些程序在没有文件系统的情况下也能运行,因此通常存储在引导媒体中。/boot
:包含系统启动时所需的文件,如内核(vmlinuz)和引导加载程序(如GRUB)。/dev
:dev是设备(device)的缩写,包含指向设备节点的文件。这些文件用于访问系统硬件设备。/etc
:包含系统配置文件。/home
:用户的家目录通常位于此,每个用户的默认家目录通常以用户名命名,例如/home/username
。/lib
:包含系统共享库文件,是/bin和/sbin可执行文件的依赖库。/media
:挂载用于媒体设备的目录,如CD-ROM和USB驱动器。/mnt
:用于临时挂载文件系统的目录。/opt
:第三方应用程序的安装位置,例如Oracle数据库。/proc
:包含有关正在运行的进程和系统的信息。/root
:root用户的家目录。/sbin
:包含系统二进制文件,通常仅由系统管理员使用。/srv
:服务的数据目录,如网络服务的站点。/sys
:包含系统硬件信息的目录,例如设备树。/tmp
:临时文件存储位置。/usr
:包含大量应用程序和文件,例如/usr/bin包含用户程序,/usr/lib包含共享库等。/var
:包含在正常操作中会改变的文件,如日志文件和打印队列。
1.2 pwd
pwd 显示出当前/活动目录的名称
1.3 man、–help
1.3.1 man命令
man 格式化并显示在线帮助手册页
空格翻页
q退出
1.3.2 --help参数
查看一个命令的帮助,一次性列出
1.4 ls
ls [选项] [文件或目录]
常用选项:
-l
: 以长列表格式显示信息,包括文件权限、文件大小、拥有者、所属组以及修改时间等信息。-a
: 显示所有文件,包括隐藏文件(以.
开头的文件)。-d
: 只显示目录本身,而不显示其内容。-R
: 递归地列出目录及其子目录的内容。-h
: 人类可读的文件大小,例如 1K、2M、3G 等。-t
: 按修改时间排序。-r
: 以反向顺序排序。-S
: 按文件大小排序。-i
: 显示文件的 inode 号。-F
: 在文件名后添加表示文件类型的字符:*
表示可执行文件,/
表示目录,@
表示符号链接。
1.5 cd
cd … 回到上一级
cd ~ 回到主目录
cd / 回到根目录
cd opt 切换当前目录下的opt
2、文件管理
2.1 mkdir
mkdir [选项] 目录…
-m
:设置新目录的文件模式(权限),通常表示为数字字符串,如“755”或“644”。-p
:如果指定的目录已存在,则此选项可确保不报告任何错误。它还允许根据需要创建父目录。-v
:提供详细的输出,解释 mkdir 命令正在做什么。
2.2 touch
touch [选项] 文件…
常用选项:
-a
: 仅更新访问时间。-m
: 仅更新修改时间。-c
: 如果文件已存在,则不创建新文件。-t
: 设置文件时间戳为指定的时间戳。
2.3 rm
rm [选项] 文件或目录…
常用选项:
-f
: 强制删除,不提示确认。-i
: 交互式模式,在删除每个文件之前提示确认。-r
: 递归删除,删除目录及其所有子目录和文件。-v
: 详细模式,显示正在删除的文件或目录。
2.4 cp
cp [选项] [源文件或目录] [目标文件或目录]
常用选项:
-r
或-R
:递归复制目录及其所有子目录。-f
:强制覆盖现有文件。-i
:在覆盖现有文件之前询问用户确认。-v
:显示复制过程的详细信息。-p
:保留源文件的权限、时间戳和所有者信息。-l
:创建硬链接而不是复制文件。-s
:创建符号链接而不是复制文件。
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.txt
、Test.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
速度慢,因为它需要遍历文件系统。
3、链接
ln [选项] 源文件 目标文件
常用选项:
-s
或--symbolic
:创建软链接。-f
或--force
:强制覆盖目标文件。-i
或--interactive
:在覆盖目标文件之前提示用户确认。-n
或--no-dereference
:不解析软链接。-b
或--backup
:创建备份文件。-v
或--verbose
:显示详细的信息。
ln
命令是 Linux 中用于创建文件或目录链接的命令。它可以用来创建两种类型的链接:硬链接和软链接
。
硬链接
- 硬链接是原始文件的一个副本,它拥有与原始文件相同的
inode
号。 - 硬链接不能跨越文件系统。
删除原始文件不会影响硬链接
,反之亦然。- 无法创建目录的硬链接。
软链接
- 软链接是一个指向原始文件的指针,它存储了原始文件的路径。
- 软链接可以跨越文件系统。
删除原始文件会使软链接失效
。- 可以创建指向目录的软链接。
软连接案例
硬链接案例
4、压缩与解压
tar [选项] [档案文件] [文件或目录…]
常用选项:
选项 | 描述 |
---|---|
-c | 创建档案文件 |
-x | 提取档案文件 |
-t | 列出档案文件内容(c、x、t参数只能出现一个 ) |
-f | 指定档案文件名,后面不能跟参数 |
-z | 使用 gzip 压缩 (扩展名通常为:.tar.gz ,特点:速度最快 ) |
-j | 使用 bzip2 压缩 (扩展名通常为: .tar.gz ,特点:体积最小 ) |
-v | 详细模式,显示操作进度 |
-C | 解压缩具体目录 |
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
2、切换用户
su 用户名
sudo 命令
: 使用超级管理员身份执行命令
3、 echo
echo [选项] [字符串]
选项:
- -n: 抑制输出结尾的换行符。 2
- -e: 启用转义序列的解释,例如
\n
(换行)、\t
(制表符)、\a
(响铃)等。
1. 打印文本
2. 打印变量
3. 使用 -e
选项来解释转义字符
4. 使用 -n
选项来抑制换行符
5. 测试命令
6. 格式化输出
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
:按字典顺序排序。
5、diff
6、重定向
6.1 输出重定向
command > output_file
command
:要执行的命令。>
:重定向符号。output_file
:目标文件,用于保存命令的输出结果。
-
将
ls -l
命令的输出结果保存到file.txt
文件中: -
将
date
命令的输出结果追加到file.txt
文件末尾:
其他重定向符号:
>>
:追加重定向,将输出内容追加到目标文件末尾。2>
:错误重定向,将错误信息重定向到目标文件。&>
:同时重定向标准输出和错误输出。
6.2 输入重定向
command < input_file
command
:要执行的命令。<
:输入重定向符号。(可省略)input_file
:包含输入数据的源文件。
7、grep
grep [选项] [文件]
常用选项:
-E
: 使用扩展正则表达式。-i
: 忽略大小写。-n
: 显示行号。-v
: 反向匹配。-c
: 统计匹配行的数量。-l
: 仅显示包含匹配行的文件名。-h
: 不显示文件名。-r
: 递归搜索目录。-A
:显示匹配行的后n行。-B
:显示匹配行的前n行。-C
: 显示匹配行的上下文n行。
8、管道
管道符号:
|
基本用法:
command1 | command2
command1
: 第一个命令,它的输出将作为command2
的输入。command2
: 第二个命令,接收command1
的输出作为输入。
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
: 天
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+\
键触发。
使用 &
符号可以将命令放到后台运行。这表示命令不会阻塞终端,你可以在终端继续输入其他命令。
其他用法:
kill -l
: 列出所有可用信号。kill -0 进程ID
: 检查进程是否存在。
注意:
- 使用
kill -9
强制终止进程会导致数据丢失,建议谨慎使用。 - 使用
kill
命令需要拥有相应的权限,通常需要 root 权限。
12、top
概要信息 包含以下几行:
- 系统时间信息: 显示当前时间、系统启动时间、系统运行时间、登录用户数量和系统负载。
- 任务信息: 显示系统中进程的总数量,以及处于不同状态的进程数量,包括运行中的进程、睡眠中的进程、停止的进程和僵尸进程。
- CPU 使用情况: 显示 CPU 的不同使用状态,包括用户进程使用时间、系统进程使用时间、nice 值进程使用时间、空闲时间、等待 I/O 时间、硬件中断时间、软件中断时间和虚拟化时间。
- 内存使用情况: 显示物理内存的使用情况,包括总内存、空闲内存、已使用内存和缓存/缓冲区内存。
- 交换空间使用情况: 显示交换空间的使用情况,包括总交换空间、空闲交换空间、已使用交换空间和可用交换空间。
进程列表 显示系统中正在运行的所有进程,并包含以下信息:
-
进程 ID(PID): 每个进程的唯一标识符。
-
用户(USER): 拥有该进程的用户。
-
优先级(PR): 进程的优先级,数字越小优先级越高。
-
nice 值(NI): 进程的 nice 值,用于调整进程的优先级。
-
虚拟内存(VIRT): 进程使用的虚拟内存大小。
-
驻留内存(RES): 进程实际占用的物理内存大小。
-
共享内存(SHR): 进程使用的共享内存大小。
-
状态(S):
进程当前所处的状态,包括:
- R:运行状态
- S:睡眠状态
- T:停止状态
- Z:僵尸状态
-
CPU 使用率(%CPU): 进程占用的 CPU 时间比例。
-
内存使用率(%MEM): 进程占用的内存比例。
-
运行时间(TIME+): 进程运行的总时间。
-
命令(COMMAND): 进程的命令名称或命令行。
13、free
free
命令通常与 -h
选项一起使用,以使输出结果更易读
free
命令的输出包含以下几列信息:
- total: 系统总内存大小。
- used: 目前被进程使用的内存量。
- free: 未被使用的空闲内存量。
- shared: 多个进程共享的内存量。
- buff/cache: 内核用于缓冲区、页面缓存和slab分配的内存量。
- available: 可用于启动新应用程序的估计内存量,不包括交换空间。
14、uptime
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 now
和poweroff
都是用于关机的 Linux 命令,它们的区别如下
shutdown -h now
命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统,通常会在关机前向所有用户发送通知消息。poweroff
命令相较于shutdowmn -h now
更为强制,它会立即关闭系统电源,不会等待正在运行的进程结束,它可能会丢失尚未保存的数据。
19 ifconfig
20、 ping
ping [选项] 目标地址
常用选项:
-c count
:指定发送的 ICMP 数据包数量。-i interval
:指定发送 ICMP 数据包的时间间隔,单位为秒。-s packetsize
:指定发送的 ICMP 数据包的大小,单位为字节。-t
:持续发送 ICMP 数据包,直到手动停止。-W timeout
:指定等待目标主机响应的超时时间,单位为秒。
21、curl
22、wget
wget [选项]… [URL]…
-O
: 指定下载文件的名称。-P
: 指定下载文件的保存目录。-c
: 从断点处继续下载。-b
: 在后台运行。-q
: 静默模式,不显示进度信息。
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。
2、more
more [选项] 文件名
常用选项:
-<number>
每个屏幕显示行数 。+<number>
从行号开始显示文件。+/<pattern>
从匹配位置前良好开始显示内容。-p
清除原内容的方式进行翻页。-s
将多个空行压缩为一行。
常用操作:
- 下一行:
回车键
- 下一页:
空格键
- 上一页:
b
- 显示行号:
=
- 显示文件名和行号:
:f
- 退出:
q
- 在文件中搜索字符串:
/
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
: 不显示文件名。
5、tail
tail [选项] [文件…]
常用选项:
- -n 数字: 显示文件的最后
数字
行。 - -c 数字: 显示文件的最后
数字
字节。 - -f: 跟踪文件并持续显示新增内容。
- -q: 不显示文件名。
第四章 Linux用户管理
1、用户组的管理
使用root账户查看当前系统用户组
cat /etc/group
查看用户所在组
groups [用户名…]
1.1 用户组的添加
groupadd [选项] 组名
常用选项:
-g GID
:指定用户组的组 ID(GID)。-r
:创建系统组。-f
:如果组已经存在,则强制命令成功退出。-K
:覆盖/etc/login.defs
文件中的默认值。-p
:使用crypt(3)
加密密码。-o
:允许添加一个具有非唯一 GID 的组。
1.2 用户组的修改
groupmod [选项] 组名
常用选项:
-g GID
:将组的组 ID(GID)更改为指定的 GID。-n 新组名
:将组的名称更改为指定的新组名
。-p 密码
:设置组的密码。密码将使用crypt(3)
加密。-o
:在使用-g
选项更改 GID 时,允许将 GID 更改为非唯一值。-a
:在使用-U
选项添加用户时,将用户追加到现有成员列表,而不是替换列表。-U 用户列表
:将用户列表添加到组中。-R 根目录
:在指定的根目录
中应用更改。-P 前缀目录
:在指定的前缀目录
中应用更改。
1.3 用户组的删除
groupdel [选项] 组名
常用选项:
-f
:如果组存在,则强制命令成功退出。
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
:创建系统用户。
注意:
- 未指定用户组
默认和用户名一致
。 - 未指定用户组目录
默认/home/{用户名}
。 -p
密码123456是密文,明文需要解密。
2.2 设置密码
passwd [选项] [用户名]
使用方法
以下是一些使用 passwd
命令的示例:
-
修改当前用户的密码:
系统会提示您输入当前密码和新密码。
-
修改其他用户的密码:
-
强制用户立即更改密码:
下次用户登录系统时,系统会提示用户输入新的密码。
2.4 修改用户
usermod [选项] 用户名
常用选项:
-l 新用户名
:修改用户的用户名。-u 新 UID
:修改用户的用户 ID(UID)。-g 新 GID
:修改用户的初始组 ID(GID)。-G 组列表
:修改用户所属的附加组。-d 新主目录
:修改用户的主目录。-s 新登录 Shell
:修改用户的登录 Shell。-c 新注释
:修改用户的注释信息。-L
:锁定用户账户。-U
:解锁用户账户。-p 新密码
:设置用户的密码。密码将使用crypt(3)
加密。
2.4 删除用户
userdel [选项] 用户名
以下是一些常用的 userdel
命令选项:
-r
:删除用户的主目录。-f
:如果用户已登录,则强制删除用户。-R
:删除用户的主目录及其所有内容,即使主目录不为空。
3、为用户组添加目录权限
常用选项:
-R
或--recursive
:递归地对文件和目录进行操作。-H
:如果命令行参数是目录的符号链接,则遍历它。与-R
选项一起使用。-L
:在递归遍历中,遍历遇到的目录的每个符号链接。与-R
选项一起使用。
第六章 文件权限
1、文件权限查看
文件类型:
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 的关系
ugo
和 421
是两种不同的表示方式,它们可以互相转换:
- 使用
ugo
符号模式可以表达421
中的权限设置。例如,chmod u+rwx file
等同于chmod 700 file
。 - 使用
421
八进制模式可以表达ugo
中的权限设置。例如,chmod 777 file
等同于chmod ugo+rwx file
。
3、chmod
常用选项:
-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
:
- 将目录
mydir
的所有者更改为user2
,并将其所属组更改为group1
:
- 递归地将目录
mydir
及其所有子目录和文件的拥有者更改为user1
,并将其所属组更改为group1
:
第七章 软件安装
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
第八章 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 注释
单行注释
多行注释
:
+空格
+''
eg.
3.2 变量
变量类型
Shell 变量主要分为三种类型:
- 本地变量: 在当前 Shell 环境中定义的变量,只能在当前 Shell 中使用,子 Shell 无法访问。
- 环境变量: 在系统级别定义的变量,可以被所有子 Shell 继承,并且可以传递给子进程。
- 特殊变量: 由 Shell 预先定义的一些变量,用于存储系统信息或 Shell 状态。
变量命名规则
- 只能包含字母、数字和下划线,并且必须以字母或下划线开头。
- 区分大小写。
- 不能使用 Shell 的保留字(如
if
、else
、for
等)。
变量赋值
使用 =
号将值赋给变量。
引用变量
使用 $
符号引用变量的值。
变量类型声明
- 本地变量: 默认情况下,所有变量都是本地变量。
- 环境变量: 使用
export
命令将本地变量声明为环境变量。
特殊变量
$0
: 当前脚本的文件名。$1
、$2
…$9
: 脚本的第一个、第二个…第九个参数。$*
: 所有参数,以空格分隔。$@
: 所有参数,每个参数用双引号括起来。$?
: 上一个命令的退出状态码。$$
: 当前 Shell 的进程 ID。$#
: 参数的个数。
变量操作
- 读取变量: 使用
echo
命令显示变量的值。 - 修改变量: 重新赋值即可修改变量的值。
- 删除变量: 使用
unset
命令删除变量。
变量的作用域
- 本地变量: 只在当前 Shell 中有效。
- 环境变量: 在所有子 Shell 中有效,并可以传递给子进程。
变量扩展
- 命令替换: 使用
$(command)
或 `` (反引号) 将命令的输出结果赋给变量。 - 算术扩展: 使用
$((expression))
进行算术运算。 - 字符串扩展: 使用
"${variable#pattern}"
、"${variable%pattern}"
等进行字符串操作。
3.3 控制语句
3.3.1 if
-
if
:判断语句的开始。 -
elif
:前面的条件都不成立,判断条件。 -
[ ]
: 条件判断表达式。可以使用各种比较运算符。 -
then
:如果条件成立,执行该代码块。 -
else
:如果条件不成立,执行该代码块。(可选) -
fi
:if 语句结束标志。 -
比较运算符:
-eq
:等于-ne
:不等于-gt
:大于-lt
:小于-ge
:大于等于-le
:小于等于
-
字符串比较:
==
:字符串相等!=
:字符串不相等-z
:字符串为空-n
:字符串不为空
-
文件测试:
-f
:文件存在且为普通文件-d
:文件存在且为目录-r
:文件存在且可读-w
:文件存在且可写-x
:文件存在且可执行
-
逻辑运算符:
-a
:逻辑与(and)-o
:逻辑或(or)!
:逻辑非(not)
3.3.2 for
for
:循环语句的开始。i in {1..5}
: 循环变量和循环范围。{1..5}
代表从 1 到 5 的整数序列。do
:循环体开始。done
:循环体结束。
3.3.3 while
while
:循环语句的开始。[ $count -lt 5 ]
: 循环条件。do
:循环体开始。done
:循环体结束。
3.3.4 break、continue
break
:跳出当前循环。continue
:跳过当前循环的剩余语句,继续执行下一次循环。
3.4、函数
在 Linux Shell 脚本中,函数是将一段代码封装成可重复使用的模块,类似于其他编程语言中的函数或方法。使用函数可以:
- 提高代码重用性: 将常用的代码块封装成函数,可以在脚本中多次调用,避免重复编写。
- 增强代码可读性: 将脚本逻辑划分成多个函数,使脚本结构更加清晰,易于理解和维护。
- 简化脚本逻辑: 将复杂的操作封装成函数,可以简化主脚本的代码,提高脚本的可维护性。
1. 函数定义
使用 function
关键字或直接使用函数名定义函数,函数体用花括号 {}
包含。
3.5 crontab定时任务
管理 crontab
-
编辑 crontab:
-
查看 crontab:
-
删除 crontab:
-
切换编辑器:
crontab 格式定义
其中,每个星号代表一个时间字段:
- 分钟 (0-59)
- 小时 (0-23)
- 日期 (1-31)
- 月份 (1-12)
- 星期 (0-6,0 代表周日)
每个字段可以使用以下字符:
- 星号 (*):代表所有可能的值。
- 逗号 (,): 分隔多个值。 例如:
0,30
表示 0 分和 30 分。 - 减号 (-):表示一个范围。 例如:
1-5
表示 1 到 5 的所有值。 - 斜杠 (/): 表示步长。 例如:
*/5
表示每 5 分钟执行一次。
常用 crontab 示例
-
每天凌晨 2:00 执行备份脚本:
-
每周日凌晨 4:00 清理系统日志:
-
每小时的 15 分钟执行系统更新: