如果想在 Linux 中切换用户
su [-] <user-name>
那么中间的那个-
是什么鬼呢?
如果加了这个-
, 那么使用的是login shell
, 可登陆的 shell
如果没有加, 那么使用的是nologin shell
, 不可登陆的 shell
查看系统的 shell, 但是注意, 赫尔上面讲的login shell
, nologin shell
没有关系
cat /etc/shells
结果中就有两个 shell:
/sbin/nologin
/usr/sbin/nologin
查询 shell 的配置文件
rpm -qc bash
这个问题牵扯 Linux 中几个环境配置文件
- 系统级别
1.1/etc/profile
1.2/etc/bashrc
- 用户级别
2.1~/.bash_profile
2.2~/.bashrc
2.3~/.bash_logout
2.4~/.bash_history
login shell在登陆 shell 的时候会执行 1.1, 1.2 , 2.1, 2.2 , 离开的时候执行 2.3, 2.4
nologin shell在登陆 shell 的时候会执行 1.2, 2.2 , 离开的时候执行 2.3, 2.4
login shell 相对于 nologin shell 来说多了加载该用户环境的环节
以下是相关的一些补充
修改某个用户登录的 shell
usermod -s /bin/bash <user-name>
shell 中一些常用技巧
- 上下键: 历史命令
- !<number>: 打印 ~/.bash_history中第<number>命令, 再执行该条命令
- !<string>: 打印以<string>开头的命令执行
- !$: 上一个命令的最后一个参数
- !!: 上一条命令
- ^R: 搜索历史命令
^Z+fg
经常用在 vi 中, 比如正在编辑 vi, 忽然想起没有复制 ip,这个时候就可以^Z, 将当前程序放在后台, ifconfig 之后复制 ip, 再 fg 进入刚才 的 vi 状态, NICE!!!!!!!!!!!!!!!!!!!!!
将内容同时输出到文件和屏幕
date |tee date.txt
echo带有颜色的输出:
$ echo -e "\e[1:<color-num>m<output-text>\e[0m"
其中:
<color-num>
为颜色值, 前景色30~37, 背景色40~47;
<output-text>
是要输出的文本
Shell中查看一个单词是不是关键字
$ type -a <word>
显示一个文件路径的文件名
$ basename <path-string>
显示一个文件路径的文件夹
$ dirname <path-string>
shell and sub-shell
- sub-shell 中执行的写法
$ bash test.sh
# or
$ ./test.sh
- 当前 shell 中执行
$ . test.sh
# or
$ source test.sh