Linux 命令与系统管理笔记
Linux 命令与系统管理笔记
1. 基础命令与通配符:echo, touch, rm
范围表示法
[]:使用横杠-表示范围,例如[1-10]。{}:使用两个点..表示范围,例如{1..10}。
示例
# 输出数字 1 到 10 echo {1..10} # 创建 1.txt 到 10.txt 共10个文件 touch {1..10}.txt # rm 命令可以使用 [] 或 {} 来匹配范围 rm {1..10} rm [1-10]
2. 文件查找命令:find
find 命令用于在目录树中查找文件。
基本用法与常用选项
# 在用户家目录下查找名为 qq.txt 的文件
find ~ -type f -name "qq.txt"
# 常用选项
-type f # 查找文件类型为普通文件
-maxdepth 1 # 指定最大搜索深度为1层
-mindepth 1 # 指定最小搜索深度为1层
-perm 644 # 查找权限为644的文件
-iname # 查找时忽略文件名大小写
-exec # 对找到的文件执行后续命令结合操作:删除、复制、打包
删除找到的文件
# 方法1:使用 -delete 选项
find ~ -type f -name "newfile*txt" -delete
# 方法2:使用 -exec
find ~ -type f -name "newfile*txt" -exec rm -rf {} \;
# 方法3:使用 xargs
find ~ -type f -name "newfile*txt" | xargs rm -rf
# 方法4:使用命令替换 $()
rm -rf $(find ~ -type f -name "newfile*txt")复制找到的文件
# 将找到的文件复制到 ~/testdir 目录
find ~ -type f -name "newfile*.txt" -exec cp {} ~/testdir \;打包找到的文件
# 使用 xargs 将找到的文件打包
find ~/ -type f -name "newfile*txt" | xargs tar -zcvf ~/boom.tar.gz高级查找
根据 inode 查找硬链接文件
find ~ -type f -inum 394668根据时间查找
-mtime:文件内容修改时间-atime:文件访问时间-ctime:文件状态改变时间# 7天以前的文件 find ~ -type f -mtime +7 # 最近7天的文件 find ~ -type f -mtime -7 # 正好是第7天的文件 find ~ -type f -mtime 7
3. 文本处理与过滤:grep, awk, wc, sort, tail, head
grep:文本搜索
# 统计包含关键字的行数
grep -c "keyword" filename
# 排除注释行(以#开头)和空行
cat config.yaml | grep -v "^#" | sed '/^$/d'
# 排除任意空行(包括带空格的空行)和注释行
cat nginx.conf | grep -Ev "^[[:space:]]*#|^$"awk:文本与数据处理
# 筛选并显示某一列(例如,显示docker容器的ID和名称)
docker ps -a | awk '{print $1, $2}'
# 直接显示IP地址(取 ifconfig 输出的第二行,第二个字段)
ifconfig ens192 | awk 'NR==2{print $2}'wc:统计命令
-c:统计字节数-l:统计行数-w:统计字数-m:统计字符数-L:打印最长行的长度
sort:排序命令
# 以冒号分隔,按第3列数值降序排序 /etc/passwd 文件
sort -t ':' -k 3 -r /etc/passwd
# -t 指定分隔符,-k 指定列,-r 降序(默认升序)组合应用
# 查看目录占用情况,按大小从大到小排序
du -h -d 1 | sort -hr
# 查看进程占用内存,按占用从大到小排序,显示最大的8个进程
ps aux | sort -gr -k 4 | head -n 8tail:查看文件尾部内容
# 输出文件最后5行
tail -n 5 filename
# 在日志文件最后1000行中查找关键字,并显示匹配行及之后10行
tail -n 1000 logfile | grep key -A 10
# 查找关键字及其前10行
tail -n 1000 logfile | grep key -B 10
# 实时查看日志,高亮显示新增的 "key"
tail -f logfile | grep key --colorhead:查看文件头部内容
# 显示文件前1行
head -n 1
# 显示文件除了最后1行外的所有内容
head -n -1
# 显示文件前5个字节
head -c 54. 流编辑器:sed
sed 是一个强大的流式文本编辑器。
基本操作:显示、删除、替换、插入
# 显示第一行,显示最后一行
sed -n '1p'
sed -n '$p'
# 查看 passwd 文件的第5到第8行内容
sed -n '5,8 p' passwd
# 对每行匹配到的第一个字符串进行替换(-i 直接修改文件)
sed -i 's/原字符串/新字符串/' ab.txt
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt
# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d' ab.txt
# 在特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt
# 在特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' ab.txt
# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt
# 在文件 ab.txt 中的末行之后,添加 "bye"
sed -i '$a bye' ab.txt
# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt
# 去掉文件 tt.txt 每行开头的空格
sed -i "s/^[[:space:]]*//g" tt.txt
# 删除匹配内容的行(不修改原文件,仅输出)
sed '/test/d' test.txt实用案例
# Windows 下用 sed 修改 hosts 文件(需在管理员权限的 cmd 或 PowerShell 中运行)
cd c: && sed -i s/^39/"#\ 39"/ C:\Windows\System32\drivers\etc\hosts
notepad "C:\Windows\System32\drivers\etc\hosts"Vim 中的替换
" 从第一行到最后一行,将 "aa" 替换为 "bb"
:1,$s/aa/bb/g5. 字符转换与参数传递:tr, sed, xargs
tr:字符转换
# 将文件内容中的小写字母转换为大写
cat /aaa/file1 | tr 'a-z' 'A-Z'
# 将文件内容中的大写字母转换为小写
cat /aaa/file1 | tr 'A-Z' 'a-z'sed:流编辑器
# 将文件中所有行的 "原字符" 替换为 "替换字符"
sed 's/原字符/替换字符/g' file
# 应用多个编辑策略
sed -e '策略1' -e '策略2' file
# 只替换第3到第5行的内容
sed '3,5s/原字符/替换字符/g'
# 屏蔽、复制、显示指定行
sed xd # 屏蔽指定行
sed -e xp # 复制指定行
sed -n xp # 只显示指定的行
# 危险动作:直接修改文件
sed -i filexargs:参数传递过滤器
xargs 用于将标准输入的数据转换成命令行参数。
# 杀死所有 redis 相关进程
ps -ef | grep 'redis' | awk '{print $2}' | xargs kill -9
# 将文件内容每两行合并为一行输出
xargs -n2 < filename6. 系统信息与配置:版本、名字、时区
查看系统版本
cat /etc/redhat-release
uname -a
cat /proc/version修改主机名
# 临时修改,重启后恢复
hostname z
# 永久修改(重启后生效)
hostnamectl set-hostname z
# 或直接编辑文件
vim /etc/hostname
vim /etc/hosts # 修改 127.0.0.1 对应的主机名
/etc/init.d/network restart时区与时间管理
查看时间与时区
# 查看系统时间
date
# 查看时区
date -R
# 查看硬件时间
clock修改时区
# 方法1(推荐):创建软链接
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 方法2:使用 tzselect 工具(步骤繁琐)
tzselect # 依次选择 5 -> 9 -> 1
vim /etc/profile
# 添加 TZ='Asia/Shanghai'; export TZ
source /etc/profile
# 需要退出重新登录同步时间
# 安装 ntpdate 并同步阿里云时间服务器
yum install ntpdate -y
ntpdate -u ntp.aliyun.com解决 Docker 容器时区问题
# 将宿主机的上海时区文件复制到容器内
docker cp /usr/share/zoneinfo/Asia/Shanghai <容器ID>:/usr/share/zoneinfo/Asia/
# 然后进入容器,创建软链接
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime不同系统时区控制文件
- CentOS:
/etc/localtime - Debian/Ubuntu:
/etc/timezone
- CentOS:
- Tomcat 时区修正:可在
catalina.sh的JAVA_OPTS中添加-Duser.timezone=GMT+08
硬件时间与系统时间同步
# 查看系统时间
date
# 修改系统时间
date -s "2018-2-22 19:10:30"
# 查看硬件时间
hwclock --show
# 修改硬件时间
hwclock --set --date "2018-2-22 19:10:30"
# 将硬件时间同步到系统时间
hwclock --hctosys
# 将系统时间同步到硬件时钟
clock -w7. 脚本解释器
查看系统可用的 Shell
cat /etc/shells解释器声明(Shebang)
脚本文件的第一行用于指定解释器。
#!/bin/bash- 如果直接运行脚本
./hello.py,则需要在文件内写#!/bin/python声明。 - 如果通过解释器命令运行
python hello.py,则脚本内不需要写声明。
示例:查看 yum 的解释器
which yum # 查看 yum 命令的路径
cat /usr/bin/yum # 查看文件内容,第一行是 #!/usr/bin/python8. 计划任务:at, crond
at:一次性计划任务
# 安装 at
yum install at -y
# 查看当前待执行的 at 任务
at -l
# 2分钟后执行命令(输入命令后按 Ctrl+D 保存退出)
at now + 2min
# batch 命令:系统不繁忙时自动执行,用法与 at 类似crond:周期性计划任务
# 检查 crond 服务状态
systemctl status crond
# 编辑系统级计划任务文件
vim /etc/crontabcrontab 文件格式
分 时 日 月 星 用户 命令
欢迎加入 Typecho 大家族