Linux概述
Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、底层库、shell、服务程序等)两部分组成。
Linux内核是芬兰人Linus Torvalds开发的,于1991年9月发布。而Linux操作系统作为Internet时代的产物,它是由全世界许多开发者共同合作开发的,是一个自由的操作系统(注意自由和免费并不是同一个概念,想了解二者的差别可以点击这里)。
Linux系统优点
1.开源与免费
Linux的源代码是公开的,任何人都可以获取、修改和分发,这促进了全球开发者共同参与改进和创新。同时,用户无需支付授权费用即可使用,为个人和企业节省了大量成本。
2.多用户多任务
支持多个用户同时使用系统,每个用户都可以拥有自己的文件、权限和工作环境,相互之间互不干扰。并且系统能够同时处理多个任务,各个任务可以独立运行,充分利用系统资源。
3.稳定性高
Linux内核稳定,很少出现系统崩溃的情况,适合长时间不间断运行,常用于服务器领域,能够持续提供服务,保证业务的稳定开展。
4.安全性强
具有完善的用户认证、权限管理和文件系统安全机制,能有效防止非法访问和数据泄露。同时,开源特性使得安全漏洞能被迅速发现和修复。
5.可移植性好
可以在多种硬件平台上运行,如x86、ARM、PowerPC等,能轻松适应不同的硬件环境,方便用户根据需求选择合适的硬件设备。
6.丰富的软件资源
拥有大量的开源和免费软件,涵盖办公、开发、娱乐等各个领域,用户可以根据需要自由选择和安装。
7.强大的命令行功能
命令行界面功能强大,用户通过命令可以高效地完成各种系统管理、文件操作和进程控制等任务,熟练掌握命令行操作能大大提高工作效率。
8.支持多种文件系统
支持ext4、XFS、Btrfs等多种文件系统,还能兼容FAT32、NTFS等其他操作系统的文件系统,方便与其他系统进行数据交互。
Linux系统发行版本
| 发行版本 | 包管理工具 | 主要用途 | 特点 | 适合用户 |
|---|---|---|---|---|
| Ubuntu | APT (deb) | 桌面/服务器/开发 | 用户友好,社区支持强大,定期更新,基于 Debian | 新手/中级用户 |
| Debian | APT (deb) | 服务器/稳定环境 | 高度稳定,软件包较旧但经过严格测试 | 高级用户/服务器管理员 |
| CentOS | YUM/DNF (rpm) | 企业服务器 | 基于 RHEL 的免费版本,稳定且长期支持(已转向 CentOS Stream) | 企业用户/服务器管理员 |
| Fedora | DNF (rpm) | 桌面/开发 | 前沿技术,红帽支持,软件较新 | 开发者/技术爱好者 |
| Arch Linux | Pacman | 桌面/定制化 | 滚动更新,轻量级,高度可定制 | 高级用户/DIY爱好者 |
| Manjaro | Pacman | 桌面 | 基于 Arch,但对用户更友好,预装桌面环境 | 想体验 Arch 但怕麻烦的用户 |
| openSUSE | Zypper (rpm) | 桌面/服务器 | 稳定性强,提供 Tumbleweed(滚动版)和 Leap(稳定版) | 中级/高级用户 |
| Linux Mint | APT (deb) | 桌面 | 基于 Ubuntu,更简洁的桌面体验,适合日常使用 | 新手/桌面用户 |
| Alpine | APK | 容器/轻量级环境 | 极简设计,安全性高,适合 Docker 和嵌入式 | 开发者/运维人员 |
| Kali Linux | APT (deb) | 渗透测试/安全审计 | 预装大量安全工具,专为网络安全设计 | 安全研究人员 |
补充说明:
- CentOS:原为 RHEL 的免费稳定版,现转向滚动更新的 CentOS Stream,适合开发测试环境。
- Fedora:红帽的社区版,适合体验最新技术(如 Wayland、PipeWire)。
- Arch Linux:需手动配置系统,但文档完善(Arch Wiki),适合学习 Linux 原理。
- Alpine:采用 musl libc 和 BusyBox,镜像体积极小(约 5MB),是容器化热门选择。
RHEL(Red Hat Enterprise Linux) 是红帽公司(Red Hat)推出的企业级 Linux 发行版,专注于稳定性、安全性和商业支持,是服务器和企业环境的行业标准之一。
基础命令
Linux系统的命令通常都是如下所示的格式:
命令名称 [命名参数] [命令对象]
1、获取登录信息 - w / who / last/ lastb
w 命令
作用:显示当前登录系统的用户及其正在执行的进程。
who 命令
作用:显示当前登录系统的用户信息(比 w 更简洁)。
last 命令
作用:显示用户登录历史记录(从 /var/log/wtmp 读取)。
lastb 命令
作用:显示失败的登录尝试(从 /var/log/btmp 读取,需 sudo 权限)。
2、查看自己使用的Shell - ps。
Shell也被称为“壳”或“壳程序”,它是用户与操作系统内核交流的翻译官,简单的说就是人与计算机交互的界面和接口。目前很多Linux系统默认的Shell都是bash(Bourne Again SHell),因为它可以使用tab键进行命令和路径补全、可以保存历史命令、可以方便的配置环境变量以及执行批处理操作。
ps
3、查看命令的说明和位置 - whatis / which / whereis。
whatis - 显示命令的简短描述 如果没有则运行mandb命令
which - 查找命令的绝对路径
whereis - 查找命令的二进制、源码和手册页
4、清除屏幕上显示的内容 - clear。
clear
5、查看帮助文档 - man / info / --help / apropos。
-- 查看命令的官方手册,内容最详细。
man [命令名]
man ls # 查看ls命令的手册 输入q退出
-- 比 man 更结构化,适合复杂命令(如GNU工具)。
info [命令名]
info grep # 查看grep的详细文档 输入q退出
-- 快速查看命令的简要帮助(适合常用选项)。
--help
[命令] --help
ls --help # 查看ls的快速帮助
-- 模糊搜索相关命令(适合忘记完整命令名时)。
apropos [关键词]
apropos "copy file" # 查找与文件复制相关的命令
apropos network # 查找网络相关命令
6、查看系统和主机名 - uname / hostname。
[root@lw /]# uname
Linux
[root@lw /]# hostname
lw
[root@lw /]# cat /etc/centos-release
CentOS Linux release 8.5.2111
说明:cat是连接文件内容并打印到标准输出的命令,后面会讲到该命令;/etc是Linux系统上的一个非常重要的目录,它保存了很多的配置文件;centos-release是该目录下的一个文件
7、时间和日期 - date / cal。
[root@lw /]# date
2025年 07月 02日 星期三 05:11:59 EDT
[root@lw /]# cal
七月 2025
日 一 二 三 四 五 六
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
[root@lw /]# cal 5 2029
五月 2029
日 一 二 三 四 五 六
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
8、重启和关机 - reboot / shutdown。
reboot -- 重启
shutdown -h now -- 立即关机
shutdown -r +10 -- 10 分钟后重启
shutdown -r 20:00 -- 晚上 8 点重启
shutdown -k +5 -- 只发警告,不真正关机(测试用)
shutdown -c -- 取消预定的关机/重启
说明:在执行shutdown命令时会向登录系统的用户发出警告,可以在命令后面跟上警告消息来替换默认的警告消息,也可以在-h参数后通过now来表示立刻关机。
9、退出登录 - exit / logout。
10、查看历史命令 - history。
history
实用程序:
1、文件和文件夹操作
1、创建/删除空目录 - mkdir / rmdir。
mkdir命令来自英文词组make directories的缩写,其功能是创建目录文件。该命令的使用简单,但需要注意,若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。若目录不存在,但具有嵌套的依赖关系时,例如/Dir1/Dir2/Dir3/Dir4/Dir5,要想一次性创建则需要加入-p参数,进行递归操作。
语法格式 : mkdir 参数 目录名
常用参数:
-m 创建目录的同时设置权限
-v 显示执行过程详细信息
-p 递归创建多级目录
-z 设置目录安全上下文
# 创建一个空目录
mkdir my_directory
# 创建多级目录
mkdir -p parent/child/grandchild
# 删除空目录 - rmdir rmdir 只能删除空目录
rmdir my_directory
# 删除多个空目录
rmdir dir1 dir2 dir3
2、创建/删除文件 - touch / rm。
touch命令的功能是创建空文件与修改时间戳。如果文件不存在,则会创建一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,管理员可以完成此项工作,而普通用户只能管理主机的文件。
语法格式:touch 参数 文件名
常用参数:
-a 设置文件的读取时间记录
-t 设置文件的时间记录
-c 不创建新文件
-d 设置时间与日期
--version 显示版本信息
-m 设置文件的修改时间记录
# 创建一个名为file1.txt的新空文件
touch file1.txt
# 创建file2.txt和file3.txt两个新文件
touch file2.txt file3.txt
# 如果file4.txt不存在,不会创建它
touch -c file4.txt
# 只更新file1.txt的访问时间(access time),不改变修改时间
touch -a file1.txt
# 只更新file1.txt的修改时间(modification time),不改变访问时间
touch -m file1.txt
# 将file1.txt的时间设置为2023年12月31日23时59分
# 格式:[[CC]YY]MMDDhhmm[.ss]
touch -t 202312312359.59 file1.txt
# 使用更易读的日期格式设置时间
touch -d "2023-12-31 23:59:59" file1.txt
# 也可以使用相对时间
touch -d "next Tuesday" file1.txt
touch -d "2 days ago" file1.txt
# 显示touch命令的版本信息
touch --version
# 不创建新文件(-c),同时设置访问和修改时间为特定时间
touch -c -d "2023-01-01 00:00:00" file5.txt
rm命令来自英文单词remove的缩写,中文译为“消除”,其功能是删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意。例如,执行rm -rf /*命令会清空系统中所有的文件,甚至无法恢复回来。所以我们在执行之前一定要再次确认在在哪个目录中、到底要删除什么文件,考虑好后再敲击Enter键,要时刻保持清醒的头脑。
语法格式:rm 参数 文件名
常用参数:
-d 仅删除无子文件的空目录
-v 显示执行过程详细信息
-f 强制删除文件而不询问
-r 删除目录并递归的删除目录中的文件和目录。
-i 删除文件前询问用户是否确认
--version 显示版本信息
#!/bin/bash
# 案例1: 删除单个文件
# 删除当前目录下的file1.txt文件
rm file1.txt
# 案例2: 删除多个文件
# 同时删除file2.txt和file3.txt两个文件
rm file2.txt file3.txt
# 案例3: 强制删除文件(-f)
# 强制删除file4.txt,不显示警告信息,即使文件不存在也不会报错
rm -f file4.txt
# 案例4: 交互式删除(-i)
# 删除file5.txt前会询问确认(y/n)
rm -i file5.txt
# 案例5: 显示详细信息(-v)
# 删除file6.txt并显示操作过程
rm -v file6.txt
# 案例6: 删除空目录(-d)
# 仅删除空目录empty_dir(目录必须为空)
rm -d empty_dir
# 案例7: 组合使用参数
# 强制删除file7.txt并显示详细信息
rm -fv file7.txt
# 案例8: 递归删除目录及其内容(-r)
# 删除mydir目录及其所有子目录和文件(危险操作!)
rm -r mydir
# 案例9: 强制递归删除
# 强制删除mydir目录及其所有内容,不询问不提示
rm -rf mydir
# 案例10: 显示版本信息
# 显示rm命令的版本信息
rm --version
# 安全提示:
# 1. 使用rm -rf时要特别小心,删除后无法恢复
# 2. 重要文件删除前建议先备份
# 3. 可以使用alias rm='rm -i'设置默认交互式删除
# 4. 删除系统文件可能导致系统不稳定,需谨慎操作
3、切换和查看当前工作目录 - cd / pwd。
cd命令来自英文词组change directory的缩写,其功能是更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。
语法格式:cd 参数 目录名
常用参数:
~ 切换至用户家目录
.. 切换至当前位置的上一级目录
-- 切换至上次所在目录
# 案例1: 切换到指定目录
# 切换到 /var/log 目录
cd /var/log
echo "当前目录: $(pwd)" # 显示 /var/log
# 案例2: 切换到用户家目录 (~)
# 等同于 cd $HOME 或 cd
cd ~
echo "当前目录: $(pwd)" # 显示 /home/用户名
# 案例3: 切换到上一级目录 (..)
cd /var/log
cd ..
echo "当前目录: $(pwd)" # 显示 /var
# 案例3: 切换到上次所在目录 (--)
cd /tmp # 当前:/tmp
cd /var/log # 当前:/var/log
cd - # 应返回 /tmp
cd - # 应返回 /var/log
cd -- # 效果应与 cd - 相同
pwd命令来自英文词组print working directory的缩写,其功能是显示当前工作目录的路径,即显示所在位置的绝对路径。
[root@lw ~]# pwd
/root
4、查看目录内容 - ls。
ls命令来自英文单词list的缩写,中文译为“列出”,其功能是显示目录中的文件及其属性信息,是最常使用的Linux命令之一。
-l:以长格式查看文件和目录。
-a:显示以点开头的文件和目录(隐藏文件)。
-R:遇到目录要进行递归展开(继续列出目录下面的文件和目录)。
-d:只列出目录,不列出其他内容。
-S / -t:按大小/时间排序。
# 1. 简单列出当前目录内容
ls
# 2. 列出指定目录内容(示例:/tmp)
ls /tmp
# 3. 长格式列出当前目录内容
ls -l
# 4. 长格式列出指定目录内容(示例:/var/log)
ls -l /var/log
# 5. 显示所有文件(包括隐藏文件)
ls -a
# 6. 长格式显示所有文件
ls -la
# 7. 递归列出当前目录及其子目录(前20行)
ls -R | head -20
# 8. 长格式递归列出(前20行)
ls -lR | head -20
# 9. 仅显示目录而不展开内容
ls -d */
# 10. 长格式显示目录信息(示例:/etc)
ls -ld /etc
# 11. 按文件大小排序(大到小)
ls -lS
# 12. 按修改时间排序(新到旧)
ls -lt
# 13. 按修改时间反向排序(旧到新)
ls -ltr
# 14. 长格式显示所有文件并按时间排序
ls -lat
# 15. 递归列出并按大小排序(前20行)
ls -lRS | head -20
# 16. 显示目录并按时间排序
ls -ldt */
# 17. 显示最近修改的5个文件
ls -lt | head -6
# 18. 显示最大的5个文件
ls -lS | head -6
# 19. 显示隐藏文件详细信息并按时间排序
ls -lat
# 20. 只显示目录并按大小排序
ls -ldS */
5、显示指定文件的详细属性信息- ll
ll命令的功能是显示指定文件或目录的详细属性信息。实际它不是一个真实存在的命令,只是“ls -l --color=auto”的别名而已。ll命令可以默认列出当前目录内文件的详细属性信息,包含权限、所属、修改时间以及占用空间等信息。
-a 显示目录下的所有文件
-N 不限制文件长度 -A 显示除“.”和“..”外的所有文件
-q 用问号代替所有无法显示的字符
-d 显示目录自身的属性信息
-Q 为所有文件名称加上双引号
-f 不进行文件排序
-r 反向显示文件排序
-h 以更易读的容量单位显示文件大小
-R 递归显示所有子文件
-i 显示文件的inode属性块信息
-s 显示每个文件名时加上大小信息
-k 以字节为单位显示文件的大小
-S 依据文件大小排序
-l 使用长格式输出文件信息
-t 依据文件修改时间排序
-m 以逗号为间隔符输出文件信息
-u 依据文件访问时间排序
# 1. 显示当前目录所有文件的详细信息(等价于 ls -l)
ll
# 2. 显示指定文件的详细信息
ll /etc/passwd
# 3. 显示指定目录的详细信息
ll /var/log/
# 4. 显示所有文件(包含隐藏文件)
ll -a
# 5. 显示除 "." 和 ".." 外的所有文件
ll -A
# 6. 不限制文件名显示长度
ll -N
# 7. 显示目录自身的属性(不显示内容)
ll -d /etc/
# 8. 以易读格式显示文件大小(KB/MB/GB)
ll -h
# 9. 递归显示子目录内容(前20行)
ll -R | head -20
# 10. 显示inode信息
ll -i
# 11. 显示文件大小(单位:块)
ll -s
# 12. 以字节为单位显示大小
ll -k
# 13. 按文件大小排序(大到小)
ll -S
# 14. 按修改时间排序(新到旧)
ll -t
# 15. 按访问时间排序
ll -u
# 16. 反向排序
ll -r
# 17. 不排序(按文件系统顺序)
ll -f
# 18. 逗号分隔显示
ll -m
# 19. 为文件名添加引号
ll -Q
# 20. 替换不可显示字符为问号
ll -q
# 组合案例:
# 显示所有文件(含隐藏文件),按大小排序,易读格式
ll -aSh
# 递归显示目录信息,显示inode,易读格式
ll -Rih
# 显示目录自身信息,按修改时间排序
ll -dt
6、查看文件内容 - cat / tac / head / tail / more / less / rev / od。
# 1. 创建测试文件 ---------------------------------
echo "[1] 创建测试文件 demo.txt..."
cat > demo.txt <<'EOF'
1. 这是第一行内容
2. 这是第二行内容
3. 这是第三行内容
4. 这是第四行内容
5. 这是第五行内容
6. 这是第六行内容
7. 这是第七行内容
8. 这是第八行内容
9. 这是第九行内容
10. 这是第十行内容
EOF
# 2. 文件查看命令演示 -----------------------------
# (1) cat - 正向显示文件内容
echo "[2-1] cat 命令演示:"
echo "正常顺序显示文件内容:"
cat demo.txt
echo -e "\n----------------------------------------"
# (2) tac - 反向显示文件内容(行逆序)
echo "[2-2] tac 命令演示:"
echo "行逆序显示文件内容:"
tac demo.txt
echo -e "\n----------------------------------------"
# (3) head - 显示文件头部
echo "[2-3] head 命令演示:"
echo "显示前3行内容:"
head -n 3 demo.txt
echo -e "\n----------------------------------------"
# (4) tail - 显示文件尾部
echo "[2-4] tail 命令演示:"
echo "显示后3行内容:"
tail -n 3 demo.txt
echo "实时监控文件变化(5秒自动结束):"
tail -f demo.txt &
sleep 5
kill $! 2>/dev/null
echo -e "\n----------------------------------------"
# (5) more - 分页查看
echo "[2-5] more 命令演示:"
echo "使用分页显示(按q退出查看):"
more -d demo.txt <<< q
echo -e "\n----------------------------------------"
# (6) less - 高级分页查看
echo "[2-6] less 命令演示:"
echo "使用高级分页显示(带行号,按q退出):"
less -N demo.txt <<< q
echo -e "\n----------------------------------------"
# (7) rev - 行内容反转
echo "[2-7] rev 命令演示:"
echo "每行内容反转显示:"
rev demo.txt
echo -e "\n----------------------------------------"
# (8) od - 多种格式查看
echo "[2-8] od 命令演示:"
echo "以ASCII码显示文件:"
od -c demo.txt
echo -e "\n以十六进制显示:"
od -x demo.txt
echo -e "\n----------------------------------------"
# 3. 清理工作 -------------------------------------
echo "[3] 清理测试文件..."
rm -f demo.txt
echo "脚本执行完毕!"
7、拷贝/移动文件 - cp / mv。
# 1. 创建测试环境 --------------------------------
mkdir -p test_dir/{src,dest}
echo "测试文件内容" > test_dir/src/file1.txt
echo "另一个测试文件" > test_dir/src/file2.txt
ln -s file1.txt test_dir/src/link_file.txt
# 2. cp命令案例 ----------------------------------
# 基本拷贝
cp test_dir/src/file1.txt test_dir/dest/
# 拷贝并保留属性
cp -p test_dir/src/file1.txt test_dir/dest/file1_with_attr.txt
# 递归拷贝目录
cp -r test_dir/src test_dir/dest/src_copy
# 交互式拷贝(覆盖前提示)
cp -i test_dir/src/file1.txt test_dir/dest/
# 强制拷贝(不提示直接覆盖)
cp -f test_dir/src/file2.txt test_dir/dest/
# 拷贝符号链接本身(而非指向的文件)
cp -d test_dir/src/link_file.txt test_dir/dest/
# 详细模式(显示操作过程)
cp -v test_dir/src/* test_dir/dest/
# 3. mv命令案例 ----------------------------------
# 基本移动
mv test_dir/dest/file2.txt test_dir/dest/moved_file.txt
# 移动并覆盖(不提示)
mv -f test_dir/src/file1.txt test_dir/dest/
# 交互式移动(覆盖前提示)
mv -i test_dir/src/file2.txt test_dir/dest/
# 详细模式(显示操作过程)
mv -v test_dir/src/link_file.txt test_dir/dest/
# 4. 特殊案例 ------------------------------------
# 批量移动特定类型文件
mkdir -p test_dir/dest/images
touch test_dir/src/{1..3}.jpg
mv test_dir/src/*.jpg test_dir/dest/images/
# 移动时创建目录结构
mkdir -p test_dir/dest/new_dir
mv test_dir/src/file1.txt test_dir/dest/new_dir/
# 5. 清理测试环境 --------------------------------
rm -rf test_dir
8、文件重命名 - rename。
rename命令的功能是用于批量修改文件名称。与mv命令一次只能修改一个文件名不同,rename命令能够基于正则表达式对文件名进行批量修改,但要求是把匹配规则准确地描述给系统。
-v 显示重命名过程
-n 模拟运行(不实际执行)
-f 强制覆盖已存在文件
# 创建测试环境...
mkdir -p rename_test && cd rename_test || exit
# 创建测试文件
touch {a,b,c}.txt draft_{1,2,3}.doc IMG_2023{01..03}.jpg FILE_{A..C}.HTML
ls -1
# 1. 基本重命名案例 -----------------------------
# 案例1:修改文件扩展名(.txt → .md)
rename -v 's/.txt$/.md/' *.txt
ls -1 *.md
# 案例2:添加前缀(所有文件添加 backup_)
rename -v 's/^/backup_/' *
ls -1 backup_*
# 案例3:删除特定字符串(删除 draft_)
rename -v 's/draft_//' *.doc
ls -1 *.doc
# 2. 高级重命名案例 -----------------------------
# 案例4:大小写转换(.HTML → .html)
rename -v 'y/A-Z/a-z/' *.HTML
ls -1 *.html
# 案例5:使用正则表达式分组重命名(IMG_202301.jpg → 2023-01.jpg)
rename -v 's/IMG_(\d{4})(\d{2})/$1-$2/' *.jpg
ls -1 *-*.jpg
# 案例6:条件重命名(仅处理包含数字的文件-为含数字文件添加 numeric_ 前缀)
rename -v 's/(\d+)/numeric_$1/' *[0-9]*
ls -1 numeric_*
# 3. 安全操作演示 -------------------------------
# 案例7:模拟运行(-n 选项)模拟将 .md 改为 .markdown
rename -n 's/.md$/.markdown/' *.md
# 案例8:交互式操作(perl版本不支持,可用循环替代)
echo -e "\n[8] 交互式重命名示例:"
for file in *.jpg; do
read -p "将 $file 重命名为 vacation_$file? (y/n) " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]] && mv -v "$file" "vacation_$file"
done
ls -1 vacation_* 2>/dev/null || echo "未重命名任何jpg文件"
echo -e "\n----------------------------------------"
9、查找文件和查找内容 - find / grep。
find命令的功能是根据给定的路径和条件查找相关文件或目录
grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。
# 全盘搜索系统中所有以.conf结尾的文件:
find / -name *.conf
# 查找当前目录下所有.txt文件
find . -name "*.txt"
# 查找当前目录下所有目录
find . -type d
# 查找/var目录下所有符号链接文件
find /var -type l
# 查找7天内修改过的文件
find . -mtime -7
# 查找30天前访问过的文件
find /data -atime +30
# 查找权限为644的文件
find . -perm 644
# 查找可执行文件
find /usr/bin -perm /a=x
# 查找大于10MB且90天内未修改的.log文件
find /var/log -name "*.log" -size +10M -mtime +90
# 查找空文件或空目录
find . -empty
# 查找所有.txt文件并删除
find . -name "*.txt" -delete
# 在文件中搜索关键词
grep "error" log.txt
# 递归搜索目录
grep -r "function" /project/src
# 显示匹配行及前后3行
grep -C 3 "pattern" file.txt
# 显示匹配行及后2行
grep -A 2 "keyword" data.log
# 使用正则表达式搜索
grep -E "^[A-Z]" names.txt
# 反向匹配(显示不包含的行)
grep -v "success" output.log
# 统计匹配行数
grep -c "warning" system.log
# 显示匹配的文件名
grep -l "deprecated" *.php
# 忽略大小写搜索
grep -i "timeout" debug.log
# 搜索二进制文件中的文本
grep -a "text" binary.file
# 查找包含特定内容的Java文件
find . -name "*.java" -exec grep -l "interface" {} ;
# 统计所有.py文件中的空行数
find . -name "*.py" -exec grep -c "^$" {} ;
10、创建链接和查看链接 - ln / readlink。
ln命令来自英文单词link的缩写,中文译为“链接”,其功能是为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接,另一种是软链接。软链接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软链接文件也将无法使用;硬链接则是将文件的inode属性块进行了复制,因此把原始文件移动或删除后,硬链接文件依然可以使用。
# 创建测试环境
mkdir -p link_test && cd link_test || exit
echo "原始文件内容" > source_file.txt
mkdir source_dir
touch source_dir/{file1,file2}
# 1. 创建硬链接(共享inode)
ln source_file.txt hard_link.txt
# 2. 创建相对路径符号链接
ln -s source_file.txt sym_link_rel.txt
# 3. 创建绝对路径符号链接
ln -s "$(pwd)/source_file.txt" sym_link_abs.txt
# 4. 创建目录符号链接
ln -s source_dir dir_link
# 5. 查看链接信息
ls -li source_file.txt hard_link.txt
ls -l sym_link_*.txt dir_link
# 6. 读取链接指向
readlink sym_link_rel.txt
readlink -f sym_link_abs.txt
# 7. 检测链接类型
[ -L sym_link_rel.txt ] && echo "sym_link_rel.txt 是符号链接"
[ ! -L hard_link.txt ] && echo "hard_link.txt 不是符号链接"
# 8. 查找损坏链接
ln -s non_existent.txt broken_link.txt
find . -type l ! -exec test -e {} ; -print
# 9. 批量创建链接
for f in source_dir/*; do
ln -s "../$f" "linked_${f##*/}"
done
# 10. 比较硬链接和原文件
md5sum source_file.txt hard_link.txt
# 清理测试环境
cd .. && rm -rf link_test
11、压缩/解压缩和归档/解归档 - gzip / gunzip / xz / tar
# ================================================
# 压缩/解压缩和归档/解归档操作演示
# 演示命令:gzip/gunzip/xz/tar
# ================================================
# 1. 创建测试环境 --------------------------------
mkdir -p compression_test && cd compression_test || exit
# 创建测试文件和目录
echo "This is a test file" > file1.txt
echo "Another test file" > file2.txt
mkdir test_dir
echo "File inside directory" > test_dir/file3.txt
# 2. gzip/gunzip 案例 ---------------------------
# 压缩单个文件 (生成 file1.txt.gz)
gzip file1.txt
# 查看压缩文件内容 (不解压)
zcat file1.txt.gz
# 解压文件 (生成 file1.txt)
gunzip file1.txt.gz
# 3. xz 高压缩率案例 ----------------------------
# 压缩文件 (生成 file2.txt.xz)
xz file2.txt
# 查看压缩文件内容
xzcat file2.txt.xz
# 解压文件
unxz file2.txt.xz
# 4. tar 归档案例 -------------------------------
# 创建归档文件 (不压缩)
tar -cvf archive.tar file1.txt file2.txt test_dir/
# 查看归档内容
tar -tvf archive.tar
# 解归档
tar -xvf archive.tar
# 5. tar 结合压缩 ------------------------------
# 创建并用gzip压缩的归档 (archive.tar.gz)
tar -czvf archive.tar.gz file1.txt file2.txt test_dir/
# 创建并用xz压缩的归档 (archive.tar.xz)
tar -cJvf archive.tar.xz file1.txt file2.txt test_dir/
# 解压gzip压缩的归档
tar -xzvf archive.tar.gz
# 解压xz压缩的归档
tar -xJvf archive.tar.xz
# 6. 高级用法 ----------------------------------
# 仅解压归档中的特定文件
tar -xzvf archive.tar.gz "test_dir/file3.txt"
# 向已有归档添加文件
tar -rvf archive.tar newfile.txt
# 7. 清理测试环境 ------------------------------
cd .. && rm -rf compression_test
关键操作说明:
- gzip/gunzip:
-
gzip压缩后生成.gz后缀文件zcat可查看压缩文件内容gunzip或gzip -d解压
- xz/unxz:
-
- 提供比gzip更高的压缩率
- 压缩后生成
.xz后缀文件 xzcat查看压缩内容- 解压使用
unxz或xz -d
- tar归档:
-
-c创建归档-x解归档-v显示详细过程-f指定文件名-t列出归档内容
- 组合压缩:
-
-z使用gzip压缩/解压 (.tar.gz)-J使用xz压缩/解压 (.tar.xz)
- 实用技巧:
-
- 使用
--wildcards模式匹配解压特定文件 -r向已有tar归档追加文件--exclude排除特定文件不打包
- 使用
# 备份目录 (使用xz高压缩率)
tar -cJvf backup_$(date +%Y%m%d).tar.xz /important/data
# 传输前压缩
tar -czvf project.tar.gz project/ && scp project.tar.gz user@remote:/path
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/directory
说明:归档(也称为创建归档)和解归档都使用tar命令,通常创建归档需要-cvf三个参数,其中c表示创建(create),v表示显示创建归档详情(verbose),f表示指定归档的文件(file);解归档需要加上-xvf参数,其中x表示抽取(extract),其他两个参数跟创建归档相同。
12、显示文件或目录 - basename / dirname。
# ================================================
# basename/dirname 命令完整案例
# ================================================
# 1. 准备测试路径
path1="/var/log/syslog"
path2="/home/user/docs/report.pdf"
path3="/tmp/"
path4="relative/path/file.txt"
# 2. basename 基础用法
basename "$path1" # syslog
basename "$path2" # report.pdf
basename "$path3" # 空输出(路径以/结尾)
basename "$path4" # file.txt
# 3. basename 去除后缀
basename "$path2" .pdf # report
basename "$path1" .log # syslog(实际不匹配仍返回syslog)
# 4. dirname 基础用法
dirname "$path1" # /var/log
dirname "$path2" # /home/user/docs
dirname "$path3" # /(根目录)
dirname "$path4" # relative/path
# 5. 组合使用案例
parent_dir=$(dirname "$path2")
top_dir=$(basename "$parent_dir") # docs
# 6. 处理多个路径
basename -a "$path1" "$path2" "$path4"
dirname "$path1" "$path2" "$path4"
# 7. 实际应用:获取脚本信息
script_path=$(realpath "$0")
script_dir=$(dirname "$script_path")
script_name=$(basename "$script_path")
# 8. 特殊字符测试
space_path="/path/with spaces/file name.txt"
basename "$space_path" # file name.txt
dirname "$space_path" # /path/with spaces
# 9. 空参数测试
basename "" # 空输出
dirname "" # .(当前目录)
13、其他相关工具。
- sort - 对内容排序
- uniq - 去掉相邻重复内容
- tr - 替换指定内容为新内容
- cut / paste - 剪切/黏贴内容
- split - 拆分文件
- file - 判断文件类型
- wc - 统计文件行数、单词数、字节数
- iconv - 编码转换
#!/bin/bash
# ================================================
# 文本处理工具完整案例集
# ================================================
# 1. 准备测试文件
cat <<EOF > test.txt
apple 3
orange 2
banana 5
apple 3
pear 1
banana 5
grape 4
EOF
cat <<EOF > data.csv
Name,Age,Gender
Alice,25,F
Bob,30,M
Carol,28,F
Dave,35,M
EOF
# 2. sort 排序案例
sort test.txt # 默认按行首字母排序
sort -n -k2 test.txt # 按第二列数字排序
sort -u test.txt # 排序并去重
# 3. uniq 去重案例
sort test.txt | uniq # 必须先排序才能正确去重
uniq -c test.txt # 统计连续重复行次数
uniq -d test.txt # 只显示重复行
# 4. tr 替换案例
echo "HELLO World" | tr 'A-Z' 'a-z' # 转小写
echo "Hello123" | tr -d '0-9' # 删除数字
tr ' ' '\n' < test.txt # 空格转换行符
# 5. cut 提取列案例
cut -d',' -f1,3 data.csv # 提取第1,3列(逗号分隔)
cut -c1-5 test.txt # 提取每行1-5字符
# 6. paste 合并文件案例
paste -d':' <(cut -d' ' -f1 test.txt) <(cut -d' ' -f2 test.txt)
# 7. split 分割文件案例
split -l 3 test.txt chunk_ # 每3行分割为独立文件
split -b 100k bigfile part_ # 按100KB大小分割
# 8. file 文件类型检测
file test.txt # 检测文件类型
file -i data.csv # 显示MIME类型
# 9. wc 统计案例
wc -l test.txt # 统计行数
wc -w test.txt # 统计单词数
wc -c test.txt # 统计字节数
# 10. iconv 编码转换
iconv -f UTF-8 -t GB18030 input.txt > output.gbk
iconv -l # 列出支持的编码
# 11. 组合应用案例
# 统计水果出现频率
cut -d' ' -f1 test.txt | sort | uniq -c | sort -nr
# 提取CSV特定列并转换编码
cut -d',' -f1,2 data.csv | iconv -t GBK > output.csv
# 12. 清理临时文件
rm -f test.txt data.csv chunk_* part_* output.*
关键工具说明:
- sort:
-
-n数值排序-k指定排序列-r反向排序-u去重排序
- uniq:
-
- 必须对已排序内容操作
-c计数-d仅显示重复行-i忽略大小写
- tr:
-
- 只能处理单字符转换
-d删除字符-s压缩重复字符
- cut/paste:
-
cut -d指定分隔符cut -f选择字段paste -d指定连接符
- split:
-
-l按行分割-b按大小分割- 生成文件默认以xaa,xab命名
- file:
-
- 识别300+种文件类型
-i显示MIME类型-z查看压缩文件内容
- wc:
-
-l行数-w单词数-c字节数-m字符数(与字节不同)
- iconv:
-
- 常用编码: UTF-8, GB18030, BIG5
-f源编码-t目标编码-c跳过非法字符
典型应用场景:
日志分析:
# 统计Nginx日志TOP10 IP
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head
数据清洗:
# CSV文件转TSV并过滤
tr ',' '\t' < data.csv | grep -v "Test" > output.tsv
批量重编码:
# 目录下所有txt转GBK编码
find . -name "*.txt" -exec iconv -f UTF-8 -t GBK {} -o {}.gbk ;
大文件处理:
# 分割处理100GB日志文件
split -l 1000000 huge.log chunk_
for f in chunk_*; do
process "$f"
done
管道和重定向
1、管道的使用 - |。
例子:查找当前目录下文件个数。
[root ~]# find ./ | wc -l
6152
例子:列出当前路径下的文件和文件夹,给每一项加一个编号。
[root ~]# ls | cat -n
1 dump.rdb
2 mongodb-3.6.5
3 Python-3.6.5
4 redis-3.2.11
5 redis.conf
例子:查找record.log中包含AAA,但不包含BBB的记录的总数
[root ~]# cat record.log | grep AAA | grep -v BBB | wc -l
2、输出重定向和错误重定向 - > / >> / 2>。
#!/bin/bash
# ================================================
# 输出重定向完整案例
# ================================================
# 0. 准备测试环境
cleanup() { rm -f output.txt error.txt combined.log; }
trap cleanup EXIT
# 1. 标准输出重定向
echo "正常消息" > output.txt # 覆盖写入
echo "追加内容" >> output.txt # 追加写入
# 2. 标准错误重定向
ls /nonexistent 2> error.txt # 错误写入文件
ls /nonexistent 2>> error.txt # 错误追加写入
# 3. 混合重定向
# 正确和错误输出到不同文件
ls /etc/passwd /nonexistent > output.txt 2> error.txt
# 4. 合并输出流
# 错误重定向到标准输出
ls /etc/passwd /nonexistent > combined.log 2>&1
# 简写形式(Bash 4+)
ls /etc/passwd /nonexistent &> combined.log
# 5. 丢弃输出
ls /nonexistent 2> /dev/null # 丢弃错误
ls /etc/passwd > /dev/null # 丢弃正常输出
# 6. 管道中的错误处理
ls /etc/passwd /nonexistent |& grep passwd # 捕获错误流
ls /etc/passwd /nonexistent 2>&1 | grep -v "No such"
# 7. 文件描述符高级用法
# 自定义文件描述符
exec 3> custom_fd.txt
echo "通过FD3写入" >&3
exec 3>&- # 关闭描述符
# 8. 实时重定向
# 同时输出到文件和屏幕
exec > >(tee -a output.log) 2>&1
echo "同时显示和记录"
# 9. 重定向顺序重要性
# 错误示例(不会捕获错误):
ls /nonexistent > output.txt 2>&1 > new.txt
# 正确写法:
ls /nonexistent > new.txt 2>&1
# 10. heredoc重定向
cat <<EOF > config.ini
[default]
host=localhost
port=8080
EOF
# 显示最终文件内容
echo "==== output.txt ===="
cat output.txt
echo -e "\n==== error.txt ===="
cat error.txt
echo -e "\n==== combined.log ===="
cat combined.log
3、输入重定向 - <。
#!/bin/bash
# 使用 Here Document (<<) 生成一个临时文件 input.txt
# 避免使用 echo,而是直接将多行文本传递给 cat 并重定向到文件
cat <<EOF > input.txt
This is line 1.
Here is line 2.
And this is the final line.
EOF
# 使用 < 输入重定向,让 wc 从 input.txt 读取内容
# wc -w 统计单词数量
word_count=$(wc -w < input.txt)
# 输出统计结果
echo "The file has $word_count words."
# 删除临时文件(可选)
rm -f input.txt
关键点解析:
<****的作用
wc -w < input.txt表示wc命令从input.txt读取输入,而不是从键盘或管道获取数据。<<EOF****(Here Document)
-
- 替代
echo,直接生成多行文本。 EOF是结束标记(可以是任意字符串,如END)。
- 替代
> input.txt
将 Here Document 的内容写入input.txt,供后续命令使用。$(...)命令替换
获取wc -w的执行结果并存入变量word_count。
4、多重定向 - tee。
下面的命令除了在终端显示命令ls的结果之外,还会追加输出到ls.txt文件中。
[root ~]# ls | tee -a ls.txt
awk命令 – 对文本和数据进行处理的编程语言
awk命令来自三位创始人Alfred Aho、Peter Weinberger、Brian Kernighan的姓氏缩写,其功能是对文本和数据进行处理。使用awk命令可以让用户自定义函数或正则表达式,对文本内容进行高效管理,awk与sed、grep并称为Linux系统中的“文本三剑客”。
、
#!/bin/bash
# 使用 AWK 直接生成 1000 条模拟日志(不依赖外部文件或 echo)
awk -v count=1000 '
BEGIN {
# 定义模拟数据池
ips[1] = "192.168.1.10"; ips[2] = "10.0.0.15"; ips[3] = "172.16.0.20";
urls[1] = "/home"; urls[2] = "/product"; urls[3] = "/contact";
methods[1] = "GET"; methods[2] = "POST"; methods[3] = "HEAD";
status[1] = "200"; status[2] = "404"; status[3] = "500";
user_agents[1] = "Mozilla/5.0"; user_agents[2] = "curl/7.68.0";
# 生成日志(Nginx 格式)
srand(); # 初始化随机种子
for (i=1; i<=count; i++) {
# 随机组合数据
ip = ips[int(1 + rand() * 3)];
time = strftime("[%d/%b/%Y:%H:%M:%S %z]", systime() - int(rand() * 86400));
method = methods[int(1 + rand() * 3)];
url = urls[int(1 + rand() * 3)];
code = status[int(1 + rand() * 3)];
agent = user_agents[int(1 + rand() * 2)];
# 输出日志行
printf "%s - - %s "%s %s HTTP/1.1" %s %d "-" "%s"\n",
ip, time, method, url, code, int(rand() * 1000), agent;
}
}' > access.log
# 分析日志:统计 TOP 5 IP
echo "===== TOP 5 访问 IP ====="
awk '{ip_count[$1]++} END {
for (ip in ip_count) print ip_count[ip], ip | "sort -nr | head -n 5"
}' access.log
# 分析日志:统计状态码分布
echo -e "\n===== HTTP 状态码分布 ====="
awk '{code_count[$9]++} END {
for (code in code_count) printf "状态码 %s: %d 次\n", code, code_count[code]
}' access.log
# 清理(可选)
# rm -f access.log
用户管理
1. 创建和删除用户 - useradd / userdel。
[root home]# useradd hellokitty
[root home]# userdel hellokitty
-
-d- 创建用户时为用户指定用户主目录-g- 创建用户时指定用户所属的用户组
2. 创建和删除用户组 - groupadd / groupdel。
说明:用户组主要是为了方便对一个组里面所有用户的管理。
3. 修改密码 - passwd。
[root ~]# passwd hellokitty
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
说明:输入密码和确认密码没有回显且必须一气呵成的输入完成(不能使用退格键),密码和确认密码需要一致。如果使用passwd命令时没有指定命令作用的对象,则表示要修改当前用户的密码。如果想批量修改用户密码,可以使用chpasswd命令。
-
-l/-u- 锁定/解锁用户。-d- 清除用户密码。-e- 设置密码立即过期,用户登录时会强制要求修改密码。-i- 设置密码过期多少天以后禁用该用户。
4. 查看和修改密码有效期 - chage。
设置hellokitty用户100天后必须修改密码,过期前15天通知该用户,过期后7天禁用该用户。
chage -M 100 -W 15 -I 7 hellokitty
5. 切换用户 - su。
[root ~]# su hellokitty
[hellokitty root]$
6. 以管理员身份执行命令 - sudo。
[hellokitty ~]$ ls /root
ls: cannot open directory /root: Permission denied
[hellokitty ~]$ sudo ls /root
[sudo] password for hellokitty:
说明:如果希望用户能够以管理员身份执行命令,用户必须要出现在sudoers名单中,sudoers文件在 /etc目录下,如果希望直接编辑该文件也可以使用下面的命令。
7. 显示用户与用户组的信息 - id。
8. 给其他用户发消息 -write / wall。
发送方:
[root ~]# write hellokitty
Dinner is on me.
Call me at 6pm.
接收方:
[hellokitty ~]$
Message from root on pts/0 at 17:41 ...
Dinner is on me.
Call me at 6pm.
EOF
9. 查看/设置是否接收其他用户发送的消息 - mesg。
[hellokitty ~]$ mesg
is y
[hellokitty ~]$ mesg n
[hellokitty ~]$ mesg
is n
文件系统
文件和路径
- 命名规则:文件名的最大长度与文件系统类型有关,一般情况下,文件名不应该超过255个字符,虽然绝大多数的字符都可以用于文件名,但是最好使用英文大小写字母、数字、下划线、点这样的符号。文件名中虽然可以使用空格,但应该尽可能避免使用空格,否则在输入文件名时需要用将文件名放在双引号中或者通过``对空格进行转义。
- 扩展名:在Linux系统下文件的扩展名是可选的,但是使用扩展名有助于对文件内容的理解。有些应用程序要通过扩展名来识别文件,但是更多的应用程序并不依赖文件的扩展名,就像
file命令在识别文件时并不是依据扩展名来判定文件的类型。 - 隐藏文件:以点开头的文件在Linux系统中是隐藏文件(不可见文件)。
目录结构
1、/bin:存放系统最基本的用户命令(二进制可执行文件)
例如:ls、cp、mv、rm、cat等基础命令,所有用户都可以使用这些命令
2、/boot:包含系统启动所需的文件
包括:内核文件(vmlinuz)、引导加载程序(GRUB)、initramfs镜像等,不要轻易修改此目录内容
3、/dev:设备文件目录
包含所有硬件设备的特殊文件(设备文件,硬盘、键盘、U盘等都在这里)
4、/etc:系统配置文件目录
包含系统和应用程序的配置文件(重要子目录:/etc/sysconfig(系统配置)、/etc/init.d(服务脚本))
5、/home:普通用户的主目录
每个用户在此目录下有以用户名命名的子目录,包含用户的个人文件、配置和桌面环境设置
6、/lib 和 /lib64:系统库文件目录
/lib:32位系统库文件,/lib64:64位系统库文件,(包含系统运行所需的核心共享库和内核模块)
7、/media:可移动设备挂载点
自动挂载的CD-ROM、USB设备等通常挂载在此
8、/mnt:临时挂载文件系统的挂载点
管理员手动挂载设备时常用此目录
**9、/opt:可选应用程序安装目录
**通常用于安装第三方商业软件
10、/proc:虚拟文件系统,反映内核和进程信息
包含系统运行时的信息(如CPU、内存、进程等),文件内容动态生成,不占用实际磁盘空间
**11、/root:超级用户(root)的主目录
**普通用户无权限访问
12、/run:存放系统运行时的临时数据
如PID文件、套接字文件等,系统重启后内容会丢失
13、/sbin:系统管理命令目录
包含系统管理相关的二进制文件(如fdisk、ifconfig等),通常只有root用户才能执行这些命令
14、/srv:服务数据目录
存放系统服务提供的数据(如网站数据、FTP数据等)
15、/sys:虚拟文件系统,反映内核设备树
用于与内核交互,配置硬件设备,类似/proc,但更结构化
**16、/tmp:临时文件目录
**所有用户都可读写,系统重启后内容通常会被清除
**17、/usr:用户程序和数据目录
**包含大量子目录:
- /usr/bin:用户命令
- /usr/sbin:系统管理命令
- /usr/lib:库文件
- /usr/local:本地安装的软件
- /usr/share:架构无关的共享数据
- /usr/src:源代码
18、/var:可变数据目录
包含经常变化的文件:
- /var/log:系统日志
- /var/spool:队列数据(邮件、打印等)
- /var/cache:应用程序缓存
- /var/lib:应用程序状态信息
- /var/tmp:比/tmp更持久的临时文件
19、.readahead:预读文件,用于优化系统启动性能
记录系统启动时加载的文件,以便下次更快启动
访问权限
lrwxrwxrwx. 1 root root 7 6月 22 2021 bin -> usr/bin
├─ 文件类型与权限 │ 所有者 │ 所属组 │ 大小 │ 修改时间 │ 名称及目标
└─ l=符号链接 硬链接数 usr/bin的字节数
1. 文件类型与权限 (lrwxrwxrwx.)
| 部分 | 解析 |
|---|---|
l | 文件类型:符号链接(l=link),其他常见类型: - -:普通文件 - d:目录 - b/c:块设备/字符设备 |
rwxrwxrwx | 权限: - 前3位 rwx:所有者(root)权限 - 中3位 rwx:所属组(root)权限 - 后3位 rwx:其他用户权限 (符号链接的权限无实际意义,实际权限由目标文件决定) |
. | SELinux上下文标记:表示文件具有SELinux安全属性(可用 ls -Z查看) |
2. 硬链接计数 (1)
- 表示该文件的硬链接数量,符号链接固定为
1(硬链接计数仅统计指向同一inode的文件,符号链接是独立文件)。
3. 所有者 (root)
- 该符号链接文件的所有者是
root用户。
4. 所属组 (root)
- 该符号链接文件的所属组是
root用户组。
5. 文件大小 (7)
符号链接的大小是它指向的路径字符串的字节数:
echo -n "usr/bin" | wc -c # 输出 7
6-8. 最后修改时间 (6月 22 2021)
- 该符号链接的最后修改时间是 2021年6月22日(超过6个月显示年份,否则显示时间)。
9. 文件名与链接目标 (bin -> usr/bin)
| 部分 | 解析 |
|---|---|
bin | 符号链接的名称(在根目录下名为 bin) |
-> usr/bin | 指向的实际目标路径(即 /usr/bin目录) |
基本权限对应数字
| 权限字母 | 数字值 | 含义 |
|---|---|---|
| r | 4 | 读(Read) |
| w | 2 | 写(Write) |
| x | 1 | 执行(eXecute) |
| - | 0 | 无权限 |
常见权限数字对照表
| 数字 | 字母权限 | 含义 |
|---|---|---|
| 0 | --- | 无任何权限 |
| 1 | --x | 仅执行 |
| 2 | -w- | 仅写入 |
| 3 | -wx | 写入 + 执行(无读权限!) |
| 4 | r-- | 仅读取 |
| 5 | r-x | 读取 + 执行(常用目录权限) |
| 6 | rw- | 读取 + 写入(常见文件权限) |
| 7 | rwx | 完全控制(慎用,尤其是其他用户) |
改变文件或目录权限-chmod
chmod命令来自英文词组change mode的缩写,其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。
设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件,建议加入-R参数进行递归操作,这意味着不仅对于目录本身,而且也对目录内的子文件/目录进行新权限的设定。
语法格式:chmod 参数 文件名
常用参数:
-c 改变权限成功后再输出成功信息
--no-preserve-root 不特殊对待根目录
-f 改变权限失败后不显示错误信息
--preserve-root 禁止对根目录进行递归操作
-R 递归处理所有子文件
--reference 使用指定参考文件的权限
-v 显示执行过程详细信息
字母表达式解析表格
字母表达式的权限控制是通过以下三个字母来指定的:
- r: 读权限 (read)
- w: 写权限 (write)
- x: 执行权限 (execute)
权限类别
- u: 文件的所有者 (user)
- g: 文件的所属组 (group)
- o: 其他用户 (others)
- a: 所有用户 (all),包括所有者、组和其他用户
权限操作符
- + : 添加权限
- -: 移除权限
- =: 设置为特定权限,覆盖已有权限
权限的字母表达式表格
| 权限操作符 | 所有者 (u) | 组 (g) | 其他 (o) | 所有者、组和其他 (a) |
|---|---|---|---|---|
| r | 读权限 | 读权限 | 读权限 | 读权限 |
| w | 写权限 | 写权限 | 写权限 | 写权限 |
| x | 执行权限 | 执行权限 | 执行权限 | 执行权限 |
| + | 添加权限 | 添加权限 | 添加权限 | 添加权限 |
| - | 移除权限 | 移除权限 | 移除权限 | 移除权限 |
| = | 设置权限 | 设置权限 | 设置权限 | 设置权限 |
案例:使用 chmod 设置权限
# 赋予文件所有者读、写权限,组和其他用户只读权限
chmod u=rw,g=r,o=r myfile.txt
# 说明:
# 文件所有者 (user) 有 读 和 写 权限
# 文件所属组 (group) 和其他用户 (others) 只有 读 权限
案例 :增加执行权限给所有用户
chmod a+x myfile.sh
案例 :递归设置目录及其所有子文件/目录的权限
chmod -R u+rw,g+r,o+r /path/to/directory
磁盘管理
1、列出文件系统的磁盘使用状况 - df
[root@lw ~]# df
2、磁盘分区表操作 - fdisk。
fdisk的意思是固定磁盘(fixed disk)或格式化磁盘(format disk),该命令的功能是管理磁盘的分区信息。 fdisk命令可以用来对磁盘进行分区操作,用户可以根据实际情况对磁盘进行合理划分,这样后期挂载和使用时会方便很多。
语法格式:fdisk 参数 设备名
常用参数:
-b 设置每个分区的大小
-l 显示指定的外围设备分区表状态
-c 关闭DOS兼容模式
-s 显示指定的分区大小
-C 设置硬盘的柱面数量
-S 设置每个磁道的扇区数
-h 显示帮助信息
-u 以分区数目代替柱面数目
-H 设置硬盘的磁头数
-v 显示版本信息
fdisk -l
3、磁盘分区工具 - parted。
parted -l
4、格式化文件系统 - mkfs。
-t- 指定文件系统的类型。-c- 创建文件系统时检查磁盘损坏情况。-v- 显示详细信息。
mkfs -t ext4 -v /dev/sdb
5、文件系统检查 - fsck。
6、转换或拷贝文件 - dd。
7、挂载/卸载 - mount / umount。
8、创建/激活/关闭交换分区 - mkswap / swapon / swapoff。
编辑器 - vim
vim命令的功能是编辑文本内容,是Linux系统字符界面下最常用的文本编辑工具,能够编辑任何的ASCII格式的文件,可对内容进行创建、查找、替换、修改、删除、复制、粘贴等操作。编写文件时,无须担心目标文件是否存在,若不存在则会自动在内存中创建,并随保存操作输出到硬盘中。
Vim 有三种主要模式:
- 普通模式:用于浏览和操作文本,是默认模式。
- 插入模式:用于插入文本。
- 命令模式:用于执行保存、退出等命令。
启动 Vim
在终端中输入 vim 或 vim <filename> 启动 Vim。
退出 Vim
- 保存并退出:在普通模式下,输入
:wq或:x。 - 不保存退出:在普通模式下,输入
:q!。
切换模式
- 进入插入模式:按
i键,插入光标前;按a键,插入光标后。 - 返回普通模式:按
Esc键。 - 进入命令模式:按
:键。
基本编辑操作
- 移动光标:使用
h、j、k、l键分别向左、下、上、右移动光标。 - 删除字符:在普通模式下,按
x键删除光标所在字符。 - 撤销操作:按
u键撤销上一步操作。 - 重做操作:按
Ctrl-r键重做上一步撤销的操作。
高级操作
可视模式
可视模式用于选择文本,可以使用以下快捷键进入:
- 字符可视模式:按
v键,然后移动光标选择字符。 - 行可视模式:按
V键,然后移动光标选择行。 - 块可视模式:按
Ctrl-v键,然后移动光标选择块。
寄存器和剪切板
Vim 使用寄存器来存储文本,可以用来复制和粘贴:
- 复制(“yank”):按
y键。 - 粘贴:按
p键粘贴到光标后;按P键粘贴到光标前。 - 剪切(“delete”):按
d键。
查找和替换
- 查找:按
/键,然后输入要查找的文本,按Enter进行搜索。 - 替换:在命令模式下,输入
:s/旧文本/新文本/g替换当前行的所有匹配项。使用:%s/旧文本/新文本/g替换整个文件的所有匹配项。
多文件编辑
- 打开新文件:在命令模式下,输入
:e <filename>。 - 在多个文件之间切换:按
:n切换到下一个文件,按:prev切换到上一个文件。
软件安装和配置
使用包管理工具
- yum - Yellowdog Updater Modified。
-
yum search:搜索软件包,例如yum search nginx。yum list installed:列出已经安装的软件包,例如yum list installed | grep zlib。yum install:安装软件包,例如yum install nginx。yum remove:删除软件包,例如yum remove nginx。yum update:更新软件包,例如yum update可以更新所有软件包,而yum update tar只会更新tar。yum check-update:检查有哪些可以更新的软件包。yum info:显示软件包的相关信息,例如yum info nginx。
- rpm - Redhat Package Manager。
-
- 安装软件包:
rpm -ivh <packagename>.rpm。 - 移除软件包:
rpm -e <packagename>。 - 查询软件包:
rpm -qa,例如可以用rpm -qa | grep mysql来检查是否安装了MySQL相关的软件包。
- 安装软件包:
配置服务
我们可以Linux系统下安装和配置各种服务,也就是说我们可以把Linux系统打造成数据库服务器、Web服务器、缓存服务器、文件服务器、消息队列服务器等等。Linux下的大多数服务都被设置为守护进程(驻留在系统后台运行,但不会因为服务还在运行而导致Linux无法停止运行),所以我们安装的服务通常名字后面都有一个字母d,它是英文单词daemon的缩写,例如:防火墙服务叫firewalld,我们之前安装的MySQL服务叫mysqld,Apache服务器叫httpd等。在安装好服务之后,可以使用systemctl命令或service命令来完成对服务的启动、停止等操作,具体操作如下所示。
1、启动防火墙服务。
[root ~]# systemctl start firewalld
2、终止防火墙服务。
[root ~]# systemctl stop firewalld
3、重启防火墙服务。
[root ~]# systemctl restart firewalld
4、查看防火墙服务状态。
[root ~]# systemctl status firewalld
5、设置/禁用防火墙服务开机自启。
[root ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
网络访问和管理
1. 安全远程连接 - ssh。
[root ~]$ ssh root@222.222.222.222
2. 通过网络获取资源 - wget。
-
- -b 后台下载模式
- -O 下载到指定的目录
- -r 递归下载
3. 发送和接收邮件 - mail。
4. 网络配置工具(旧) - ifconfig。
[root ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.61.250 netmask 255.255.240.0 broadcast 172.18.63.255
ether 00:16:3e:02:b6:46 txqueuelen 1000 (Ethernet)
RX packets 1067841 bytes 1296732947 (1.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 409912 bytes 43569163 (41.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions
5. 网络配置工具(新) - ip。
[root@lw ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:29:08:1b brd ff:ff:ff:ff:ff:ff
inet 192.168.142.130/24 brd 192.168.142.255 scope global dynamic noprefixroute ens160
valid_lft 1028sec preferred_lft 1028sec
inet6 fe80::52c6:3d2e:7f8b:ce28/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:54:b3:60 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:54:b3:60 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:da:31:e4:45 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
6. 网络可达性检查 - ping。
[root ~]# ping www.baidu.com -c 3
PING www.a.shifen.com (220.181.111.188) 56(84) bytes of data.
64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=1 ttl=51 time=36.3 ms
64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=2 ttl=51 time=36.4 ms
64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=3 ttl=51 time=36.4 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 36.392/36.406/36.427/0.156 ms
7. 显示或管理路由表 - route。
8. 查看网络服务和端口 - netstat / ss。
[root ~]# netstat -nap | grep nginx
9. 网络监听抓包 - tcpdump。
10. 安全文件拷贝 - scp。
11. 文件同步工具 - rsync。
说明:使用rsync可以实现文件的自动同步,这个对于文件服务器来说相当重要。关于这个命令的用法,我们在后面讲项目部署的时候为大家详细说明。
12. 安全文件传输 - sftp。
[root ~]# sftp root@1.2.3.4
root@1.2.3.4's password:
Connected to 1.2.3.4.
sftp>
-
help:显示帮助信息。ls/lls:显示远端/本地目录列表。cd/lcd:切换远端/本地路径。mkdir/lmkdir:创建远端/本地目录。pwd/lpwd:显示远端/本地当前工作目录。get:下载文件。put:上传文件。rm:删除远端文件。bye/exit/quit:退出sftp。
进程管理
1. 查看进程 - ps。
[root ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun23 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 Jun23 ? 00:00:00 [kthreadd]
...
[root ~]# ps -ef | grep mysqld
root 4943 4581 0 22:45 pts/0 00:00:00 grep --color=auto mysqld
mysql 25257 1 0 Jun25 ? 00:00:39 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
2. 显示进程状态树 - pstree。
[root@lw ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─sedispatch
│ └─2*[{auditd}]
├─avahi-daemon───avahi-daemon
├─chronyd
├─colord───2*[{colord}]
├─containerd───13*[{containerd}]
├─crond
├─cupsd
├─dbus-daemon───{dbus-daemon}
├─dnsmasq───dnsmasq
├─dockerd───11*[{dockerd}]
├─firewalld───{firewalld}
├─gdm─┬─gdm-session-wor─┬─gdm-wayland-ses─┬─dbus-run-sessio─┬─dbus-daemon───{dbus-daemon}
│ │ │ │ └─gnome-session-b─┬─gnome-shell─┬─Xwayland───20*[{Xwayland}]
│ │ │ │ │ ├─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engin+ │ │ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ │ └─31*[{gnome-shell}]
│ │ │ │ ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
│ │ │ │ ├─gsd-color───3*[{gsd-color}]
│ │ │ │ ├─gsd-datetime───2*[{gsd-datetime}]
│ │ │ │ ├─gsd-housekeepin───2*[{gsd-housekeepin}]
│ │ │ │ ├─gsd-keyboard───3*[{gsd-keyboard}]
│ │ │ │ ├─gsd-media-keys───3*[{gsd-media-keys}]
│ │ │ │ ├─gsd-power───3*[{gsd-power}]
│ │ │ │ ├─gsd-print-notif───2*[{gsd-print-notif}]
│ │ │ │ ├─gsd-rfkill───2*[{gsd-rfkill}]
│ │ │ │ ├─gsd-screensaver───2*[{gsd-screensaver}]
│ │ │ │ ├─gsd-sharing───3*[{gsd-sharing}]
│ │ │ │ ├─gsd-smartcard───5*[{gsd-smartcard}]
│ │ │ │ ├─gsd-sound───3*[{gsd-sound}]
│ │ │ │ ├─gsd-wacom───3*[{gsd-wacom}]
│ │ │ │ └─3*[{gnome-session-b}]
│ │ │ └─2*[{gdm-wayland-ses}]
│ │ └─2*[{gdm-session-wor}]
│ └─2*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-portal───2*[{ibus-portal}]
├─ibus-x11───22*[{ibus-x11}]
├─irqbalance───{irqbalance}
├─ksmtuned───sleep
├─lsmd
├─mcelog
├─packagekitd───2*[{packagekitd}]
├─polkitd───11*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd───sshd───sshd───bash───pstree
├─sssd─┬─sssd_be
│ └─sssd_nss
├─systemd─┬─(sd-pam)
│ ├─dbus-daemon───{dbus-daemon}
│ ├─gvfsd───2*[{gvfsd}]
│ └─gvfsd-fuse───5*[{gvfsd-fuse}]
├─systemd─┬─(sd-pam)
│ ├─dbus-daemon───{dbus-daemon}
│ └─pulseaudio───2*[{pulseaudio}]
├─systemd-journal
├─systemd-logind
├─systemd-machine
├─systemd-udevd
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───2*[{vmtoolsd}]
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
3. 查找与指定条件匹配的进程 - pgrep。
[root ~]$ pgrep mysqld
3584
4. 通过进程号终止进程 - kill。
[root ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root ~]# kill 1234
[root ~]# kill -9 1234
5. 通过进程名终止进程 - killall / pkill。
结束名为mysqld的进程。
[root ~]# pkill mysqld
结束hellokitty用户的所有进程。
[root ~]# pkill -u hellokitty
说明:这样的操作会让hellokitty用户和服务器断开连接。
6. 将进程置于后台运行。
-
Ctrl+Z- 快捷键,用于停止进程并置于后台。&- 将进程置于后台运行。
[root ~]# mongod &
[root ~]# redis-server
...
^Z
[4]+ Stopped redis-server
7. 查询后台进程 - jobs。
[root ~]# jobs
[2] Running mongod &
[3]- Stopped cat
[4]+ Stopped redis-server
8. 让进程在后台继续运行 - bg。
[root ~]# bg %4
[4]+ redis-server &
[root ~]# jobs
[2] Running mongod &
[3]+ Stopped cat
[4]- Running redis-server &
9. 将后台进程置于前台 - fg。
[root ~]# fg %4
redis-server
说明:置于前台的进程可以使用Ctrl+C来终止它。
10. 调整程序/进程运行时优先级 - nice / renice。
11. 用户登出后进程继续工作 - nohup。
[root ~]# nohup ping www.baidu.com > result.txt &
12. 跟踪进程系统调用情况 - strace。
[root ~]# pgrep mysqld
8803
[root ~]# strace -c -p 8803
strace: Process 8803 attached
^Cstrace: Process 8803 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.18 0.005719 5719 1 restart_syscall
0.49 0.000028 28 1 mprotect
0.24 0.000014 14 1 clone
0.05 0.000003 3 1 mmap
0.03 0.000002 2 1 accept
------ ----------- ----------- --------- --------- ----------------
100.00 0.005766 5 total
说明:这个命令的用法和参数都比较复杂,建议大家在真正用到这个命令的时候再根据实际需要进行了解。
13. 查看当前运行级别 - runlevel。
[root ~]# runlevel
N 3
14. 实时监控进程占用资源状况 - top。
-
-c- 显示进程的整个路径。-d- 指定两次刷屏之间的间隔时间(秒为单位)。-i- 不显示闲置进程或僵尸进程。-p- 显示指定进程的信息。
系统诊断
1. 系统启动异常诊断 - dmesg。
2. 查看系统活动信息 - sar。
-
-A- 显示所有设备(CPU、内存、磁盘)的运行状况。-u- 显示所有CPU的负载情况。-d- 显示所有磁盘的使用情况。-r- 显示内存的使用情况。-n- 显示网络运行状态。
3. 查看内存使用情况 - free。
[root ~]# free
total used free shared buff/cache available
Mem: 1016168 323924 190452 356 501792 531800
Swap: 0 0 0
4. 虚拟内存统计 - vmstat。
[root ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 204020 79036 667532 0 0 5 18 101 58 1 0 99 0 0
5. CPU信息统计 - mpstat。
[root ~]# mpstat
Linux 3.10.0-957.5.1.el7.x86_64 (iZ8vba0s66jjlfmo601w4xZ) 05/30/2019 _x86_64_ (1 CPU)
01:51:54 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01:51:54 AM all 0.71 0.00 0.17 0.04 0.00 0.00 0.00 0.00 0.00 99.07
6. 查看进程使用内存状况 - pmap。
[root ~]# ps
PID TTY TIME CMD
4581 pts/0 00:00:00 bash
5664 pts/0 00:00:00 ps
[root ~]# pmap 4581
4581: -bash
0000000000400000 884K r-x-- bash
00000000006dc000 4K r---- bash
00000000006dd000 36K rw--- bash
00000000006e6000 24K rw--- [ anon ]
0000000001de0000 400K rw--- [ anon ]
00007f82fe805000 48K r-x-- libnss_files-2.17.so
00007f82fe811000 2044K ----- libnss_files-2.17.so
...
7. 报告设备CPU和I/O统计信息 - iostat。
[root ~]# iostat
Linux 3.10.0-693.11.1.el7.x86_64 (iZwz97tbgo9lkabnat2lo8Z) 06/26/2018 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.79 0.00 0.20 0.04 0.00 98.97
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.85 6.78 21.32 2106565 6623024
vdb 0.00 0.01 0.00 2088 0
8. 显示所有PCI设备 - lspci。
[root ~]# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:04.0 Communication controller: Red Hat, Inc. Virtio console
00:05.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:06.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:07.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
9. 显示进程间通信设施的状态 - ipcs。
[root ~]# ipcs
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems