当前位置: 首页 > Linux

linux中cd命令的知识点可能比你想象的要多

时间:2023-04-06 18:52:34 Linux

问题来了如果有人问你,linux中最常用的命令有哪些。很多程序员都会说cd命令。毕竟无论做什么,都要先进入相应的目录。你有没有想过以下问题?1、Linux中的cd命令是内置命令还是外部命令?2、如何获取Linux内置命令的帮助文件?3、你仔细看cd命令的帮助文档了吗?问答一我们在使用Linux系统时,要执行某条命令。有时是自己写的shell脚本命令。有时候就是执行cd/echo/kill这些命令。从这里,shell命令可以分为两类,一类是外部命令(自己写的shell脚本),一类是shell自带的命令(cd/echo/kill),也称为内置命令。内置命令的效率优于外部命令。内置命令对应的代码是随着shell的启动加载到内存中的,运行外部命令需要开启一个新的进程,所以使用内置命令非常快。如何判断是否是内置命令1、如果是内置命令[root@VM_0_8_centos~]#typecdcdisashellbuiltinbuiltin的英文翻译是内置命令。2.如果是自己写的shell脚本[root@VM_0_8_centosask]#type/ask/test.sh/ask/test.sh是/ask/test.sh自己写的shell脚本是外部命令,并且其位置为/ask/test.sh3.常用find命令[root@VM_0_8_centosask]#typefindfindis/usr/bin/findfind为外部命令,其位置为/usr/bin/findquestionanswer2.bash是为每个shell内置的,每个命令都提供一个内置的帮助文件。使用帮助命令。然后按照shell内置命令的名称进行查看。[root@VM_0_8_centos~]#helpcdcd:cd[-L|[-P[-e]]][dir]更改shell工作目录。将当前目录更改为DIR。默认DIR是HOMEshell变量的值。变量CDPATH定义包含DIR的目录的搜索路径。CDPATH中的备用目录名称由冒号(:)分隔。空目录名与当前目录相同。如果DIR以斜杠(/)开头,则不使用CDPATH。如果找不到目录,并且设置了shell选项“cdable_vars”,则假定该词是一个变量名。如果该变量有值,则其值用于DIR。选项:-L强制跟随符号链接-P使用物理目录结构而不跟随符号链接-e如果提供了-P选项,并且无法成功确定当前工作目录,则以n退出零状态默认是跟随符号链接,就像指定了“-L”一样。退出状态:如果目录改变返回0,使用-P时如果$PWD设置成功;否则非零。问题3的解答下面我们来逐一解答cd命令的帮助文档,一一验证。1.cd命令的表示法cd:cd[-L|[-P[-e]]][dir]选项:-L强制跟随符号链接-P使用物理目录结构,不跟随符号链接-e如果提供了-P选项,并且无法成功确定当前工作目录,以非零状态退出默认是跟随符号链接,就好像指定了“-L”一样。cd命令后面可能有一个-L参数,也可能是-P参数。cd的默认行为等于cd<=>cd-L。如果路径包含符号链接,请遵循符号链接。1.1创建符号链接引用目录[root@VM_0_8_centosask]#ln-stesttest-sym[root@VM_0_8_centosask]#ls-ltotal1104-rw-r--r--1rootroot4444Mar1621:49info.1drwxr-xr-x2rootroot4096May3008:48testlrwxrwxrwx1rootroot4May3009:17test-sym->test1.2结合使用cd命令和-L[root@VM_0_8_centosask]#cd-Ltest-sym//ask/test-sym[root@VM_0_8_centostest-sym]#pwd/ask/test-sym如果路径包含符号链接,则按照符号链接。1.3结合使用cd命令和-P[root@VM_0_8_centosask]#cd-Ptest-sym//ask/test-sym/[root@VM_0_8_centostest]#pwd/ask/test使用物理地址,不是Follow符号链接。2、cd命令的默认文件路径将当前目录改为DIR。默认DIR是HOMEshell变量的值。也就是说,如果cd命令后面不带任何参数,默认是进入用户家目录。等同于cd~[root@VM_0_8_centosask]#cd[root@VM_0_8_centos~]#pwd/root3.cd命令的CDPATH变量使用变量CDPATH定义了包含DIR的目录的搜索路径。CDPATH中的备用目录名称由冒号(:)分隔。空目录名与当前目录相同。如果DIR以斜杠(/)开头,则不使用CDPATH。如果输入的路径不以根目录/开头,cd进入搜索目录时,会根据你的CDPATH环境变量配置的目录进行搜索,进入的目录会成为CDPATH+你的目录目录。3.1在.bash_profile中配置CDPATH环境变量[root@VM_0_8_centos~]#echo$CDPATH/ask:/home/:/etc3.2在ask目录下创建test目录[root@VM_0_8_centosask]#mkdirtest[root@VM_0_8_centosask]#3.3使用cd命令进入测试目录[root@VM_0_8_centosusr]#cdtest/ask/test[root@VM_0_8_centostest]#pwd/ask/test我在/usr/目录下,切换到test目录,即根据CDPATH环境变量找到test目录下存在的第一个。4.cd命令中的cdable_vars属性如果没有找到目录,并且设置了shell选项“cdable_vars”,则假定该词是一个变量名。如果该变量有值,则其值用于DIR。这一段的意思是,如果环境中不存在一个目录名,但是启用了cdable_vars,如果你定义了一个别名目录,那么cd也可以识别并进入这个目录。4.1在环境中,cdable_vars目前处于关闭状态。shopt命令用于显示和设置shell中的行为选项[root@VM_0_8_centostest]#shoptcdable_varscdable_varsoff4.2自定义一个目录变量名[root@VM_0_8_centosusr]#askcto=/ask/test[root@VM_0_8_centosusr]#cdaskcto-bash:cd:askcto:Nosuchfileordirectoryfoundcd命令识别目录名,提示没有那个目录4.3activatecdable_varstoon[root@VM_0_8_centosusr]#shopt-scdable_vars[root@VM_0_8_centosusr]#shoptcdable_varscdable_varson4.4再自定义一个目录变量名[root@VM_0_8_centosusr]#askcto=/ask/test[root@VM_0_8_centosusr]#cdaskcto/ask/test[root@VM_0_8_centosusr]#cdaskcto/ask/test[root@VM_0_8_centosusr]test]#成功识别自定义目录名askcto回顾与总结1、Linux中的cd命令是一个内置命令。查看内置命令可以使用帮助命令+内置命令名。2.解释cd命令的-L和-P参数的区别。3.解释cd命令与CDPATH环境变量设置的关系以及shell中cdable_vars选项设置对cd命令的影响。