查看原文
其他

Shell基础(1)-bash简介、type

Cloud研习社 Cloud研习社 2023-06-06


每周二、四、六定期更新!





为什么要有shell


基于kernel安全的考虑,用户不能直接控制硬件,也不能直接操作系统内核。于是,我们就搞出了一个叫做shell的东西,用户通过shell和内核打交道。

shell就处在内核和应用程序之间。shell翻译成中文为“壳”。充当用户和内核之间的翻译官。用户输入命令--告诉shell,shell就调用相应的程序解析命令、执行命令。

在大部分linux发行版本中,默认的shell是bash。




bash shell


  1. Bourne shellBourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型。

  2. C shellC shell又包括csh、tcsh两种类型。

 我们来看看当前系统中有哪些类型的shell:


[root@studyclub zhuo]# cat /etc/shells # 查看有哪些shell类型
/bin/sh
/bin/bash # 大部分Linux发行版默认的shell类型
/usr/bin/sh
/usr/bin/bash

[root@studyclub ~]# echo $SHELL # 查看默认的shell类型
/bin/bash





bash的功能


命令与文件补全功能:

还记得我们学习以来一直使用的[tab]键吗,是不是在敲命令的时候或输入文件名的时候,我们还没有把单词拼写完成,tab两下就自动补全了呢,总结对照一下看看是不是下面的规律:

  • 如果命名没有写全直接按两下[tab],则会自动补全命令
  • 如果是在命令中用空格和命令分开,按两下[tab],这时候出现的是目录或文件名的补全
  • 如果想自动补全参数,则需要安装一个工具:bash-completion

技巧:敲命令或者输入路径的时候记得多敲几下[tab],这会让你的输入既快捷又准确。

设置命令别名:alias、unalias

我们知道,在用ls命令去查看文件的时候,不同的文件类型会显示为不同的演示,例如目录显示为蓝色,普通文件显示为白色,可执行文件显示为绿色等等。那么这是怎么做到的呢,我们看看ls的命令的使用:
[root@studyclub ~]# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
......
     --color[=WHEN] colorize the output; WHEN can be 'never', 'auto',
                               or 'always' (the default); more info below
.....
Using color to distinguish file types is disabled both by default and
with --color=never. With --color=auto, ls emits color codes only when
standard output is connected to a terminal.
......


我们通过查看ls命令的帮助文档发现,ls有一个选项是--color,他的作用就是用来设置输出信息的颜色,让用户可以根据颜色区分不同的文件类型。那为什么我们输入ls返回的内容会有颜色呢?细想一下,如果每次都输入ls --color=auto这一串内容,输入会很麻烦,所以为了方便大家的使用,系统为我们配置了命令别名:

[root@studyclub ~]# alias ls    # 查看ls的命令别名
alias ls='ls --color=auto'


看到了吗,我们现在使用ls命令就相当于直接输入了“ls --color=auto”。这和我们数学里面的方程式一样,如果a=25,那么我们用a计算方程式a+12=?的时候,自然就能知道a就是25。

设置命令别名也很简单:


[root@studyclub ~]# alias jasonlist='ls -l'        # 设置一个ls -l命令的别名,
[root@studyclub ~]# jasonlist # 使用刚才的别名看看效果
total 170860
-rw------- 1 root root 1486 Feb 17 16:51 anaconda-ks.cfg
-rw-r--r-- 1 root root 60 Mar 23 17:28 args.sh
......


取消设置别名:
[root@studyclub ~]# unalias jasonlist # 取消前面设置的别名
[root@studyclub ~]# jasonlist # 验证取消设置别名的操作是否成功
-bash: jasonlist: command not found





查询命令是否为bash shell的内置命令:type


我们使用的指令当中,有些指令是bash自带的,我们称为内置命令,有些不是bash自带的,我们称为外部命令。我们来看看怎么确认我们用的某个指令是内部自带的命令还是外部命令。
[root@studyclub ~]# type [-tpa] command
选项与参数:
    :不加任何选项与参数时,type 会显示出 command 是外部命令还是 bash 内部命令
-t :当加入 -t 参数时,type 会简单直白的显示 command 的意义:
      file :表示为外部命令;
      alias   :表示该命令为命令别名所配置的名称;
      builtin :表示该命令为 bash 内建的命令功能;
-p :如果后面接的 command 为外部命令时,才会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 command 的命令都列出来,包含 alias


例子:

1. 查询ls
[root@studyclub ~]# type -a ls # 列出所以PATH变量中定义的ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

[root@studyclub ~]# type ls # 显示ls是外部命令还是内部命令
ls is aliased to `ls --color=auto'


[root@studyclub ~]# type -t ls # 简洁的显示ls命令的类型
alias                  # 表示当前的ls是命令别名,去掉-t选项后可以查看是哪个命令的别名。


2. 查询cd
[root@studyclub ~]# type cd
cd is a shell builtin

[root@studyclub ~]# type -t cd
builtin

[root@studyclub ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd

新手应知:

    尝鲜Rocky Linux

《Linux基础及进阶》:

    044 - 进程管理与计划任务(5)-crontab
    045 - 服务管理和启动流程(1)-systemctl启动服务、查看服务
    046 - 服务管理和启动流程(2)-target unit、systemd、运行级别
    047 - 服务管理和启动流程(3)-服务依赖、创建自己的systemd配置文件
    048 - 服务管理和启动流程(4)-启动流程


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存