Linux常用命令与权限理解总结
1. 文件系统导航命令(核心详解)
ls - 列出目录内容
ls 是最常用的命令之一,用于显示目录内容。
常用选项详解:
- ls -l:长格式显示,包含文件的详细信息
-rw-r--r-- 1 user group 2048 May 15 14:30 example.txt
权限 所有者所属组
文件大小(字节)
修改日期 文件名
- ls -a:显示所有文件,包括以点(.)开头的隐藏文件
- ls -h:以人类可读的格式显示文件大小(KB、MB、GB)
- ls -t:按修改时间排序,最新的在前
- ls -S:按文件大小排序,最大的在前
- ls -R:递归显示子目录内容
- ls -i:显示文件的索引节点号(inode)
cd - 更改目录
cd 用于在文件系统中导航。
详细用法:
- cd /path/to/directory:切换到指定绝对路径
- cd directory:切换到当前目录下的子目录
- cd ~ :切换到当前用户的主目录
- cd .. :切换到上一级目录
- cd ../.. :向上切换两级目录
- cd - :切换到上一个工作目录(在两个目录间快速切换很有用)
- cd ~username:切换到指定用户的主目录
技巧:
- 使用Tab键自动补全路径
- 使用通配符匹配目录:cd /home/user/Documents/2023*
mkdir - 创建目录
mkdir 用于创建新的目录。
详细用法:
- mkdir dir1:创建单个目录
- mkdir dir1 dir2 dir3:一次创建多个目录
- mkdir -p a/b/c/d:创建嵌套目录结构,即使父目录不存在
- mkdir -m 755 directory:创建目录并设置权限
# 为项目创建完整的目录结构
mkdir -p project/{src,docs,tests}/{main,utils}# 这会创建如下结构:
# project/
# ├── src/
# │ ├── main/
# │ └── utils/
# ├── docs/
# │ ├── main/
# │ └── utils/
# └── tests/
# ├── main/
# └── utils/
2. 文件操作命令详解
cp - 复制文件和目录
cp 用于复制文件和目录。
详细用法:
- cp file1 file2:将file1复制为file2
- cp file1 file2 directory/:将多个文件复制到目录
- cp -r dir1 dir2:递归复制目录(如果dir2不存在则创建,否则dir1将被复制到dir2内)
- cp -a source dest:归档模式,保留所有文件属性(权限、时间戳等)
- cp -u file1 file2:只在source比destination新或destination不存在时才复制
- cp -i file1 file2:交互模式,覆盖前提示
- cp -v file1 file2:显示复制过程
实际场景:
# 备份配置文件
cp -a /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak# 将整个项目目录复制到新位置,保留所有属性
cp -av ~/projects/webapp /var/www/
rm - 删除文件和目录
rm 用于删除文件和目录,使用需谨慎。
详细用法:
- rm file:删除单个文件
- rm file1 file2:删除多个文件
- rm -r directory:递归删除目录及其内容
- rm -f file:强制删除,不提示
- rm -i file:交互式删除,每个文件都提示确认
- rm -rf directory:强制递归删除目录(危险命令,使用须谨慎)
安全实践:
- 使用 rm -i 养成确认删除的习惯
- 创建别名增加安全性:alias rm='rm -i'
- 对于重要系统目录,避免使用 rm -rf 并检查命令是否有输入错误
grep - 搜索文本内容
grep 是强大的文本搜索工具,用于在文件中查找指定模式。
详细用法:
- grep "pattern" filename:在文件中搜索模式
- grep -r "pattern" directory/:递归搜索目录中的所有文件
- grep -i "pattern" filename:忽略大小写搜索
- grep -v "pattern" filename:反向匹配,显示不包含模式的行
- grep -n "pattern" filename:显示匹配行及其行号
- grep -w "word" filename:只匹配整个单词
- grep -A 3 "pattern" filename:显示匹配行及其后3行
- grep -B 2 "pattern" filename:显示匹配行及其前2行
- grep -C 1 "pattern" filename:显示匹配行及其前后各1行
- grep -E "pattern1|pattern2" filename:使用扩展正则表达式匹配多个模式
# 在所有日志文件中查找错误信息
grep -i "error" /var/log/*.log# 查找所有包含特定函数的Java文件
grep -r "public static void main" --include="*.java" ~/projects/# 在配置文件中查找非注释行和非空行
grep -v "^#\|^$" /etc/ssh/sshd_config# 统计文件中特定单词出现的次数
grep -o "searchterm" file.txt | wc -l
3. 文件权限管理详解
chmod - 更改文件权限
chmod 用于更改文件或目录的访问权限。
权限理解:
每个文件或目录的权限由9个位组成,分为3组,每组3位:
- 所有者权限 (u): r(4) w(2) x(1)
- 所属组权限 (g): r(4) w(2) x(1)
- 其他用户权限 (o): r(4) w(2) x(1)
数字表示法中,每组权限的值为各个权限数值之和。例如,rwx = 4+2+1 = 7。
详细用法:
- 数字模式:
- chmod 755 file:设置权限为 rwxr-xr-x(所有者可读写执行,组和其他用户可读执行)
- chmod 644 file:设置权限为 rw-r--r--(所有者可读写,组和其他用户只读)
- chmod 600 file:设置权限为 rw-------(仅所有者可读写)
- chmod 777 file:设置权限为 rwxrwxrwx(所有用户都有全部权限,通常不推荐)
- 符号模式:
- chmod u+x file:给所有者添加执行权限
- chmod g-w file:从组中移除写权限
- chmod o=r file:设置其他用户只有读权限
- chmod a+r file:给所有用户添加读权限(a代表all)
- chmod u+x,g+x,o-rwx file:给所有者和组添加执行权限,移除其他用户所有权限
- 递归更改:
- chmod -R 755 directory/:递归更改目录及其内容的权限
常见场景和权限:
- 脚本文件:chmod 755 script.sh(可执行脚本)
- 配置文件:chmod 644 config.txt(只有所有者可写)
- 私钥文件:chmod 600 id_rsa(只有所有者可读写)
- Web目录:chmod -R 755 /var/www/html(所有者完全控制,其他人可读执行)
- 共享目录:chmod -R 775 /shared(所有者和组成员可写,其他人只读)
特殊权限位:
- SUID (4000):chmod u+s file,执行时具有所有者权限
- SGID (2000):chmod g+s directory,目录中创建的新文件继承目录组
- Sticky Bit (1000):chmod +t directory,防止用户删除其他用户的文件
chown - 更改文件所有者和组
chown 用于更改文件或目录的所有者和所属组。
详细用法:
- chown user file:更改文件所有者
- chown user:group file:同时更改所有者和组
- chown :group file:只更改组(等同于chgrp)
- chown -R user:group directory/:递归更改目录及其内容的所有者和组
实际应用:
# 修改web文件所有权
sudo chown -R www-data:www-data /var/www/html/# 将用户主目录下的所有文件转移给新用户
sudo chown -R newuser:newuser /home/olduser/# 更改应用数据目录所有权
sudo chown -R mongodb:mongodb /var/lib/mongodb/
4. 文本处理命令详解
cat, less, tail - 文件查看
这些命令用于查看文件内容,各有不同用途。
cat 详解:
- cat file:查看整个文件内容
- cat -n file:显示行号
- cat -b file:显示非空行的行号
- cat file1 file2 > file3:合并文件
- cat >> file:追加内容到文件(交互式)
less 详解:(交互式文件查看器)
- less file:分页查看文件
- 主要导航键:
- 空格/Page Down:向下翻页
- b/Page Up:向上翻页
- /pattern:向下搜索
- ?pattern:向上搜索
- n/N:下一个/上一个匹配
- g:跳到文件开头
- G:跳到文件末尾
- q:退出
tail 详解:
- tail file:显示文件最后10行
- tail -n 20 file:显示文件最后20行
- tail -f file:实时显示文件末尾追加的内容(监控日志文件)
- tail -f -n 100 file:显示最后100行并持续监控
- tail -f file | grep "error":实时过滤日志中的错误信息
实际应用场景:
# 查看多个配置文件的组合
cat /etc/issue /etc/hostname /etc/hosts# 监控网站访问日志中的HTTP错误
tail -f /var/log/nginx/access.log | grep "HTTP/1.1\" [45]"# 在大型日志文件中搜索和导航
less +G /var/log/syslog # 打开并直接跳到文件末尾
find - 查找文件
find 是强大的文件搜索工具,可以通过多种条件查找文件。
详细用法:
- 按名称搜索:
- find /path -name "filename":查找指定名称的文件
- find /path -iname "filename":忽略大小写查找
- find /path -name "*.txt":使用通配符查找
- 按类型搜索:
- find /path -type f:查找普通文件
- find /path -type d:查找目录
- find /path -type l:查找符号链接
- 按时间搜索:
- find /path -mtime -7:7天内修改过的文件
- find /path -mtime +30:30天前修改的文件
- find /path -mmin -60:60分钟内修改的文件
- 按大小搜索:
- find /path -size +10M:大于10MB的文件
- find /path -size -1k:小于1KB的文件
- 按权限搜索:
- find /path -perm 644:查找权限为644的文件
- find /path -perm -u+x:查找所有者有执行权限的文件
- 组合搜索:
- find /path -name "*.log" -size +100M:查找大于100MB的日志文件
- find /path -type f -not -name "*.txt":查找不是.txt的文件
- 查找并执行操作:
- find /path -name "*.tmp" -exec rm {} \;:查找并删除临时文件
- find /path -type f -mtime +90 -delete:删除90天前的文件
- find /path -name "*.jpg" -exec chmod 644 {} \;:修改所有JPG文件权限
实际应用:
# 查找系统中的大文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5hr# 查找并压缩旧日志文件
find /var/log -name "*.log" -mtime +30 -exec gzip {} \;# 查找特定用户的文件
find /home -user username -type f -name "*.conf"# 查找空目录
find /path -type d -empty