百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux切换目录之cd命令(linux切换指定目录)

ahcoder 2025-06-18 18:51 2 浏览


1. 基本概念

1.1 命令作用

当我们在Linux系统上工作时,做得相当多的一项任务就是在不同的目录之间进行切换,这时就需要用到cd命令了。cd是"change directory"的首字母缩写,正是“改变目录”的意思。

当目录切换成功时,cd命令返回0;而目录切换失败时,cd命令返回非0值。要切换的目录不存在或者权限不够,都是cd命令执行失败的常见原因。

1.2 命令语法

cd命令的语法形式如下所示:

cd [option] [dir]

其中选项(option)主要是以下内容:

-L 使用逻辑目录;

-P 使用物理目录;

当省略option时,默认为 -L 选项。这两个选项的具体作用,我们会在第2小节中进行详细说明。

dir参数则指明要切换到的目录,cd命令最多只能有一个dir参数。dir参数可以省略,此时它的作用相当于cd ~,即切换到当前用户的主目录(又称家目录,即HOME变量定义的路径)。

1.3 目录的表示方法

cd命令其实很简单,而它的使用技巧主要体现在目标目录(即dir参数)的表示上。dir参数有如下这些表示方法:

绝对路径,即从根目录(/)开始到一个目录的完整路径。比如cd /var/spool,则是切换到根目录下的var目录中的spool目录。

相对路径,不是从根目录开始也不是下面的特殊符号代表的路径就是相对路径,它是相对于当前目录而言的。比如cd photo/travel,如果当前目录是/var/media,那么就相当于切换到/var/media/photo/travel。如果当前目录是/User/Mike,那么切换目标就是/User/Mike/photo/travel。

提示,在路径表示中可以使用.(一个英文句点)或..(两个英文句点)。其中.表示一个目录自身,比如/var/spool/./at其实就等于/var/spool/at。而..代表一个目录的父目录,比如/var/spool/../log等于/var/log;根目录的父目录是它自身。

~(波浪符号),这代表用户的主目录。比如我的主目录是/home/purehiking,那么执行cd ~就相当于执行cd /home/purehiking。当省略dir参数时,也等同于执行cd ~。cd ~/xx则是切换到用户主目录下的其它目录。

-(英文连字符),这代表上一个工作目录。当你切换到一个新的目录并执行完了任务后,想要回到上一个目录时,就可以将dir参数指定为 - 而不用输入上一个目录的绝对或相对路径。

2. 选项的作用

-P和-L这两个选项的作用到底是什么呢?其实它们都和符号链接有关。当路径中的某个目录是另一个目录的符号链接的时候,-P就使用物理目录结构而-L则使用逻辑目录结构。

假设/tmp/A这个目录是/var/spool这个目录的符号链接,那么对/tmp/A中的文件进行处理其实就是对/var/spool中的文件进行处理。当用户处于/tmp/A这个目录中时,/tmp/A就是逻辑目录,而/var/spool就是物理目录。

cd -P /tmp/A/.. 的结果是切换到/var目录,这是因为解析到/tmp/A的时候发现它是一个符号链接而我们又指定了-P选项,这时就使用物理目录。相当于把/tmp/A替换为/var/spool,再解析这个目录的父目录就得到/var目录。

cd -L /tmp/A/.. 的结果是切换到/tmp目录,这是因为虽然解析到/tmp/A是一个符号链接,但是-L选项则指明就是使用逻辑目录。此时的目录还是/tmp/A,而该目录的父目录就是/tmp。

3. CDPATH变量

3.1 作用

我们前面说相对路径都是相对于当前目录的,这其实是在没有设置CDPATH变量时的情况,当然设置了CDPATH变量后也可以让相对路径相对于当前目录。

CDPATH变量的作用就是指定一个或多个搜索目录,当cd命令的dir参数是相对路径时,就依次在CDPATH指定的这些目录中搜索该相对路径代表的目标目录(其实就是让该相对路径相对于该搜索目录,而不是相对于当前目录)。搜索到第一个存在的目标目录时就停止搜索,并切换到该目标目录。如果所有搜索目录下都没有该相对路径对应的目标目录,则cd命令执行失败。如果dir参数是绝对路径,则不使用CDPATH变量。

CDPATH变量指定的搜索目录既可以是绝对路径,也可以是相对路径。如果是绝对路径,就直接将该搜索目录应用于dir参数代表的相对路径。如果是相对路径,那么先让该搜索目录相对于当前目录以确定它的完整路径,再将该完整路径应用于dir参数指明的相对路径。

当CDPATH指定多个搜索目录时,每个目录之间都用英文冒号(:)分隔。如果某个搜索目录为空,那么该目录相当于指定当前目录。此外,要指定当前目录,也可以将某个搜索目录指明为.(一个英文句点)。

3.2 示例

我们通过一个例子来查看CDPATH变量的作用,一看就会。假设我们当前所处的目录为/tmp,并设置CDPATH变量的值为"
/var/lib:media/video::/etc:/boot:/run"。再假设整个系统上只有/etc目录下有httpd/vhosts这个目录。那么此时cd httpd/vhosts的执行过程如下所示:

首先,判断出dir参数是一个相对路径且CDPATH变量已设置,那么就要在该变量指定的搜索目录中搜索该相对路径。

取出第一个搜索目录,它是/var/lib。因为该搜索目录是绝对路径,那么就直接在它之中进行搜索,其实就是查看/var/lib/httpd/vhosts这个目录是否存在。我们的假设中这个目录不存在,因此就在后续的搜索目录中继续搜索。

取出第二个搜索目录media/video,它是一个相对路径。因此我们先让它相对于当前目录以确定该搜索目录的完整路径,得到的结果是/tmp/media/video(当前目录为/tmp)。再在该搜索目录中搜索目标目录,即查看
/tmp/media/video/httpd/vhosts这个目录是否存在,然而它依旧不存在。

取出第三个搜索目录,它是一个空目录,其实也是一个相对路径。让它相对于当前目录得到搜索目录的完整路径就是当前目录/tmp。然后查看/tmp/httpd/vhosts是否存在,结果是它不存在。

取出第四个搜索目录,它是/etc。搜索目标目录就是查看/etc/httpd/vhosts是否存在,因为该目录存在,那么搜索成功。此时,将工作目录切换到/etc/httpd/vhosts后cd命令返回0以表示执行成功。

虽然后面还有几个搜索目录,但此时不需要再在它们中进行搜索了。

(完)

相关推荐

Java程序员必备的Linux命令速查表

Java程序员必备的Linux命令速查表在Java开发的世界里,Linux就像一位默默支持的幕后英雄。作为一名Java开发者,掌握一些基本的Linux命令,不仅能提高工作效率,还能让你在团队中显得格外...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux磁盘管理相关命令(linux磁盘管理常用命令)

磁盘的使用情况会直接影响系统的性能,因此我们经常会用到以下命令,主要围绕:fdisk:磁盘分区df:文件系统的磁盘空间占用情况du:文件目录的磁盘空间占用情况查看磁盘关系lsblk查看磁盘分区情况fd...

第四章 Linux常用shell命令-4.5.磁盘管理

主要介绍一下跟磁盘管理相关命令,有比较多的内容摘抄自网络,如有侵权,请及时联系我删除:显示目前在Linux系统上的文件系统磁盘使用情况统计:df创建和维护分区表的程序:fdisk将磁盘分区或镜像挂...

Linux新手必备:20个高效命令轻松掌握!

Linux基本命令使用指南在现代计算机操作系统中,Linux因其开放性、灵活性和强大的功能,广泛应用于服务器和开发环境中。作为技术人员,掌握Linux的基本命令是非常重要的。在本文中,我们将重点介绍2...

每日必学Linux命令:ls命令(linux命令详解之ls命令)

ls命令是linux下最常用的命令。ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单。通过ls命令不仅可以查看linux文件...

Linux系统dev和proc目录详解(linux dev/sr0)

简介:Linux系统里的/dev和/proc目录那可是相当重要的系统文件。在Linux系统中,/dev目录专门用来存放设备文件。不光有设备文件,系统里还有好多特殊功能也是通过设备的形式...

Linux切换目录之cd命令(linux切换指定目录)

1.基本概念1.1命令作用当我们在Linux系统上工作时,做得相当多的一项任务就是在不同的目录之间进行切换,这时就需要用到cd命令了。cd是"changedirectory"的首...

Linux切换目录(cd命令)(linux如何切换到目录)

cd命令,是ChangeDirectory的缩写,用来切换工作目录。Linux命令按照来源方式,可分为两种,分别是Shell内置命令和外部命令。所谓Shell内置命令,就是Shel...

MongoDB数据库的快速部署和启动(mongodb的使用教程)

一、Mongodb介绍常见数据库介绍关系数据库RDBMS设计表结构,通过SQL语句进行操作。连表关系常见的关系型数据库:mysqloracle(商业)DB2(IBM)sqlserver(微软...

5分钟学会网络服务搭建,飞凌i.MX9352 + Linux 6.1实战示例

在“万物互联”的技术浪潮下,网络服务已成为连接物理世界与数字世界的核心纽带,它不仅赋予了终端设备“开口说话”的能力,更构建了智能设备的开发范式。本文就将以飞凌嵌入式OK-MX9352-C开发板(搭载了...

centos安装geoserver并配置开机启动

前提条件:服务器已经安装了java环境一、下载下载地址:http://geoserver.org/release/maintain/下载后文件名为:geoserver-2.19.3-bin.zip二、...

开机启动流程(开机流程图)

grubandbootCentos5,6的开机启动流程grubCentos7的开机启动流程Centos5,6的开机启动流程initrd/initramfs一般存储在/boot目录下,以.img...

Linux cron服务概述(crontab服务)

cron是Linux/Unix系统中一个非常重要的后台服务(守护进程),用于在预定的时间间隔自动执行命令或脚本。它使得自动化重复性任务成为可能,例如日志清理、数据备份、系统维护等。1.cron...

CentOS 8利用rc.local进行开机自启动的配置

CentOS8利用rc.local进行开机自启动的配置CentOS8linux系统是不建议使用rc.local进行开机自启动的,建议创建systemdservice。我们为了方便以后多一个配置...