鸟哥私房菜笔记

鸟哥私房菜笔记 ~

原站地址:鸟哥私房菜

第十章:认识与学习BASH

1、通过 cat /etc/shells 命令可以查看当前系统有多少我们可以使用的shells

1
2
3
4
5
[root@harrison ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

2、通过 cat /etc/passwd 命令可以查看登录用户使用的是哪一个shell在工作

1
2
3
4
5
6
7
[root@harrison ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
...省略...

3、bash中可以通过「上下键」输入历史指令,这是因为历史指令存放在 ~/.bash_history 文件中,但是只有用户退出登录后才会记录到 ~/.bash_history ,登录时所输入的指令记录在内存中。

4、通过type可以知道指令是否为内部指令

1
2
3
4
5
6
7
8
9
type [-tpa] name
选项与参数:
    :不加任何选项与参数时,type 会显示出name 是外部指令还是bash内部指令
-t :当加入-t 参数时,type 会将name 以底下这些字眼显示出他的意义:
      file :表示为外部指令;
      alias :表示该指令为命令别名所设定的名称;
      builtin :表示该指令为bash内部的指令功能;
-p :如果后面接的name 为外部指令时,才会显示完整档名;
-a :会由PATH 变数定义的路径中,将所有含name 的指令都列出来,包含alias

例如:

1
2
3
4
[root@harrison ~]# type ll
ll is aliased to 'ls $LS_OPTIONS -l'
[root@harrison ~]# type cd
cd is a shell builtin

5、如果指令太长,可以通过 \ 来进行多行拼接

1
2
[root@harrison ~]#  cp /var/spool/mail/root /etc/crontab \ 
> /etc/fstab /root

6、环境变量 能不能在任何目录下执行某个指令,与PATH这个变量有很大的关系。例如你下达ls这个指令时,系统就是通过PATH这个变量里面的内容所记录的路径顺序来搜寻指令的!如果在搜寻完PATH变量内的路径还找不到ls这个指令时,就会显示「command not found」的错误信息了。 常用的环境变量有:PATH、HOME、MAIL、SHELL等。 在linux下执行:

1
2
3
4
5
6
7
8
[root@harrison blog]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/go/bin:/root/bin
[root@harrison blog]# echo $HOME
/root
[root@harrison blog]# echo $SHELL
/bin/bash  # 当前使用的shell是bash
[root@harrison blog]# echo $MAIL
/var/spool/mail/root

在Mac下执行:

1
2
$ echo $SHELL
/bin/zsh  # 当前使用的shell是zsh

7、变量相关

  • 变量赋值:myName=Harrison
  • 若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:export myName

什么是『子程序』呢?就是说,在我目前这个shell的情况下,去启用另一个新的shell,新的那个shell就是子程序啦!

  • 使用declare可以将环境变量变成变量:declare myName
  • 取消变量:unset myName
  • $ 表示关于本shell的PID
1
2
[root@harrison ~]# echo $$
27997     # 表示当前shell执行的PID
  • ? 表示上个执行指令的返回值:一般来说,如果成功的执行某指令,则会返回一个0,如果执行过程发生错误,就会返回「错误代码」
1
2
3
4
5
6
7
8
[root@harrison ~]# echo $$
27997
[root@harrison ~]# echo $? 
0           # 上一个指令echo $$执行成功,所以返回0
[root@harrison ~]# myName= Harrison  # 给myName变量赋值,=后面不能有空格,否则执行失败
-bash: Harrison: command not found
[root@harrison ~]# echo $?
127        # 上一个指令myName= Harrison执行失败,所以返回127

8、bash环境的设置 开始介绍bash的设置前,我们一定要先知道的就是login shell与non-login shell!重点在于有没有登入(login) 啦!

login shell:取得bash时需要完整的登入流程的,就称为login shell。举例来说,你要由tty1 ~ tty6登入,需要输入使用者的帐号与密码,此时取得的bash就称为「login shell」啰; non-login shell:取得bash界面的方法不需要重复登入的举动,举例来说,(1)你以X window登入Linux 后, 再以X的图形化介面启动终端机,此时那个终端界面并没有需要再次的输入帐号与密码,那个bash的环境就称为non-login shell了。(2)你在原本的bash环境下再次下达bash这个指令,同样的也没有输入帐号密码, 那第二个bash(子程序)也是non-login shell。

login shell与non-login shell环境设置读取的资料是不一样的。login shell只会读取/etc/profile~/.bash_profile~/.bash_login~/.profile;而non-login shell只会读~/.bashrc

/etc/profile:这是系统整体的环境设置,你最好不要修改这个档案,同时在该文件中还会调用其他环境配置文件,具体可查看鸟哥私房菜的10.4.3;想要为系统设置别名或函数可以在/etc/bashrc中设置 ~/.bash_profile:属于使用者个人设置,你要改自己的资料,就写入这里

0%