查看命令为内置命令还是外部命令---type
有木有 ? 有的用户在用一般用户身份执行ifconfig eth0 会出现“-bash: ifconfig :command not found ”的字样,因为ifconfig这个命令是放置在/sbin目录下的,你可以通过echo $PATH 命令查看你当前用户的PATH中并没有设置/sbin目录,所以无法执行。
因为ifconfig是外部命令,执行它时,系统会依照PATH寻找每个目录查询文件名为ifconfig的可执行文件,如果PATH中含有关于其的可执行文件,那么它就会顺利执行,相反就会“-bash:fconfig :command not found ”。
为了方便shell的操作,其实bash内置了很多命令,如:cd ,umask, type....,它们都是内置在bash中的。那我们如何怎么知道一个命令是外部命令还是内置命令呢?
type的用法架构:
type [options] command
options:
如果不加任何参数时,会显示command为外部命令还是内部命令
-t :当加入-t时,其结果会出现这些字眼:
file: 表示为外部command;
alias: 表示其为命令别名所设置的别名;
builtin:表示其为bash内置command
-p:如果你的command是外部命令时,它才会显示完整的文件名;否则 不显示任何字符。
-a :会有PATH变量定义的路径,将所有的关于command这个命令的都列出来,包含alias。
范例一:
#type cd
cd is a shell builtin 《===未加任何参数,显示的结果
#type -t ls
alias
#type -t cd
builtin
#type -t mkdir
file
#type -a ls
ls is aliased to `ls --color ==tty`
ls is /bin/ls
#type -a cat
cat is /bin/cat
对号入座,参考上面的参数介绍,再上机运行下相信你对判断外部命令还是内置命令掌握的就OK了。
看到最后的人加额外的奖励哦:
记不记得刚你刚看到的那个用一般用户可能你没法执行ifconfig这个命令,其实有两种解决方法了:
1:将ifconfig命令的路径加到你用户的PATH中去。
PATH=“$PATH”: /sbin
2:你可以使用绝对路径的方法
/bin/ifconfig eth0
好啦,看完就可以休息,休息一会儿啦!
------参考书
鸟哥的Linux私房菜