嵌入式必学Shell命令精讲:文件与权限操作实战
嵌入式必学Shell命令精讲文件与权限操作实战在嵌入式Linux的世界里没有右键新建文件这种操作。一切靠命令行这不是装酷是效率。掌握文件与权限相关命令是踏入Linux开发大门的第一步。一、Shell是什么先搞清楚概念Shell是用户与Linux内核之间的翻译官。你在终端输入的每一条命令Shell负责解析后交给内核执行。常见的Shell有bash、zsh、sh等Ubuntu默认使用bash。打开终端快捷键CtrlAltT你会看到类似这样的提示符userubuntu:~$user当前用户名ubuntu主机名~当前所在目录~表示用户家目录$普通用户提示符root用户显示#二、目录导航命令2.1 pwd — 我在哪pwd# 输出示例/home/userpwdPrint Working Directory打印当前工作目录的绝对路径。刚接触Linux时经常不知道自己在文件系统的哪个位置pwd随时帮你确认。2.2 ls — 看看有什么ls是最常用的命令之一用于列出目录内容。# 基本用法ls# 列出当前目录文件不显示隐藏文件ls-l# 长格式显示权限、大小、时间等详细信息ls-a# 显示所有文件包括以.开头的隐藏文件ls-lh# 人性化显示文件大小KB/MB/GBls-lt# 按修改时间排序最新的在前ls-R# 递归列出子目录内容ls/etc# 列出指定目录内容组合使用是最常见的ls-alh/home/user-l输出的每一行含义解读这是必须看懂的drwxr-xr-x 2 user user 4096 Jul 10 10:00 Documents │└──┬──┘ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 文件名 │ │ │ │ │ │ └─ 最后修改时间 │ │ │ │ │ └─ 文件大小字节 │ │ │ │ └─ 所属组 │ │ │ └─ 所有者 │ │ └─ 硬链接数 │ └─ 权限信息 └─ 文件类型d目录-普通文件l链接文件权限部分的rwxr-xr-x分三组所有者(u) | 所属组(g) | 其他人(o)r读(4)、w写(2)、x执行(1)。2.3 cd — 移动到别的目录cd/home/user/Documents# 切换到绝对路径cdDocuments# 切换到相对路径当前目录下的Documentscd~# 回到用户家目录cd-# 回到上一次所在的目录cd..# 返回上一级目录cd../..# 返回上两级目录小白避坑Linux路径用正斜杠/不是Windows的反斜杠\。Tab键可以自动补全路径省时省力。三、文件操作命令3.1 mkdir — 创建目录mkdirproject# 在当前目录下创建project目录mkdir-pproject/src/driver# 递归创建多级目录-p parentsmkdirdir1 dir2 dir3# 一次创建多个目录3.2 touch — 创建空文件touchmain.c# 创建空文件main.ctouchfile1.c file2.c file3.c# 创建多个文件touchmain.c# 如果文件已存在更新修改时间3.3 cp — 复制文件或目录cpmain.c backup.c# 复制文件cpmain.c /tmp/# 复制到其他目录保持原名cpmain.c /tmp/main_backup.c# 复制到其他目录并重命名cp-rproject /tmp/# 递归复制目录-r recursive必须有cp-imain.c backup.c# 交互模式覆盖前询问确认cp-vmain.c backup.c# 显示复制过程注意复制目录时-r参数不可省略否则会报错。3.4 mv — 移动或重命名mv有两个功能移动文件、重命名文件。# 重命名mvold_name.c new_name.c# 将文件重命名mvproject /tmp/myproject# 移动并重命名# 移动mvmain.c /tmp/# 移动文件到/tmp目录mv-imain.c /tmp/# 覆盖前确认mv-umain.c /tmp/# 仅在源文件比目标文件新时才移动3.5 rm — 删除文件这是Linux中最危险的命令之一没有回收站。rmmain.c# 删除文件rm-imain.c# 删除前确认rm-rproject# 递归删除目录及内容rm-rfproject# 强制递归删除不询问rm*.o# 删除所有.o文件编译产生的目标文件血泪警告永远不要执行rm -rf /这会删除整个系统。执行rm -rf前务必确认路径正确。尤其注意通配符rm -rf *在错误目录下执行后果不堪设想。3.6 文件查看命令速览命令用途常用示例cat查看文件全部内容cat /etc/hostnameless分页查看大文件less /var/log/sysloghead查看文件开头head -n 20 main.ctail查看文件末尾tail -f /var/log/syslog实时追踪wc统计行数/单词数wc -l main.c四、文件权限管理4.1 chmod — 修改文件权限权限可以用字母法或数字法两种方式设置。字母法直观适合新手# u所有者 g组 o其他 a全部chmodux script.sh# 给所有者添加执行权限chmodg-w config.txt# 去掉组的写权限chmodor file.txt# 设置其他人为只读chmodar file.txt# 所有人可读chmodux,gw script.sh# 组合操作数字法简洁老手常用r4 w2 x1 权限 对应值之和 rwx 421 7 r-x 401 5 r-- 400 4chmod755script.sh# rwxr-xr-x所有者可读写执行其他人可读可执行chmod644config.txt# rw-r--r--所有者可读写其他人只读chmod777test.sh# rwxrwxrwx所有人可读写执行不安全慎用chmod-R755project/# 递归修改目录及子文件权限嵌入式开发中最常见的场景——给脚本添加执行权限chmodx build.sh# 最常用的写法./build.sh# 然后才能直接执行4.2 chown — 修改文件所有者sudochownuser:group file.txt# 同时修改所有者和所属组sudochownuser file.txt# 只修改所有者sudochown:group file.txt# 只修改所属组sudochown-Ruser:group project/# 递归修改目录实际开发中常见的场景——从开发板拷贝文件后权限不对# 将整个项目目录的所有权改为当前用户sudochown-R$USER:$USER~/project/4.3 chgrp — 修改文件所属组sudochgrpdevelopers project/# 修改所属组sudochgrp-Rdevelopers project/# 递归修改4.4 权限实战场景场景1编译后的程序无法运行gcc-ohello hello.c ./hello# bash: ./hello: Permission denied# 原因缺少执行权限chmodx hello ./hello# 正常运行场景2共享目录权限设置# 创建共享目录让开发组所有成员都能读写sudomkdir/opt/sharedsudochown:developers /opt/sharedsudochmod770/opt/shared# 仅开发组成员可读写执行五、文件查找命令5.1 find — 强大的文件搜索find/home-name*.c# 按文件名查找所有.c文件find.-namemain*# 在当前目录查找以main开头的文件find/etc-name*.conf-typef# 只查找普通文件find.-size10M# 查找大于10MB的文件find.-mtime-7# 查找7天内修改过的文件find.-name*.o-delete# 查找并删除所有.o文件清理编译产物5.2 grep — 文本搜索grepTODOmain.c# 在文件中搜索TODOgrep-rCONFIG_DEBUG/src/# 递归搜索目录grep-ierrorlog.txt# 忽略大小写搜索grep-nmainmain.c# 显示行号grep-rnprintk/driver/# 递归行号最常用组合六、总结文件与权限操作是Linux开发的基石。ls看文件、cd切目录、cp/mv/rm做文件管理、chmod/chown管权限——这组命令每天都会用上百遍。建议在虚拟机里反复练习直到形成肌肉记忆。记住命令行玩得溜嵌入式开发效率翻倍。