当前位置: 首页 > article >正文

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


http://www.kler.cn/a/598253.html

相关文章:

  • Spring Boot(十七):集成和使用Redis
  • Java面试黄金宝典9
  • 在Linux、Windows系统上安装开源InfluxDB——InfluxDB OSS v2并设置开机自启的保姆级图文教程
  • 用selenium+ChromeDriver爬取知乎评论区(但要求登录以及反爬机制爬不到数据)
  • 【菜鸟飞】AI多模态:vsCode下python访问阿里云通义文生图API
  • 使用Python和PyTorch实现了一个简单的生成对抗网络(GAN)用于生成应力值图像
  • 正则表达式基本语法和Java中的简单使用
  • fastapi 实践(三)Swagger Docs
  • STM32基础教程——PWM驱动LED呼吸灯
  • AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅
  • 【Jwt】详解认证登录的数字签名
  • 牛客网【模板】二维差分(详解)c++
  • 【JavaEE】网络编程socket
  • Java学习路线(便于理解)
  • PostgreSQL_数据使用与日数据分享
  • C语言-访问者模式详解与实践
  • Enovia许可分析的自动化解决方案
  • 程序代码篇---Pyqt的密码界面
  • Agent TARS开源多模态 AI 代理的革命性突破
  • B树和 B+树