Linux基础命令与权限笔记

这篇内容整理自我的 Linux 学习笔记,重点放在靶场和日常渗透测试最常用的命令上。

一、终端与身份

echo

  • 作用:输出文本。
  • 示例:echo "hello"

whoami

  • 作用:查看当前登录用户。
  • 示例:whoami

二、目录与文件浏览

ls

  • 作用:列出目录内容。
  • 常用参数:
  • -l:长列表显示(权限、属主、大小、时间)
  • -a:显示隐藏文件
  • -h:配合 -l 友好显示大小
  • -t:按修改时间排序
  • -S:按文件大小排序
  • -R:递归显示子目录

cd

  • 作用:切换目录。
  • 常用写法:
  • cd 目录名:进入目录
  • cd ..:返回上级
  • cd ~cd:回到家目录
  • cd -:返回上一次目录

pwd

  • 作用:显示当前完整路径。
  • 示例:pwd

cat

  • 作用:查看文件内容。
  • 常用参数:
  • -n:显示行号
  • -b:仅给非空行编号
  • -s:压缩连续空行
  • -A:显示特殊字符

三、文件查找与过滤

find

  • 作用:按名称、类型、大小、时间、权限等条件查找文件。
  • 使用提醒:
  • 如果不写起始路径,通常默认从当前目录 . 开始查找
  • -name "*.log" 这类模式建议加引号,避免被 shell 先展开
  • 在靶场里经常会配合 2>/dev/null 屏蔽无权限访问报错
  • 常用示例:
    1
    2
    3
    4
    5
    6
    7
    8
    find . -name "*.log"
    find . -iname "*.jpg"
    find . -type f -size +10M
    find . -mtime -1
    find . -perm 644
    find . -name "*.log" -exec ls -lh {} \;
    find / -perm -4000 2>/dev/null
    find . -type f -name "*.conf" -exec grep -Hn "password" {} \; 2>/dev/null

grep

  • 作用:文本过滤与模式匹配。
  • 常用参数:
  • -i 忽略大小写
  • -n 显示行号
  • -r 递归搜索
  • -v 反向匹配
  • -c 统计匹配行数
  • -E 扩展正则
  • -R 递归搜索并跟随符号链接
  • -A/-B/-C 显示匹配前后文
  • 使用提醒:
  • -r-R 很像,但 -R 会更积极地跟随符号链接
  • 脚本里要注意退出码:匹配到是 0,未匹配到是 1,出错是 2
  • 常用示例:
    1
    2
    3
    4
    5
    6
    grep -i "error" app.log
    grep -rn "password" .
    grep -v "^#" config.txt
    grep -E "error|warning" app.log
    grep -Rni --include="*.conf" "password" /etc
    grep -A 2 -B 2 "failed" auth.log

wc

  • 作用:统计文件信息。
  • 示例:wc -l access.log(统计行数)

按时间查看最近修改的文件

  • 按 GNU Coreutils 手册,标准 POSIX 文件通常至少有 3 个时间戳:
  • atime:最后访问时间
  • mtime:最后内容修改时间
  • ctime:最后元数据状态变化时间
  • 有些文件系统还支持第 4 个时间:birth time(创建时间)

常用查看方法:

1
2
3
4
5
6
7
8
9
10
11
12
ls -lt
ls -lt --time=ctime
ls -ltu
ls -lt --time-style=long-iso
ls -lt --time-style=full-iso
stat note.txt
stat -c '%n %x %y %z %w' note.txt
find . -type f -mmin -60
find . -type f -mtime -1
find . -daystart -type f -mtime 1
find . -newermt "2026-03-01"
find . -newer ref.txt

  • 补充理解:
  • ls -lt 默认按 mtime 排序,最新修改的文件排在最前面
  • ls -lt --time=ctime 更适合看权限、属主、重命名等元数据变化
  • ls -ltu 按访问时间看最近被读取过的文件
  • --time-style=long-isofull-iso 比默认时间格式更适合排查问题
  • stat -c '%n %x %y %z %w' 可以一次看文件名、访问时间、修改时间、状态变化时间和创建时间
  • find -mtime 0 的含义是“不到 24 小时前修改”,-mtime 1 是“24 到 48 小时前修改”
  • find -mmin 适合更细粒度的分钟级筛选
  • -daystart 会把计算基准改成今天 00:00,更适合查“昨天改过的文件”
  • -newermt 可以直接按一个时间点筛选,-newer 则是拿参考文件做比较

四、重定向与连接符

  • Linux 命令通常围绕 3 个标准流工作:
  • stdin:标准输入(文件描述符 0
  • stdout:标准输出(文件描述符 1
  • stderr:标准错误(文件描述符 2
  • >:覆盖写入文件
  • >>:追加写入文件
  • <:从文件读取输入
  • 2>:只重定向错误输出
  • 2>/dev/null:丢弃错误信息
  • > file 2>&1:把标准输出和错误输出写入同一个文件
  • &&:前一条成功才执行后一条
  • ;:无论前一条是否成功都继续执行
  • &:命令放后台运行

示例:

1
2
3
4
5
6
7
cat < note.txt
echo "hey" > note.txt
echo "new line" >> note.txt
mkdir test && cd test
find / -name "*.conf" 2>/dev/null
grep -Rni "error" . > result.log 2>&1
python3 -m http.server &

  • 补充理解:
  • Bash 会按从左到右处理重定向,所以 cmd >file 2>&1cmd 2>&1 >file 结果不同
  • 做信息收集时,2>/dev/null 很常见,可以减少权限报错对刷屏的影响

五、常用文件操作命令

touch

  • 作用:创建空文件或更新时间戳。
  • 常用参数:
  • -a:只改访问时间 atime
  • -m:只改修改时间 mtime
  • -d "时间":使用指定时间
  • -t [[cc]yy]mmddhhmm[.ss]:使用固定时间格式
  • -r 参考文件:复制参考文件的时间戳
  • -c:只改已有文件,不创建新文件
  • 常用示例:
    1
    2
    3
    4
    5
    6
    7
    touch note.txt
    touch -m report.txt
    touch -a access.log
    touch -d "2026-03-29 12:00:00" note.txt
    touch -t 202603291200.00 note.txt
    touch -r ref.txt target.txt
    touch -c existing.txt
  • 补充理解:
  • 默认情况下,touch 会把文件时间戳设为当前时间
  • 按 GNU Coreutils 手册,touch 可以直接修改的是 atimemtime
  • ctime 不能被手动指定为任意值,birth time 也不能通过 touch 修改
  • touch 会按参数从左到右处理文件,所以前后两个文件的最终时间戳可能会有极小差异

mkdir

  • 作用:创建目录。
  • 常用示例:mkdir -p a/b/c

cp

  • 作用:复制文件或目录。
  • 常用示例:
    1
    2
    3
    cp file1.txt file2.txt
    cp -r dir1 backup/
    cp -av src/ dst/

mv

  • 作用:移动或重命名文件。
  • 示例:
    1
    2
    mv old.txt new.txt
    mv file.txt docs/

rm

  • 作用:删除文件或目录。
  • 常用示例:
    1
    2
    3
    4
    5
    rm file.txt
    rm -r old_dir
    rm -rf temp/
    rm -I temp/*
    rm -- -f
  • 注意:rm -rf 风险极高,务必确认路径。
  • 补充说明:
  • rm -I 会在大批量或递归删除前先进行一次确认
  • 如果文件名本身以 - 开头,可以用 -- 终止选项解析

file

  • 作用:识别文件类型(文本、二进制、脚本、压缩包等)。
  • 示例:file sample.bin

stat

  • 作用:查看文件的详细元数据,包括大小、权限、inode 和时间戳。
  • 常用示例:
    1
    2
    stat note.txt
    stat -c '%n %s %A %x %y %z %w' note.txt
  • 补充理解:
  • %x 是最后访问时间 atime
  • %y 是最后内容修改时间 mtime
  • %z 是最后状态变化时间 ctime
  • %w 是创建时间;如果文件系统不支持,通常会显示 -

六、Linux权限模型

使用 ls -l 可看到如下权限位:

  • 第 1 个字符表示文件类型:
  • -:普通文件
  • d:目录
  • l:符号链接
  • p:命名管道
  • s:套接字
  • 前三位:所有者(Owner)
  • 中三位:用户组(Group)
  • 后三位:其他用户(Others)

权限值:

  • r 读(4)
  • w 写(2)
  • x 执行(1)

常见权限组合:

  • 777:所有用户可读可写可执行
  • 755:属主可写,其他只读可执行
  • 700:仅属主可访问
  • 644:属主读写,其他只读

目录权限需要单独理解:

  • 目录的 r:可以列出目录内容
  • 目录的 w:可以在目录中创建、删除、重命名条目
  • 目录的 x:可以进入目录并访问其中对象

补充说明:

  • 所以“目录可写”和“文件可写”不是一回事
  • 如果 ls -l 权限串后面出现 +.,通常说明还有 ACL 或安全上下文,不只是简单的 9 位 rwx

七、chmodsuumask

chmod

  • 作用:修改文件权限。
  • 示例:

    1
    2
    3
    4
    5
    6
    chmod 755 script.sh
    chmod 644 note.txt
    chmod 750 system_overview.txt
    chmod u+x script.sh
    chmod g-w notes.md
    chmod go-rwx private.txt
  • 补充理解:

  • 数字法适合一次性整体设置,例如 755644
  • 符号法更适合精细修改,只改某一部分权限,不会把其他位一起覆盖
  • 对目录来说,除了普通 rwx 外,还可能涉及 setgid 等特殊位

常见特殊权限位:

  • setuid
  • setgid
  • sticky bit
  • 典型例子:/tmp 常见权限为 1777

su

  • 作用:切换用户身份。
  • 常见用法:
    1
    2
    3
    su user2
    su - user2
    su -c "whoami" user2
  • 说明:su - 会使用目标用户的登录环境,更接近真实登录状态。

umask

  • 作用:控制新建文件和目录的默认权限。
  • 常见用法:
    1
    2
    3
    umask
    umask -S
    umask 022
  • 理解方式:
  • umask 022 的核心含义是去掉 group 和 other 的写权限
  • 新目录常见结果是 755
  • 新普通文件常见结果是 644

八、学习建议(靶场向)

  • 先掌握目录与文件操作:ls/cd/pwd/cat
  • 再掌握检索与过滤:find/grep/wc
  • 最后重点理解权限和身份切换:chmod/su/umask
  • 任何危险命令(如 rm -rf)执行前先 pwd 确认路径

如果你也在刷 TryHackMe,建议把每次机器里用到的命令按“信息收集 -> 利用 -> 提权”三段整理,复盘效率会高很多。