Linux中基本目录操作命令详解

 更新时间:2025年06月30日 10:22:57   作者:程序员岳彬  
作为 Java 程序员,在日常开发和运维过程中,熟练掌握 Linux 命令是必不可少的技能,尤其是目录操作命令,是我们与文件系统交互的基础,下面我们来看看这些命令的具体使用吧

简介

在Java开发和运维中,我们经常需要与Linux文件系统进行交互。掌握基本的目录操作命令可以帮助我们高效地管理项目文件、查看目录结构、部署应用程序等。本文将介绍Java程序员必须掌握的Linux目录操作命令,分为以下几个部分:

  • 基础目录操作命令(ls, cd, pwd)
  • 目录创建与删除命令(mkdir, rmdir, rm)
  • 文件与目录操作命令(cp, mv)
  • 高级目录操作命令(tree, find)
  • Java开发中的实用目录操作技巧

一、基础目录操作命令

1.1 ls 命令:查看目录内容

ls命令用于列出当前或指定目录下的文件和子目录。

语法

ls \[选项] \[路径]

常用选项

  • -l:长格式显示文件详情
  • -a:显示隐藏文件(以.开头的文件)
  • -h:人性化显示文件大小(自动转换单位)
  • -R:递归显示子目录内容
  • -t:按修改时间排序(最新文件排在前面)

实例代码

ls -l  # 长格式显示当前目录内容

ls -a  # 显示当前目录下的所有文件,包括隐藏文件

ls -lh # 长格式显示并以易读方式显示文件大小

ls -R /etc # 递归显示/etc目录下的所有内容

注释

  • 长格式显示的信息包括文件类型与权限、硬链接数、所有者、所属组、文件大小、修改时间和文件名
  • 文件类型以第一个字符表示:-表示普通文件,d表示目录,l表示符号链接
  • 使用-h选项可以将文件大小以 KB、MB、GB 等单位显示,更直观
  • -R选项适合查看整个目录结构

Java 开发应用场景

在 Java 项目开发中,我们经常需要查看项目目录结构,确认文件是否存在或正确生成。例如,在 Maven 项目中,可以使用ls -l target命令查看编译生成的 class 文件和 jar 包

1.2 cd 命令:切换工作目录

cd(Change Directory)命令用于在终端中切换当前工作目录。

语法

cd \[选项] \[目标目录]

常用选项

  • -L:如果目标目录是符号链接,切换到符号链接的目录(默认行为)
  • -P:如果目标目录是符号链接,切换到它指向的物理位置目录

实例代码

cd \~  # 切换到用户主目录

cd .. # 切换到上级目录

cd /etc/yum.repos.d # 切换到绝对路径目录

cd -  # 返回上一次访问的目录

注释

  • ~表示用户主目录,cdcd ~可快速回到用户主目录
  • .表示当前目录,cd .没有变化;..表示父目录
  • cd -是快速在两个目录间切换的高效方式
  • 使用 Tab 键可以自动补全目录名,避免拼写错误

Java 开发应用场景

在 Java 开发中,我们经常需要在不同项目目录之间切换。例如,使用cd /home/projects/spring-boot-demo切换到 Spring Boot 项目目录,然后使用cd -回到上一个工作目录

1.3 pwd 命令:显示当前工作目录

pwd(Print Working Directory)命令用于显示当前工作目录的完整路径。

语法

pwd \[选项]

常用选项

-P:显示当前工作目录的物理位置,而非符号链接路径

实例代码

pwd  # 显示当前工作目录的完整路径

pwd -P # 显示当前工作目录的物理路径(不包含符号链接)

注释

  • 默认情况下,pwd显示的是逻辑路径,可能包含符号链接
  • 使用-P选项可以获取物理路径,避免符号链接的干扰
  • 在脚本中,pwd命令可用于确定脚本的当前工作目录

Java 开发应用场景

在编写 Java 项目的部署脚本时,使用pwd命令可以动态获取当前脚本所在的目录,确保文件路径的准确性。例如:

CURRENT\_DIR=\$(pwd)


echo "当前脚本所在目录:\$CURRENT\_DIR"

二、目录创建与删除命令

2.1 mkdir 命令:创建目录

mkdir(Make Directory)命令用于创建新目录。

语法

mkdir \[选项] 目录名...

常用选项

  • -p:递归创建多级目录
  • -m:设置目录权限模式(类似chmod
  • -v:显示详细的创建过程信息

实例代码

mkdir testdir # 创建单级目录testdir

mkdir -p project/src/main # 递归创建多级目录project/src/main

mkdir -m 755 logs # 创建权限为rwxr-xr-x的logs目录

注释

  • -p选项非常实用,可一次性创建多级目录,避免因父目录不存在而报错
  • 默认权限为 rwxr-xr-x,可通过-m选项自定义权限
  • 权限模式中,r 表示读,w 表示写,x 表示执行

Java 开发应用场景

在 Java 项目开发中,我们经常需要创建特定结构的目录。例如,使用mkdir -p project/src/main/java/com/demo创建符合 Maven 标准的项目目录结构

2.2 rmdir 命令:删除空目录

rmdir(Remove Directory)命令用于删除空目录。

语法

rmdir \[选项] 目录名...

常用选项

  • -p:递归删除目录及其空的父目录
  • --ignore-fail-on-non-empty:忽略因目录非空导致的错误
  • -v:显示详细的删除过程信息

实例代码

rmdir testdir # 删除空目录testdir

rmdir -p project/src/main/java/com/example # 递归删除多级空目录

注释

  • rmdir只能删除空目录,非空目录无法删除
  • 若要删除非空目录,需使用rm -r命令
  • -p选项会递归删除目录,如果父目录在删除子目录后变为空目录,也会一并被删除

Java 开发应用场景

在 Java 项目清理时,使用rmdir命令可以删除不需要的空目录。例如,删除测试生成的空目录:

rmdir build/test-reports

2.3 rm 命令:删除文件或目录

rm(Remove)命令用于删除文件或目录。

语法

rm \[选项]... 文件或目录...

常用选项

  • -f:强制删除,忽略不存在的文件和警告,不提示确认
  • -i:交互式删除,删除前提示确认
  • -r-R:递归删除目录及其内容
  • -d:删除空目录(类似rmdir
  • -v:显示详细操作信息

实例代码

rm file.txt # 删除文件file.txt

rm -r project # 递归删除目录project及其内容

rm -rf old\_files # 强制递归删除目录old\_files,不提示确认

注释

  • -r选项用于递归删除目录,是删除非空目录的必要选项
  • -f选项强制删除,不会提示确认,使用时需谨慎
  • 组合使用-rf时要特别小心,因为它会递归强制删除,没有恢复机会

Java 开发应用场景

在 Java 项目构建过程中,经常需要删除旧的编译结果或临时文件。例如,使用rm -rf target命令删除 Maven 项目的 target 目录

三、文件与目录操作命令

3.1 cp 命令:复制文件或目录

cp(Copy)命令用于复制文件或目录。

语法

cp \[选项]... 源文件 目标文件
cp \[选项]... 源文件... 目标目录

常用选项

  • -a:归档模式,相当于-dR --preserve=all
  • -i:覆盖前提示确认
  • -n:不覆盖已存在文件
  • -r:递归复制目录
  • -u:只复制源文件中更新时间较新的文件
  • -v:显示复制过程
  • -p:保留原始文件的属性(权限、时间戳等)

实例代码

cp file.txt backup.txt # 复制文件file.txt为backup.txt

cp -r project project\_backup # 递归复制目录project为project\_backup

cp -v \*.java src/main/java # 复制所有.java文件到src/main/java目录,并显示过程

注释

  • 复制目录时必须使用-r选项,否则会提示 "omitting directory"
  • -v选项显示复制过程,让操作更透明
  • -p选项保留文件属性,在备份配置文件时特别有用

Java 开发应用场景

在 Java 项目开发中,经常需要复制配置文件或模板文件。例如,使用cp application.properties application-dev.properties复制开发环境配置文件

3.2 mv 命令:移动或重命名文件 / 目录

mv(Move)命令用于移动文件或目录,也可用于重命名。

语法

mv \[选项]... 源文件 目标文件

mv \[选项]... 源文件... 目标目录

常用选项

  • -i:覆盖前提示确认
  • -n:不覆盖已存在文件
  • -v:显示详细操作信息
  • -u:只移动源文件中更新时间较新的文件
  • -f:强制覆盖已存在文件

实例代码

mv oldname.txt newname.txt # 重命名文件

mv file.txt documents/ # 移动文件file.txt到documents目录

mv -v project/ backup/ # 移动目录project到backup目录,并显示过程

注释

  • mv命令既可以移动文件 / 目录,也可以重命名文件 / 目录
  • 移动文件时,如果目标路径是目录,源文件将被移动到该目录下
  • 重命名文件时,目标路径应为新的文件名,而非目录

Java 开发应用场景

在 Java 项目重构时,经常需要重命名文件或移动目录。例如,使用mv com/example/oldpackage com/example/newpackage重命名包目录

四、高级目录操作命令

4.1 tree 命令:以树形结构显示目录内容

tree命令用于以树形结构显示目录下的内容,直观展示目录结构。

语法

tree \[选项] \[目录]

常用选项

  • -a:显示所有文件(包括隐藏文件)
  • -d:只显示目录
  • -l:显示链接文件的原始文件
  • -f:显示完整目录路径
  • -i:不以阶梯形式显示文件或目录名称
  • -q:将控制字符以?字符代替
  • -N:直接显示文件或目录的名称
  • -p:显示每个文件的权限信息

实例代码

tree # 以树形结构显示当前目录内容

tree -d # 只显示目录结构

tree -L 2 # 显示目录下两层内容

tree -f # 显示完整路径的树形结构

注释

  • 默认情况下,tree命令需要单独安装,不是系统预装命令
  • 使用-d选项可以只显示目录,隐藏文件
  • -L选项指定显示的层级深度,避免内容过多
  • -f选项显示完整路径,便于识别文件位置

Java 开发应用场景

在 Java 项目开发中,使用tree命令可以快速查看项目目录结构,确认文件是否正确放置。例如,检查 Maven 项目结构是否符合标准:

tree -d src/main

4.2 find 命令:查找文件或目录

find命令用于在文件系统中查找符合条件的文件或目录。

语法

find \[路径] \[选项] \[条件] \[操作]

常用选项

  • -name:按文件名查找
  • -type:按文件类型查找(f 表示普通文件,d 表示目录)
  • -size:按文件大小查找
  • -mtime:按修改时间查找
  • -perm:按权限查找
  • -exec:对找到的文件执行指定命令

实例代码

find . -name "\*.java" # 查找当前目录下所有.java文件

find /opt/java -type d -name "maven\*" # 查找/opt/java目录下所有名称以maven开头的目录

find . -size +100M # 查找当前目录下大于100MB的文件

find . -mtime -7 # 查找最近7天内修改过的文件

注释

  • .表示当前目录,是find命令最常用的起始路径
  • 使用-name选项时,支持通配符(如*.java表示所有以.java 结尾的文件)
  • -type选项中,f表示普通文件,d表示目录,l表示符号链接
  • -exec选项可以对找到的文件执行命令,格式为-exec command {} \;

Java 开发应用场景

在 Java 项目维护中,经常需要查找特定类型的文件。例如,查找项目中所有未提交的测试文件:

find . -name "Test\*.java" -not -path "./.git/\*"

五、Java 开发中的实用目录操作技巧

5.1 项目目录结构管理

在 Java 开发中,良好的目录结构管理至关重要。以下是一些实用技巧:

创建标准 Maven 项目结构

mkdir -p project/src/{main,test}/{java,resources}

清理项目临时文件

rm -rf target # 删除Maven项目的target目录


find . -name "\*.class" -delete # 删除所有.class文件

5.2 日志文件管理

在 Java 应用程序的运维中,日志文件管理是重要工作:

查找最近修改的日志文件

ls -lt /var/log | head -n 5 # 显示最近修改的5个日志文件

按大小排序日志文件

du -sh /var/log/\* | sort -rh | head -n 10 # 显示最大的10个日志文件

清理旧日志文件

find /var/log -type f -name "\*.log" -mtime +30 -delete # 删除30天以上的日志文件

5.3 项目部署与发布

在 Java 项目部署过程中,以下命令非常实用:

打包项目目录

tar -czvf project.tar.gz project # 打包项目目录为project.tar.gz

解压到指定目录

tar -xzvf project.tar.gz -C /opt/deploy # 解压到/opt/deploy目录

创建发布目录结构

mkdir -p /opt/apps/myapp/{current,previous,logs}

六、总结与最佳实践

6.1 命令速查表

命令作用常用选项
ls查看目录内容-l, -a, -h, -R
cd切换目录-, ~, ..
pwd显示当前目录-P
mkdir创建目录-p, -m
rmdir删除空目录-p
rm删除文件或目录-r, -f
cp复制文件或目录-r, -p, -v
mv移动或重命名-i, -v
tree树形显示目录结构-d, -L, -f
find查找文件或目录-name, -type, -size

6.2 最佳实践建议

1.安全删除:使用rm命令时,特别是rm -rf,一定要确认目标路径正确,避免误删系统文件。

2.路径管理

  • 尽量使用绝对路径,避免路径混乱
  • 使用cd -在最近两个目录间快速切换
  • 善用 Tab 键自动补全路径,减少拼写错误

3.命令组合

  • 使用管道符|组合命令,例如ls -l | grep .log
  • 结合findxargs执行批量操作

4.脚本编写

  • 在脚本中使用pwd -P获取物理路径,避免符号链接干扰
  • 使用mkdir -p创建多级目录,确保目录存在
  • 使用rm -rf前先检查目录是否存在

5.权限管理

  • 使用chmod命令设置合适的文件和目录权限
  • 避免使用chmod 777,应根据需要设置具体权限

七、附录:常见错误及解决方法

7.1 权限相关错误

错误信息

rm: cannot remove 'file.txt': Permission denied

原因:当前用户没有删除该文件的权限。

解决方法

  • 使用ls -l查看文件权限
  • 使用sudo rm file.txt以管理员权限删除
  • 或使用chmod修改文件权限后再删除

7.2 目录操作错误

错误信息

cp: omitting directory 'dir'

原因:尝试复制目录时未使用-r选项。

解决方法

使用cp -r dir dir_copy递归复制目录。

7.3 文件查找问题

错误信息

find: paths must precede expression

原因find命令的参数顺序错误。

解决方法

确保路径参数在条件参数之前,例如find /path -name "*.txt"

7.4 符号链接问题

错误信息

pwd: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

原因:当前目录是符号链接,且基础目录不可访问。

解决方法

使用pwd -P获取物理路径,或确保符号链接指向的目录可访问。

到此这篇关于Linux中基本目录操作命令详解的文章就介绍到这了,更多相关Linux目录操作命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Shell中if的基本语法和常见判断用法

    Shell中if的基本语法和常见判断用法

    这篇文章主要介绍了Shell中if的基本语法和常见判断用法,本文讲解了if的基本语法、对字符串的判断、对数字的判断、对文件属性的判断、逻辑判断等内容,需要的朋友可以参考下
    2015-06-06
  • Linux 命令每天必学(34)之du命令

    Linux 命令每天必学(34)之du命令

    Linux du命令是查看使用空间的,本文给大家介绍linux du命令的参数,格式,功能等相关资料,对linux du命令感兴趣的朋友一起学习吧
    2015-11-11
  • 关于SSH 远程执行命令你要知道的二三事

    关于SSH 远程执行命令你要知道的二三事

    SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,下面这篇文章主要给大家介绍了关于SSH 远程执行命令的一些相关资料,需要的朋友可以参考下。
    2017-07-07
  • Linux常用命令之性能命令

    Linux常用命令之性能命令

    这篇文章主要介绍了Linux常用命令之性能命令,文章讲解的很清楚,有对于这方面不了解的同学可以研究下
    2021-02-02
  • linux中kvm的安装及快照管理

    linux中kvm的安装及快照管理

    这篇文章主要介绍了linux中kvm的安装及快照管理的相关资料,需要的朋友可以参考下
    2016-12-12
  • shell脚本编程之case语句学习笔记

    shell脚本编程之case语句学习笔记

    这篇文章主要介绍了shell脚本编程之case语句学习笔记,本文代码中包含注释来说明case语句的使用,需要的朋友可以参考下
    2014-09-09
  • shell中删除文件中重复行的方法

    shell中删除文件中重复行的方法

    这篇文章主要介绍了shell中删除文件中重复行的方法,需要的朋友可以参考下
    2014-03-03
  • Shell脚本实现服务器多台免密登录操作

    Shell脚本实现服务器多台免密登录操作

    本文介绍了auto_ssh_batch.sh脚本,用于在多台RHEL/CentOS7主机之间快速配置SSH免密登录,并支持远程传输脚本/文件及执行命令,脚本通过pass文件提供统一认证凭据,nodes文件定义目标主机列表,实现批量自动化操作,感兴趣的朋友一起看看吧
    2025-03-03
  • Linux查看端口占用lsof -i:port的方法

    Linux查看端口占用lsof -i:port的方法

    下面小编就为大家带来一篇Linux查看端口占用lsof -i:port的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • shell脚本递归遍历目录及子目录的例子分享

    shell脚本递归遍历目录及子目录的例子分享

    这篇文章主要介绍了shell脚本递归遍历目录及子目录的例子,需要的朋友可以参考下
    2014-04-04

最新评论