Linux 基础命令系列(一)

紧接《CentOS 7.9.2009 服务器“体检”速查表》查看服务器基本状态

用户,目录,权限

1. 新建用户组

# 1. 创建业务组,GID 从 2000+ 开始,避免与系统组冲突
groupadd -g 2000 log

# 2. 如需后续改组名,可重用 -n 选项,把log  改为logn 
groupmod -n logn log 

# 3. 查看系统当前所有组
cat /etc/group | grep -E '^logn|wheel'

# 4. 删除空组(无用户将其作为主组)
groupdel log

已有用户追加到附加组(不覆盖)
usermod -aG docker,logn log001 ## 把 log001 加入 docker、logn 两个附加组
从组里移除(如需)
gpasswd -d log001 logn 

2. 给用户组赋予权限

在 Linux 里,“权限”直接作用对象是文件/目录,而不是“组”本身。
因此“给用户组赋予权限”的真实步骤是:
把目录或文件的属组改成目标组;
给这个组打上读/写/执行位;
需要时加 SGID 或 ACL,让后续文件继承或更细粒度控制。

场景 1:组只读,其他人没权限

chown root:logn /home/logs  # 只有 root 能写,logn 组可读可进目录,其他人完全禁止。
chmod 750 /home/logs     # rwxr-x---
777 与 rwx的关系

750 就是 “把 rwx 拆成 3 段数字”,每段对应 owner|group|other 的 读-4 写-2 执行-1 累加和。

  • 数字→字母对照表
权限 字母 分值 二进制位
r 4 100
w 2 010
执行 x 1 001

7 = 4+2+1 = rwx → 属主(owner)
5 = 4+0+1 = r-x → 属组(group)
0 = 0+0+0 = — → 其他人(other)

  • 常见“三位数”速查
数字 字母 场景
777 rwxrwxrwx 开放过度,永远不要给
755 rwxr-xr-x 可执行脚本、目录浏览
750 rwxr-x— 组内读/进,其他人看不见 ← 本文推荐
700 rwx------ 仅自己可见,私钥、备份
644 rw-r–r– 普通文本文件
600 rw------- 敏感文件,如 ~/.ssh/id_rsa

3. 新建用户:最小权限原则

# 1. 创建用户 & 家目录
useradd -m -s /bin/bash log001
-m 强制创建家目录;-s 指定登录 Shell,用户执行cd ~ 会进入/home/log001 目录下

# 2. 设密码(交互式)
passwd log001
交互式修改密码;root 可改任意用户,普通用户只能改自己。

# 3. 把用户加入常用附加组(举例)
usermod -aG wheel,nginx log001# wheel 用于 sudo,nginx 组方便看日志

# 4. 创建用户并加入logn组
useradd -m -s /bin/bash -G logn log001

易踩坑

  • -m 导致 没有家目录~ 会变成 /

2. 目录与授权:让日志可“读”不可“写”

# 1. 创建项目目录,包括多个层级,多个目录
mkdir -p /var/log/webapp /opt/webapp/{conf,scripts}

# 2. 目录授权:本人全权限,组只读,其它人无权限
chown -R alice:nginx /opt/webapp
chmod -R 750 /opt/webapp

# 3. 日志目录允许组内读
chown -R log001:logn /var/log/webapp
chmod -R 750 /var/log/webapp

小技巧

  • chmod 2750 dirSGID 位,以后该目录下新建文件自动继承目录属组,方便多人协作。

3. 切换身份 & 定位目录

# 1. 完整登录式 Shell(加载 ~/.bash_profile)
su - log001

# 2. 看我在哪,shell当前的目录
pwd

# 3. 一键到日志目录
cd /var/log/webapp

易踩坑

  • su alice 不加 - 会保留原环境变量,PATH 可能找不到自定义脚本。

4. ps:先把“现场”拍下来

# 1. 经典全格式,带树状关系
ps auxf
# 2. 只看某用户进程
ps -U alice -f
# 3. 把结果存文件,待会儿 less 着看
ps -ef > /tmp/ps_snapshot.log
# 4. 查看所有java相关的进程
ps -ef|grep java  ( System-V 风格)
ps auxf|grep java (BSD 风格)
 # 5. 一眼看“谁最吃 CPU”——静态快照,前5
ps auxf --sort=-%cpu | head -5

选项速记

  • a 所有终端 u 用户格式 x 无终端进程;
  • -f 全格式,能看到 PPID,方便追溯父进程。

5. grep:大海捞“针”

参数 全称记忆 作用 一句话示例
-i ignore-case 忽略大小写 grep -i error *.log
-n number 显示行号 grep -n 'timeout' config.yml
-c count 只统计匹配行数 grep -c '^200' access.log
-e regexp 多模式(或关系) grep -e 500 -e 404 *.log
-a binary-as-text 把二进制当文本 grep -a 'PNG' image.bin
-b byte-offset 打印匹配字节偏移 grep -b 'password' dump.bin
# 在文件中精确查找关键字seq0000001 
grep seq0000001 /var/log/messages 

# 1. 忽略大小写,显示行号,高亮关键词 . E正则扩展同时查找error和fatal,i不区分大小写,n显示行号
grep -Ein 'error|fatal' /var/log/messages

# 2. 递归目录,只列文件名 R递归,l显示文件名称
grep -Ril 'OutOfMemory' /opt/webapp/logs/

# 3. 结合 ps 实时过滤 (ps -ef 查找所有进程,并排除自身grep 命令,筛选出ngixn相关进程)
ps -ef | grep -v grep | grep nginx

进阶组合

  • grep -C 3 'Exception' 把匹配行的 上下 3 行 一起输出,方便看堆栈。

6. less:可回滚、可搜索、不加载全文

# 1. 直接查看大文件
less /var/log/webapp/app.log

# 2. 打开即定位到 50% 位置
less +50p app.log

# 3. 打开后搜索
#    /ERROR    向下搜
#    ?ERROR    向上搜
#    n / N     下一个/上一个匹配
#    F         实时模式(像 tail -f)

快捷键一图流
空格 下一屏、b 上一屏、g 首页、G 尾页、q 退出。


7. tail:盯紧“尾巴”

# 1. 看最后 200 行
tail -n 200 app.log

# 2. 实时追踪新增(最常用的 -f)
tail -f app.log

# 3. 多文件同时追
tail -f /var/log/{messages,dmesg,app.log}

进阶技巧

  • tail -F 文件被 rotate 后自动 reopen,适合日志切割场景。
  • grep 联动,只刷 ERROR:
    tail -F app.log | grep --line-buffered ERROR

8. 一条龙实战:定位“狂刷日志”的进程

# 1. 找到最吃 CPU 的 Java 进程
ps -eo pid,ppid,%cpu,cmd | grep java | sort -k3 -nr | head

# 2. 假设 PID 是 12345,看它打开的文件(含日志)
lsof -p 12345 | grep '.log'

# 3. 实时盯该日志,只看 ERROR 或 Exception
tail -F /opt/webapp/logs/stdout.log | grep -E 'ERROR|Exception' --line-buffered | tee review.log

解释:
tee 一边屏幕输出,一边落盘,后续可 less review.log 慢慢复盘。


9. 小结

命令 典型场景 务必记住的选项
ps 拍“现场快照” auxf / -ef
grep 过滤/定位关键字 -i 忽略大小写,-C 上下文 ,-E 正则匹配
less 静态/可搜索/可回滚 F 实时模式,/关键词 搜索,n/N 前后一个,g/G第一行最后一行
tail 实时刷日志 -F 日志轮替场景更稳

下一篇《基础命令系列(二)》玩一玩 findxargsawksort | uniq -c,把“查找 + 统计 + 格式化”一条龙打通。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐