ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CentOS 7 入门:常用命令、管道与重定向实战手册

CentOS 7 入门:常用命令、管道与重定向实战手册 适用读者刚接触 CentOS 7 / Linux想从图形界面思维切换到命令行思维的同学。验证环境Bash GNU coreutils与 CentOS 7.9 行为一致文中所有输出均为真实执行结果。一、前言维护 Linux 服务器基本都是通过 SSH 连进终端干活——没有图形界面鼠标也基本用不上。这时候常用命令是你手里的零件重定向决定数据往哪去存进文件、丢弃还是当作另一个命令的输入管道决定数据怎么流把一个个零件串成流水线。学完这篇你能独立写出并完全看懂下面这条组合技awk {print $1} access.log | sort | uniq -c | sort -rn | head -3 小知识CentOS 7 已于 2024 年 6 月 30 日停止维护EOL。学习命令完全不受影响如果是新上生产环境建议选择 Rocky Linux / AlmaLinux 等继任发行版常用命令与 CentOS 7 几乎完全一致。二、入门常用命令速查先送三个效率外挂能少打一半的字Tab 键自动补全命令和文件名连按两次列出候选↑ / ↓翻历史命令history查看全部CtrlC终止当前命令CtrlL清屏想深入学某个命令就man 命令或命令 --help。2.1 文件与目录操作命令作用常用示例pwd显示当前目录pwdls列出内容ls -lh大小人性化、ls -a含隐藏文件cd切换目录cd /etc、cd ..、cd ~、cd -回到上次目录mkdir创建目录mkdir -p /data/{backup,logs}递归 批量touch新建空文件touch a.txtcp复制cp -a /etc/hosts /tmp/hosts.bak保留属性mv移动 / 改名mv old.log old.log.bakrm删除rm -f 文件rm -rf 目录慎用pwd ls -l --time-stylelong-iso输出示例/root total 4 -rw-r--r--. 1 root root 108K Oct 6 10:00 access.log drwxr-xr-x. 2 root root 6 Oct 6 10:00 logs2.2 查看文件内容命令作用典型场景cat整个文件输出到屏幕小文件more / less分页浏览大文件less 里可/关键字搜索、q退出head看前 N 行head -20 a.logtail看后 N 行tail -100 a.logtail -f a.log实时追踪日志wc统计行数 / 单词数 / 字节数wc -l a.logtail -f /var/log/messages # 实时滚动查看系统日志CtrlC 退出 wc -l /etc/passwd # 输出形如23 /etc/passwd2.3 查找三件套which / find / grepwhich python # 找命令装在哪/usr/bin/python find /var/log -name *.log -mtime 7 # 7 天前修改过的 .log 文件 find / -type f -size 500M 2/dev/null # 全盘找大于 500M 的文件 grep -rn Failed password /var/log/secure # 递归搜索文件内容-n 显示行号留意第三条里的2/dev/null普通用户 find 系统目录时会刷一屏 “Permission denied”把它们丢进黑洞只留结果——这正是第三章要讲的重定向。2.4 系统状态查看ps -ef | head -5 # 进程快照这里已经用上管道了 top # 动态监控P 按 CPU 排序、M 按内存、q 退出 free -h # 内存使用 df -h # 各分区磁盘使用率 du -sh /var/log # 某个目录的总大小 ss -tlnp # 正在监听的端口CentOS 7 推荐netstat 需另装 net-tools2.5 CentOS 7 特色systemd 时代与 CentOS 6 相比CentOS 7 用 systemd 取代了 init服务与防火墙命令也换了名字功能CentOS 6CentOS 7启停服务service nginx startsystemctl start nginx开机自启chkconfig nginx onsystemctl enable nginx防火墙iptablesfirewall-cmdsystemctl status sshd # 查看服务状态 systemctl enable --now nginx # 设为开机自启并立刻启动 firewall-cmd --permanent --add-port8080/tcp # 放行端口 firewall-cmd --reload journalctl -u nginx --since today # 查看 nginx 今天的日志三、重定向决定数据往哪去3.1 先认识三条水管每条命令启动时Linux 都自动为它打开三个数据流名称代号默认接在哪标准输入stdin0键盘标准输出stdout1屏幕标准错误stderr2屏幕重定向就是把这些水管的接口改接到别处。一张图建立直觉┌── 0 stdin ←── 键盘 / 文件 / 上一个命令 命令 ──────┼── 1 stdout ──→ 屏幕 / 文件 / 下一个命令 └── 2 stderr ──→ 屏幕 / 文件3.2 输出重定向覆盖追加echo hello a.txt # 覆盖写入文件不存在则创建 echo world a.txt # 追加写入 cat a.txt输出hello world⚠️会先清空目标文件再写入。对重要配置文件误用内容直接没了多数情况下救不回来。拿不准就用。3.3 错误重定向2、21、stdout1和 stderr2是两条独立水管只改道 1 号错误信息照样打到屏幕ls /etc/hosts /no-such-file out.txt此时屏幕上仍然出现ls: cannot access /no-such-file: No such file or directory而 out.txt 里只有成功的结果/etc/hosts想连错误一起收进文件三种常用写法# ① 经典写法先把 1 号管接到 all.txt再把 2 号管接到 1 号管指向的地方 ls /etc/hosts /no-such-file all.txt 21 # ② bash 简写效果同上 ls /etc/hosts /no-such-file all.txt # ③ 正确与错误分开存放 ls /etc/hosts /no-such-file ok.txt 2 err.txt实测写法 ① 后cat all.txtls: cannot access /no-such-file: No such file or directory/etc/hosts两个高频坑顺序不能颠倒cmd 21 file是先把 2 号管接到1 号管当前的去向屏幕再把 1 号管改到 file——结果错误依然在屏幕上。记住接管子按从左到右的顺序进行。追加要两边一起想追加时写成cmd f 21错误才会跟着追加进文件。另外/dev/null是黑洞设备写进去的全部丢弃find / -type f -size 500M 2/dev/null # 只要结果不要报错 cmd /dev/null 21 # 屏幕完全安静定时任务脚本常客3.4 输入重定向与 Here Documentwc -l /etc/passwd # 23把文件当 stdin 喂给 wc对比 wc -l /etc/passwd输出不带文件名 mysql -uroot -p dbname dump.sql # 恢复数据库的经典姿势Here Document一次喂多行内容写配置文件特别顺手cat /etc/yum.repos.d/local.repo EOF [local] nameLocal Repo baseurlfile:///mnt/cdrom enabled1 gpgcheck0 EOFEOF加引号表示内容不做变量替换、原样写入——写脚本时值得保持的好习惯。3.5 tee既上屏又存档有个缺点输出进了文件屏幕上啥也看不见。tee像三通管接头一路继续流向屏幕一路存进文件ls -lh | tee dir.txt # 屏幕照常显示同时写入 dir.txt ping -c 3 www.baidu.com | tee -a ping.log # -a 表示追加四、管道把命令串成流水线4.1 管道是什么命令1 | 命令2把命令 1 的标准输出实时接到命令 2 的标准输入。两侧同时启动、边生产边消费还能继续往后接cat access.log │ grep 500 │ wc -l 取数据 过滤 计数相比先落盘再处理管道不产生中间文件、内存占用小、速度快——它是 Unix 哲学每个程序只做好一件事的直接体现。4.2 流水线上的常用工人命令作用常用示例grep按关键字 / 正则过滤grep ERROR app.log、grep -v grep排除自身sort排序-n按数值、-r逆序、-h认识 108K/2.9M/120Muniq相邻去重、计数通常先sort再uniq -chead / tail截取头尾head -10、tail -3awk按列取值 / 加工awk {print $1}取第一列xargs把输入变成命令参数…tee分流存档…4.3 组合小示范# 各目录/文件占用空间排行 du -sh * | sort -rh | head -5 # 谁在监听 22 端口 ss -tlnp | grep :22 # 内存占用前 3 的进程第一行是表头 ps aux --sort-%mem | head -4五、新手避坑指南误覆盖重要文件一律优先可在当前会话执行set -o noclobber让拒绝覆盖已存在的文件确要覆盖时用|。顺序陷阱cmd 21 file收不到错误正确写法cmd file 21——接管子从左到右。sudo 与重定向sudo echo x /etc/sysctl.conf报 Permission denied。因为是你自己的 shell完成的sudo 只提升了 echo。正确姿势echo x | sudo tee /etc/sysctl.conf。tail -f | grep 不刷新加--line-buffered。脚本中判断管道成败cmd1 | cmd2默认只看 cmd2 的退出码写严谨的脚本时开头加set -o pipefail。文件名带空格find ... -print0 | xargs -0才安全普通xargs会被空格拆散。六、速查表 练习题重定向与管道速查表需求写法覆盖 / 追加到文件cmd f/cmd f正确 错误一起写cmd f 21或cmd f丢弃输出与错误cmd /dev/null 21文件作为输入cmd f多行内容写文件cat f EOF … EOF上屏同时存档cmd | tee f追加加-a过滤关键字cmd | grep 关键字统计行数cmd | wc -l频次排行cmd | sort | uniq -c | sort -rn | head把输出当参数cmd | xargs 命令练习题动手才算真的会统计/etc/passwd中登录 shell 为/bin/bash的用户数量。一条命令统计系统里与 sshd 相关的进程数并把结果写入sshd_count.txt提示注意排除 grep 自身。找出/var/log下大于 10M 的文件清单存入big.log报错信息不要显示。参考答案先自己敲再展开# 1 grep /bin/bash /etc/passwd | wc -l # 2 ps aux | grep sshd | grep -v grep | wc -l sshd_count.txt # 3 find /var/log -type f -size 10M big.log 2/dev/null七、总结回看全文其实就三句话命令是零件——ls、grep、awk 各司其职重定向是阀门——、、2、决定数据去哪管道是流水线——|把零件组装成生产线。每天带着真实需求练一条组合命令比如今天的日志、明天的磁盘两周就能形成肌肉记忆。下一篇可以进阶 awk / sed 文本三剑客与 Shell 脚本把这些流水线固化成一键执行。
返回列表