NuttX命令行文件和目录操作完全指南
NuttX命令行文件和目录操作完全指南NSH Shell实战详解引言在 NuttX 嵌入式操作系统中NuttShellNSH是一个功能强大的命令行界面提供了丰富的文件和目录操作命令。这些命令类似于 Linux shell 中的常用命令但针对嵌入式环境进行了优化。本文将以 SIM 板卡为实例详细介绍 NuttX NSH 中常用的文件和目录操作命令帮助你快速掌握嵌入式环境下的文件管理技能。一、环境准备1.1 启动 SIM 模拟器# 加载 SIM:NSH 配置cdnuttx ./tools/configure.sh sim:nsh# 编译makecleanmake-j$(nproc)# 运行模拟器./nuttx启动后会进入 NSH 命令行界面NuttShell (NSH) NuttX-12.10.0 nsh1.2 查看可用命令nshhelp会显示所有可用的命令列表其中文件和目录相关的命令包括. cd echo hexdump mkfatfs pwd source unset [ cp exec kill mkrd readlink test usleep ? cmp exit losetup mount rm time xd basename dirname false ln mv rmdir true break dd free ls poweroff set uname cat df help mkdir ps sleep umount二、目录操作命令2.1pwd- 显示当前工作目录功能Print Working Directory显示当前所在的绝对路径语法pwd示例nshpwd/2.2cd- 切换工作目录功能Change Directory切换到指定目录语法cd[dir-path|-|~|..]参数说明形式说明cd dir-path切换到指定路径cd -切换到上一次工作目录$OLDPWDcd或cd ~切换到 home 目录默认为 /cd ..切换到父目录示例nshcd/tmp nshpwd/tmp nshcd..nshpwd/ nshcd- nshpwd/tmp2.3ls- 列出目录内容功能List列出目录中的文件和子目录语法ls[-R][-s][-l][-a][dir-path]参数说明参数说明-R递归显示所有子目录内容-s显示文件大小-l长格式显示包含权限、大小、时间等-a显示所有文件包括隐藏文件示例# 列出根目录内容nshls/: dev/ etc/ proc/ tmp/ usr/# 长格式显示nshls-l/: drwxr-xr-x1000dev/ drwxr-xr-x1000etc/ drwxr-xr-x1000proc/ drwxrwxrwx1000tmp/ drwxr-xr-x1000usr/# 递归显示nshls-R/tmp /tmp: /tmp:2.4mkdir- 创建目录功能Make Directory创建新目录语法mkdir[-p]dir-path参数说明参数说明-p递归创建父目录如果不存在示例# 创建单个目录nshmkdir/tmp/test nshls/tmp /tmp: test/# 递归创建多级目录nshmkdir-p/tmp/a/b/c nshls-R/tmp/a /tmp/a: b/ /tmp/a/b: c/ /tmp/a/b/c:2.5rmdir- 删除目录功能Remove Directory删除空目录语法rmdirdir-path示例# 删除空目录nshrmdir/tmp/test nshls/tmp /tmp: a/# 删除非空目录会失败nshrmdir/tmp/a nsh: rmdir:/tmp/ais not empty2.6basename- 提取文件名功能提取路径中的文件名部分语法basenamepath[suffix]示例nshbasename/tmp/test/file.txt file.txt nshbasename/tmp/test/file.txt .txtfilenshbasename/tmp/test/test2.7dirname- 提取目录路径功能提取路径中的目录部分语法dirnamepath示例nshdirname/tmp/test/file.txt /tmp/test nshdirname/tmp/test/ /tmp三、文件操作命令3.1cat- 查看文件内容功能Concatenate显示文件全部内容语法catpath[path...]示例# 创建测试文件nshechoHello NuttX!/tmp/hello.txt# 查看文件内容nshcat/tmp/hello.txt Hello NuttX!# 查看多个文件nshcat/tmp/hello.txt /etc/passwd Hello NuttX!root:x:0:0:root:/:/bin/sh3.2touch- 创建或更新文件时间戳功能创建空文件或更新文件的访问/修改时间语法touchpath示例# 创建空文件nshtouch/tmp/empty.txt nshls-l/tmp/empty.txt -rw-r--r--1000/tmp/empty.txt# 更新已存在文件的时间戳nshtouch/tmp/hello.txt3.3cp- 复制文件功能Copy复制文件或目录语法cp[-f]src-pathdst-path参数说明参数说明-f强制覆盖目标文件示例# 复制文件nshcp/tmp/hello.txt /tmp/hello_copy.txt nshcat/tmp/hello_copy.txt Hello NuttX!# 复制到目录nshmkdir/tmp/documents nshcp/tmp/hello.txt /tmp/documents/ nshls/tmp/documents/ /tmp/documents/: hello.txt3.4mv- 移动或重命名文件功能Move移动文件/目录或重命名语法mvsrc-pathdst-path示例# 重命名文件nshmv/tmp/hello.txt /tmp/greeting.txt nshcat/tmp/greeting.txt Hello NuttX!# 移动文件到目录nshmv/tmp/greeting.txt /tmp/documents/ nshls/tmp/documents/ /tmp/documents/: greeting.txt hello.txt3.5rm- 删除文件功能Remove删除文件或目录语法rm[-f][-r]path参数说明参数说明-f强制删除不提示-r递归删除目录及其内容示例# 删除单个文件nshrm/tmp/empty.txt nshls/tmp/empty.txt nsh: ls:/tmp/empty.txt:No suchfileor directory# 强制删除nshrm-f/tmp/nonexistent.txt# 递归删除目录nshrm-r/tmp/a nshls/tmp/a nsh: ls:/tmp/a:No suchfileor directory3.6ln- 创建链接功能Link创建硬链接或符号链接语法ln[-s]targetlink-name参数说明参数说明-s创建符号链接软链接示例# 创建硬链接nshln/tmp/documents/greeting.txt /tmp/link_hard.txt nshcat/tmp/link_hard.txt Hello NuttX!# 创建符号链接nshln-s/tmp/documents/greeting.txt /tmp/link_soft.txt nshcat/tmp/link_soft.txt Hello NuttX!3.7readlink- 读取符号链接功能显示符号链接指向的目标语法readlinklink-path示例nshreadlink /tmp/link_soft.txt /tmp/documents/greeting.txt四、文件内容查看命令4.1head- 查看文件开头功能显示文件的前几行语法head[-nlines]path参数说明参数说明-n lines指定显示的行数默认 10 行示例# 创建测试文件nshforiin123456789101112;doechoLine$i/tmp/test.txt;done# 查看前 5 行nshhead-n5/tmp/test.txt Line1Line2Line3Line4Line54.2tail- 查看文件结尾功能显示文件的最后几行语法tail[-nlines][-f]path参数说明参数说明-n lines指定显示的行数默认 10 行-f实时跟踪文件变化跟随模式示例# 查看最后 3 行nshtail-n3/tmp/test.txt Line10Line11Line12# 实时跟踪按 CtrlC 退出nshtail-f/tmp/test.txt4.3hexdump- 十六进制查看功能以十六进制和 ASCII 格式查看文件内容语法hexdump[-C]path参数说明参数说明-C标准十六进制ASCII 显示模式示例nshhexdump-C/tmp/hello_copy.txt 0000000048656c 6c 6f204e75747458210a|Hello NuttX!.|0000000d4.4xd- 十六进制转储功能另一种十六进制查看工具功能类似 hexdump语法xdpath示例nshxd /tmp/hello_copy.txt 0000:48656C 6C 6F204E75747458210A Hello NuttX!.五、文件属性操作命令5.1chmod- 修改文件权限功能Change Mode修改文件权限位语法chmodoctal-modepath权限说明权限值说明755所有者读写执行其他用户读执行644所有者读写其他用户只读600只有所有者读写示例# 查看当前权限nshls-l/tmp/hello_copy.txt -rw-r--r--10014/tmp/hello_copy.txt# 修改为 600所有者读写nshchmod600/tmp/hello_copy.txt nshls-l/tmp/hello_copy.txt -rw-------10014/tmp/hello_copy.txt# 修改为 755所有者全部权限nshchmod755/tmp/hello_copy.txt nshls-l/tmp/hello_copy.txt -rwxr-xr-x10014/tmp/hello_copy.txt5.2chown- 修改文件所有者功能Change Owner修改文件的所有者和组语法chownuid[:gid]path示例# 修改所有者为用户 1000nshchown1000/tmp/hello_copy.txt nshls-l/tmp/hello_copy.txt -rwxr-xr-x11000014/tmp/hello_copy.txt# 修改所有者和组nshchown1000:1000 /tmp/hello_copy.txt nshls-l/tmp/hello_copy.txt -rwxr-xr-x11000100014/tmp/hello_copy.txt六、文件比较和搜索命令6.1cmp- 比较文件功能Compare比较两个文件的内容语法cmpfile1file2示例# 比较相同文件nshcmp/tmp/hello_copy.txt /tmp/documents/greeting.txt# 无输出表示相同# 比较不同文件nshtouch/tmp/different.txt nshcmp/tmp/hello_copy.txt /tmp/different.txt /tmp/hello_copy.txt /tmp/different.txt differ: char1, line16.2grep- 搜索文本功能Globally search a Regular Expression and Print在文件中搜索匹配的文本语法greppatternpath示例# 在文件中搜索字符串nshgrepNuttX/tmp/hello_copy.txt Hello NuttX!# 在多个文件中搜索nshgrepNuttX/tmp/*.txt /tmp/hello_copy.txt:Hello NuttX!七、文件系统操作命令7.1mount- 挂载文件系统功能挂载文件系统到指定目录语法mount[-ttype]devicemount-point常用文件系统类型类型说明tmpfs内存文件系统romfs只读文件系统fatFAT 文件系统nxffsNuttX Flash 文件系统binfs内置应用伪文件系统hostfs宿主机文件系统仅 SIM示例# 查看已挂载的文件系统nshmount/dev/ram0 on /typetmpfs(rw)none on /proctypeprocfs(rw)# 挂载 ROMFSnshmount-tromfs /dev/rom0 /mnt/rom# SIM 中挂载宿主机文件系统nshmount-thostfs /host /mnt/host7.2umount- 卸载文件系统功能Unmount卸载已挂载的文件系统语法umountmount-point示例nshumount/mnt/host nshmount/dev/ram0 on /typetmpfs(rw)none on /proctypeprocfs(rw)7.3df- 查看磁盘空间功能Disk Free显示文件系统的磁盘使用情况语法df示例nshdfFilesystem Size Used Available Use% Mounted on /dev/ram064.0M12.3M51.7M19% / none0.0K0.0K0.0K0% /proc7.4mkfatfs- 创建 FAT 文件系统功能在设备上创建 FAT 文件系统语法mkfatfsdevice示例# 创建 RAM 磁盘nshmkrd /dev/ram11024# 在 RAM 磁盘上创建 FAT 文件系统nshmkfatfs /dev/ram1# 挂载nshmount-tfat /dev/ram1 /mnt/fat7.5mkrd- 创建 RAM 磁盘功能Make RAM Disk创建 RAM 磁盘设备语法mkrddevicesectors参数说明参数说明deviceRAM 磁盘设备路径如 /dev/ram1sectors扇区数每个扇区 512 字节示例# 创建 1MB 的 RAM 磁盘2048 扇区 × 512 字节nshmkrd /dev/ram120487.6losetup- 设置循环设备功能将文件关联到循环设备语法losetuploop-devicefile示例# 创建大文件nshddif/dev/zeroof/tmp/disk.imgbs512count2048# 设置循环设备nshlosetup /dev/loop0 /tmp/disk.img# 创建文件系统nshmkfatfs /dev/loop0# 挂载nshmount-tfat /dev/loop0 /mnt/loop八、实战案例8.1 案例一文件管理综合练习# 1. 创建项目目录结构nshmkdir-p/tmp/project/src /tmp/project/include /tmp/project/docs# 2. 创建源文件nshecho#include stdio.h/tmp/project/src/main.c nshechoint main() { printf(Hello NuttX!\n); return 0; }/tmp/project/src/main.c# 3. 创建头文件nshecho#ifndef MAIN_H/tmp/project/include/main.h nshecho#define MAIN_H/tmp/project/include/main.h nshechoextern int main(void);/tmp/project/include/main.h nshecho#endif/tmp/project/include/main.h# 4. 创建 READMEnshechoNuttX Project/tmp/project/docs/README.txt nshecho/tmp/project/docs/README.txt nshechoA simple NuttX application/tmp/project/docs/README.txt# 5. 查看目录结构nshls-R/tmp/project /tmp/project: docs/ include/ src/ /tmp/project/docs: README.txt /tmp/project/include: main.h /tmp/project/src: main.c# 6. 查看文件内容nshcat/tmp/project/src/main.c#include stdio.hintmain(){printf(Hello NuttX!\n);return0;}# 7. 复制文件nshcp/tmp/project/docs/README.txt /tmp/project/README.txt# 8. 移动文件nshmv/tmp/project/README.txt /tmp/# 9. 删除目录nshrm-r/tmp/project8.2 案例二使用 RAM 磁盘# 1. 创建 2MB RAM 磁盘nshmkrd /dev/ram14096# 2. 创建 FAT 文件系统nshmkfatfs /dev/ram1# 3. 挂载到 /mnt/ramdisknshmount-tfat /dev/ram1 /mnt/ramdisk# 4. 在 RAM 磁盘上创建文件nshechoData on RAM disk/mnt/ramdisk/data.txt nshcat/mnt/ramdisk/data.txt Data on RAM disk# 5. 查看磁盘使用情况nshdfFilesystem Size Used Available Use% Mounted on /dev/ram064.0M12.3M51.7M19% / none0.0K0.0K0.0K0% /proc /dev/ram12.0M16.0K1.9M1% /mnt/ramdisk# 6. 卸载 RAM 磁盘nshumount/mnt/ramdisk8.3 案例三SIM 中访问宿主机文件系统# 1. 挂载宿主机文件系统nshmount-thostfs /host /mnt/host# 2. 查看宿主机目录nshls/mnt/host# 会显示宿主机的根目录内容# 3. 读取宿主机文件nshcat/mnt/host/etc/hostname myhost# 4. 在宿主机上创建文件nshechoFrom NuttX SIM/mnt/host/tmp/nuttx.txt# 5. 卸载nshumount/mnt/host九、文件系统结构9.1 NuttX 默认文件系统布局渲染错误:Mermaid 渲染失败: Lexical error on line 2. Unrecognized text. graph TD A[/] -- B[dev/] A ---------------^图 1: NuttX 默认文件系统布局9.2 常用目录说明目录说明/dev设备文件目录/etc系统配置文件目录/proc进程信息伪文件系统/tmp临时文件目录RAM/usr用户程序和数据目录/mnt挂载点目录十、常见问题与解决方案10.1 文件权限问题问题无法访问或修改文件解决方案# 查看文件权限ls-lpath# 修改权限chmod644pathchownuidpath10.2 文件系统满了问题写入文件时报错 “No space left on device”解决方案# 查看磁盘使用情况df# 删除不必要的文件rm-rf/tmp/*# 创建更大的 RAM 磁盘mkrd /dev/ram18192mkfatfs /dev/ram1mount-tfat /dev/ram1 /mnt/large10.3 无法挂载文件系统问题mount 命令失败解决方案# 检查设备是否存在ls/dev/# 检查挂载点是否存在ls/mnt/# 检查文件系统类型是否支持# 在 menuconfig 中确保已启用对应的文件系统支持10.4 符号链接无法工作问题访问符号链接时报错解决方案# 检查符号链接目标是否存在readlinklink-path# 重新创建符号链接rmlink-pathln-stargetlink-path结束语NuttX NSH 提供了一套完整的文件和目录操作命令这些命令与 Linux shell 命令非常相似易于上手。通过本文的介绍相信你已经掌握了在 NuttX 中进行文件管理的基本技能。在实际开发中合理使用这些命令可以帮助你高效地管理嵌入式系统中的文件和目录。建议在 SIM 模拟器中多练习熟悉各种命令的用法和参数为实际硬件开发打下坚实基础。参考资料Apache NuttX NSH 命令文档Apache NuttX NSH 概述如果你觉得这篇文章对你有帮助欢迎点赞、收藏和评论如果有任何问题或建议也欢迎在评论区留言讨论。