shell内置命令集合

1.help  显示所有内置命令的列表,或某一个内置命令的用法
  1. #help //查看所有内置命令
  2. #help 内置命令 //查看内置命令使用方法
  3. #help -s 内置命令 //显示内置命令的语法格式,非常好用哦!
  4. [root@localhost var]# help -s cd
  5. cd: cd [-L|-P] [dir]
2.echo 用来显示一行文字,默认会自动换行
  1. [root@localhost ~]# echo www
  2. www
  3. -e 让字符串中的特殊字符起作用.例如:
  4. [root@localhost ~]#echo -e "I am the king\nof the world."
  5. 执行结果如下:
  6. I am the king
    of the world.
  7. 其中\n会被翻译成换行字符.
3.printf 依照格式显示参数内容
  1. 假设变量str="Hello World"
  2. [root@localhost ~]#printf "%s\n" "$str"
  3. Hello World
  4. #显示变量str的内容,且\n具有换行的效果.
  5. [root@localhost ~]#printf "%c\n" "$str"
  6. H
  7. #显示变量值的第一个字符
  8. [root@localhost ~]#printf "%s共有%d个字符\n" "$str" 11
  9. Hello World共有11个字符
  10. #显示str="Hello world"共有11个字符.
  11. [root@localhost ~]#printf "%9s\n" Hello!
  12. ___Hello!
  13. #显示9个字符长度的字符串(靠右对齐),不足9个字符的部分用空格符补齐,结果显示"___Hello!"(左方有3个空格符) [root@localhost ~]#printf "%-9s\n" Hello!

 #显示9个字符长度的字符串(靠左对齐),不足9个字符的部分用空格符补齐,结果显示"Hello!___"

 [root@localhost ~]#printf "%5.8f\n" 300

 300.00000000

 #在上述的字符串中,5.8中的5,表示含小数点共5位数,5.8中的8表示小数字数占用一位.

 [root@localhost ~]#printf "%q\n" "$str"

 "Hello\world"

 #这里的%q参数是将特殊字符转义

 [root@localhost ~]#printf -v myvar "%q" "ABC 123 XYZ"

 #这里的-v是说:不显示到标准输出,而把想要显示的内容值给变量myvar.

 #myvar变量为"ABC\123\XYZ"

 [root@localhost ~]#printf "%b" "ABC\n123\nXYZ\n"

  #%b是说,将特殊字符转义生效,也就是说字符串中的n会有换行效果

  #结果如下:ABC

           123

           XYZ

 [root@localhost ~]#printf "%s\n" "ABCDEFGHIJK"|tr A-Z a-z

 #把字符串显示出来,通过管道交给tr,把大写字母转成小写.

 #结果:显示abcdefghijk

 

 

4.cd 改变目录位置

[root@localhost ~]cd

#执行后回到家目录,等同于cd ~

[root@localhost ~]cd -

[root@dns2 ~]# cd /var/log
[root@dns2 log]# cd -
/root
[root@dns2 ~]#

#回到先前的目录

[root@localhost ~]cd ..

#回到上一层目录

5.pwd 显示当前的工作目录
  1. [root@localhost ~]pwd
  2. /root
  3. #显示当前工作路径

6. :(冒号) 什么都不做,传回真值(即传回0)

  1. [root@localhost ~]: >aa
  2. 可以创建一个名字为aa的空文件

7. .(半角句号)在现行的shell环境中执行shell程序

  1. [root@localhost ~]. aa.sh
  2. 注意:.和shell程序之间至少要加一个空格提示符.
  3. .和source命令的作用相同

8.source在现行的shell环境中执行shell程序

  1. [root@localhost ~]source aa.sh

9.alias 显示、设定程序别名

  1. [root@localhost ~]alias
  2. #执行后,显示目前所有已设定的程序名称.
  3. [root@localhost ~]alias help1='help -s test'
  4. #alias 新的别名="组合的程序"
  5. [root@localhost ~]alias cp=cp
  6. #取消程序别名,cp还是原来的cp命令(默认是cp -i).

10.unalias

  1. [root@localhost ~]unalias cp
  2. #表示把cp的别名设定取消

11.exit 离开bash shell或结束Script程序

   离开shell,并传回值1

12.logout 注销login shell

  在命令行没有输入任何字符串的情况下,若按[ctrl D]组合键,其功能等同于logout指令,一样可以注销.

13.umask 显示或设定新的文件、目录的权限掩码

  1. [root@localhost ~]umask
  2. #执行后,显示当前的umask掩码
  3. [root@localhost ~]umask -S 0024
  4. #执行后,设置umask掩码为0024

14.history 显示过去曾经执行过的shell命令

  1. [root@localhost~]histroy
  2. #执行结果,显示linux主机曾经执行过的命令
  3. histroy变量:
  4. HISTFILE 查看历史记录文件名称及存储路径
  5. [root@localhost~]echo $HISTFILE
  6. /root/.bash_history
  7. HISTFILESIZE 查看文件存储的条数
  8. [root@localhost~]echo $HISTFILESIZE
  9. 1000
  10. HISTSIZE 在当前shell下保存的历史命令数量
  11. [root@localhost~]echo $HISTSIZE
  12. 1000

15.fc 列出登录主机之后,最近执行过的命令

  1. [root@localhost~]fc -l
  2. #显示登录后最近执行过的命令
  3. [root@localhost~]fc -ln
  4. #不显示命令的编号
  5. [root@localhost~]fc -l ll cp
  6. #显示ll和cp两条命令之间的历史命令
  7. 也可以使用数字,例如:
  8. [root@localhost~]fc -l 400 500
  9. [root@localhost~]fc -lr 400 500
  10. 按照编号由大到小的方式显示命令

16.type 判断bash对某一指令如何解释(个人觉得这一个命令作用是查看命令的类型)

  1. [root@localhost ~]# type fg
  2. fg is a shell builtin    //fg是一个shell的内置名in个
  3. [root@localhost ~]# type if
  4. if is a shell keyword   //if是shell的保留的字段
  5. [root@localhost ~]# type cp
  6. cp is aliased to `cp -i' //cp是'cp -i'的程序别名
  7. [root@localhost ~]# type tr 
  8. tr is /usr/bin/tr     //tr是一个独立的执行程序,程序路径是/usr/bin/tr

17.set 设定bash shell的属性;若不加任何选项和参数,它会显示所有的shell变量和函数的内容.

  1. [root@localhost~]set
  2. #查看当前shell环境变量和函数
  3. [root@localhost~]set -o|grep on
  4. [root@dns9 ~]# set -o|grep on
  5. braceexpand on
  6. emacs on
  7. hashall on
  8. histexpand on
  9. history on
  10. interactive-comments on
  11. monitor on
  12. onecmd off
  13. #查看目前shell所有的属性的开关状态
  14. #开始一个bash shell的属性:
  15. [root@localhost~]set -o emacs(属性名称)
  16. #关闭一个bash shell的属性:
  17. [root@localhost~]set +o emacs(属性名称)
  18. #保护已存在的文件,避免转向输出时被覆盖掉文件的内容.
  19. [root@localhost~]set -o noclobber
  20. [root@localhost ~]# echo 22 > aaa.txt
  21. -bash: aaa.txt: cannot overwrite existing file
  22. [root@localhost~]set -v
  23. #这个选项会使bash执行Script时,将其所读入的每一进程代码显示出来,通常用于程序排错.

18.shopt 设定Bash Shell的行为模式(与set命令类似)

 

  1. [root@localhost~]shopt
  2. #显示目前各选项的开关状态,与shopt -p执行效果相同
  3. [root@localhost~]shopt -s
  4. #启用选项
  5. [root@localhost~]shopt -u
  6. #关闭选项
  7. [root@localhost~]shopt -o
  8. #使用和set -o 相同的选项来设置
  9. [root@localhost~]shopt -q
  10. #不显示开关状态,以回传状态判断选项是开是关,0表启用,1表关闭

FROM:  http://blog.chinaunix.net/uid-25896350-id-3078747.html




<think>我们正在讨论命令命令Shell命令的关系和区别。根据引用[1],大多数情况下,Linux命令都是通过Shell执行的,因此可以被视为Shell命令。但根据来源和实现方式,命令分为Shell内置命令和外部命令。 首先,我们需要明确几个概念: 1. Shell:是用户与操作系统内核之间的接口,负责解析用户输入命令,并调用相应的程序或系统功能。 2. 命令行:通常指的是在终端(命令行界面)中输入命令的交互方式。 3. 命令命令:在命令行中输入的任何命令,包括Shell内置命令和外部命令(如/bin/rm)。 4. Shell命令:这个术语有时被用来指代在Shell中执行的命令,包括内置命令和外部命令。但严格来说,Shell命令更侧重于由Shell本身解释执行的命令(特别是内置命令)。 关系与区别: - 关系:命令命令是在命令行环境中输入的任何命令,而Shell命令行环境的解释器。因此,命令命令必须通过Shell来执行(除非是直接调用可执行文件,但即使这样,通常也需要Shell来启动)。所以,命令命令的执行离不开Shell环境。 - 区别: - 命令命令:是一个更宽泛的概念,指在命令行界面中输入命令,包括Shell内置命令和外部命令。 - Shell命令:通常指由Shell自身处理的命令(即内置命令),比如cd、echo(部分功能)等,这些命令不需要启动外部进程,由Shell直接执行。而外部命令则是独立的可执行程序,如ls、rm等,它们由Shell调用执行。 根据引用[2],命令的选项和参数也是重要的概念。例如,在`echo -n "hello"`中,`echo`是命令名,`-n`是选项,`"hello"`是参数。 总结: 命令命令Shell命令在大多数日常使用中可以互换使用,因为几乎所有命令命令都是通过Shell来执行的。但严格区分时: - Shell命令通常指Shell内置命令(由Shell直接解释执行,不创建新进程)。 - 命令命令包括Shell内置命令和外部命令(由Shell调用外部程序执行)。 我们可以用数学公式来表示关系: 设命令命令集合为 $C$,Shell内置命令集合为 $S_{builtin}$,外部命令集合为 $S_{external}$,则有: $$ C = S_{builtin} \cup S_{external} $$ 而Shell命令通常指 $S_{builtin}$,但有时也泛指 $C$(因为外部命令也是通过Shell调用的)。 注意:外部命令虽然独立于Shell,但必须通过Shell来调用(Shell负责找到它们的位置并执行)。 因此,对于初学者,可以这样理解: 在命令行中输入命令都是命令命令,而Shell命令则分为两种:一种是Shell自带的(内置命令),另一种是外部程序(外部命令)。 举例: - 内置命令:cd, echo(部分功能),pwd等。 - 外部命令:ls, rm, grep等(这些通常位于/bin、/usr/bin等目录下)。 现在,我们将按照要求生成相关问题。</think>### 命令命令Shell 命令的关系与区别 #### 一、核心关系:执行环境依赖 **命令命令必须通过 Shell 环境执行**,这是二者的根本联系: 1. **Shell 作为解释器**: 当用户在终端输入 `rm file.txt` 时,Shell 负责: - 解析命令结构(识别 `rm` 为命令主体,`file.txt` 为参数)[^1] - 调用系统资源执行操作 - 返回结果到终端界面 $$ \text{用户输入} \xrightarrow{\text{Shell解析}} \text{系统调用} \xrightarrow{\text{内核执行}} \text{结果反馈} $$ 2. **命令分类**(根据实现方式): | 类型 | 特点 | 示例 | 执行方式 | |--------------|-------------------------------|---------------|------------------------| | **Shell 内置命令** | 直接集成在 Shell 解释器中 | `cd`, `echo` | Shell 直接执行 | | **外部命令** | 独立可执行文件(`/bin/`, `/usr/bin/`) | `rm`, `ls` | Shell 调用外部程序执行 | > 💡 关系本质:**所有命令命令都是通过 Shell 执行的**,因此广义上可统称为 "Shell 命令" [^1]。 #### 二、关键区别 | 维度 | Shell 命令 (内置) | 命令命令 (外部) | |--------------|----------------------------------|--------------------------------| | **实现位置** | 内嵌在 Shell 解释器代码中 | 独立存储在文件系统的二进制文件 | | **执行效率** | 更高(无需创建新进程) | 较低(需启动新进程) | | **功能范围** | 基础环境控制(目录切换、变量设置)| 系统级操作(文件管理、网络等) | | **查看方式** | `type 命令名` → 显示 "builtin" | `which 命令名` → 显示文件路径 | **示例分析**: ```bash # Shell 内置命令 (直接执行) $ type cd cd is a shell builtin # 内置命令 # 外部命令命令 (通过路径调用) $ which rm /bin/rm # 独立可执行文件 ``` #### 三、协作流程 以 `echo -n "Hello"` 为例: 1. Shell 解析命令: - `echo` 识别为命令主体 - `-n` 识别为选项(抑制换行)[^2] - `"Hello"` 识别为参数 2. 执行判断: - 若 `echo` 是内置命令Shell 直接处理 - 若调用外部 `/bin/echo` → Shell 创建子进程执行 3. 结果输出到终端 ```mermaid graph TD A[用户输入 echo -n 'Hello'] --> B{Shell 判断类型} B -->|内置命令| C[Shell 直接执行] B -->|外部命令| D[Shell 调用 /bin/echo] C & D --> E[终端输出 Hello] ``` #### 四、初学者学习建议 1. **优先掌握 Shell 内置命令**: - `cd`:目录切换 - `export`:环境变量设置 - `source`:脚本加载 2. **常用外部命令**: ```bash ls -l /home # 列出目录(外部命令) grep "error" log # 文本搜索(外部命令) ``` 3. **验证命令类型**: ```bash $ type cd # 显示shell builtin” $ which ls # 显示“/bin/ls” ``` > ⚠️ 注意:某些命令(如 `echo`)在不同 Shell 中可能同时存在内置和外部版本,执行优先级:**内置命令 > 外部命令**。 --- ### 相关问题 1. 如何查看某个命令Shell 内置命令还是外部命令? 2. Shell 内置命令和外部命令在性能上有何差异? 3. 为什么 `cd` 命令必须是 Shell 内置命令? 4. 如何强制使用外部命令而非内置版本(如 `echo`)? 5. 不同 Shell(Bash/Zsh)的内置命令有哪些区别? [^1]: 大多数情况下,我们所说的 Linux 命令都是通过 Shell 执行的,因此可以被视为 Shell 命令[^1]。 [^2]: `echo -n` 中的 `-n` 是选项,字符串是参数[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值