# HDFS 常用 shell 命令 **1. 显示当前目录结构** ```shell # 显示当前目录结构 hadoop fs -ls # 递归显示当前目录结构 hadoop fs -ls -R # 显示根目录下内容 hadoop fs -ls / ``` **2. 创建目录** ```shell # 创建目录 hadoop fs -mkdir # 递归创建目录 hadoop fs -mkdir -p ``` **3. 删除操作** ```shell # 删除文件 hadoop fs -rm # 递归删除目录和文件 hadoop fs -rm -R ``` **4. 从本地加载文件到HDFS** ```shell # 二选一执行即可 hadoop fs -put [localsrc] [dst] hadoop fs - copyFromLocal [localsrc] [dst] ``` **5. 从HDFS导出文件到本地** ```shell # 二选一执行即可 hadoop fs -get [dst] [localsrc] hadoop fs -copyToLocal [dst] [localsrc] ``` **6. 查看文件内容** ```shell # 二选一执行即可 hadoop fs -text hadoop fs -cat ``` **7. 显示文件的最后一千字节** ```shell hadoop fs -tail # 和Linux下一样,会持续监听文件内容变化 并显示文件的最后一千字节 hadoop fs -tail -f ``` **8. 拷贝文件** ```shell hadoop fs -cp [src] [dst] ``` **9. 移动文件** ```shell hadoop fs -mv [src] [dst] ``` **10. 统计当前目录下各文件大小** + 默认单位字节 + -s : 显示所有文件大小总和, + -h : 将以更友好的方式显示文件大小(例如64.0m而不是67108864) ```shell hadoop fs -du ``` **11. 合并下载多个文件** + -nl 在每个文件的末尾添加换行符(LF) + -skip-empty-file 跳过空文件 ```shell hadoop fs -getmerge # 示例 将HDFS上的hbase-policy.xml和hbase-site.xml文件合并后下载到本地的/usr/test.xml hadoop fs -getmerge -nl /test/hbase-policy.xml /test/hbase-site.xml /usr/test.xml ``` **12. 统计文件系统的可用空间信息** ```shell hadoop fs -df -h / ``` **13. 更改文件复制因子** ```shell hadoop fs -setrep [-R] [-w] ``` + 更改文件的复制因子。如果path是目录,则更改其下所有文件的复制因子 + -w : 请求命令是否等待复制完成 ```shell # 示例 hadoop fs -setrep -w 3 /user/hadoop/dir1 ``` **14. 权限控制** ```shell # 权限控制和Linux上使用方式一致 # 变更文件或目录的所属群组。 用户必须是文件的所有者或超级用户。 hadoop fs -chgrp [-R] GROUP URI [URI ...] # 修改文件或目录的访问权限 用户必须是文件的所有者或超级用户。 hadoop fs -chmod [-R] URI [URI ...] # 修改文件的拥有者 用户必须是超级用户。 hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ] ``` **15. 文件检测** ```shell hadoop fs -test - [defsz] URI ``` 可选选项: + -d:如果路径是目录,返回0。 + -e:如果路径存在,则返回0。 + -f:如果路径是文件,则返回0。 + -s:如果路径不为空,则返回0。 + -r:如果路径存在且授予读权限,则返回0。 + -w:如果路径存在且授予写入权限,则返回0。 + -z:如果文件长度为零,则返回0。 ```shell # 示例 hadoop fs -test -e filename ```