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 8

tail:查看文件尾部内容

# 输出文件最后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 --color

head:查看文件头部内容

# 显示文件前1行
head -n 1

# 显示文件除了最后1行外的所有内容
head -n -1

# 显示文件前5个字节
head -c 5

4. 流编辑器: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/g

5. 字符转换与参数传递: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 file

xargs:参数传递过滤器

xargs 用于将标准输入的数据转换成命令行参数。

# 杀死所有 redis 相关进程
ps -ef | grep 'redis' | awk '{print $2}' | xargs kill -9

# 将文件内容每两行合并为一行输出
xargs -n2 < filename

6. 系统信息与配置:版本、名字、时区

查看系统版本

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
  • Tomcat 时区修正:可在 catalina.shJAVA_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 -w

7. 脚本解释器

查看系统可用的 Shell

cat /etc/shells

解释器声明(Shebang)

脚本文件的第一行用于指定解释器。

#!/bin/bash
  • 如果直接运行脚本 ./hello.py,则需要在文件内写 #!/bin/python 声明。
  • 如果通过解释器命令运行 python hello.py,则脚本内不需要写声明。

示例:查看 yum 的解释器

which yum            # 查看 yum 命令的路径
cat /usr/bin/yum     # 查看文件内容,第一行是 #!/usr/bin/python

8. 计划任务: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/crontab

crontab 文件格式

分 时 日 月 星 用户 命令

标签: none

仅有一条评论

  1. 欢迎加入 Typecho 大家族

添加新评论