shell 一些特性
login & nologin shell
系统级
这两个 /etc/profile
、 /etc/.bashrc
是进入
shell 时,执行的
用户级
这两个是登录 shell 时执行的:
~/.bash_profile
~/.bashrc
这两个是离开 shell 时执行:
~/.bash_logout
~/.bash_history
, 其中
history
命令是实时更新的,本次 shell
的命令历史存在缓存里面,在退出 shell 时才会写入到
~/.bash_history
。(注意:如果使用 zsh 的话,则为
~/.zsh_history
)
login shell
使用 su - violetu
切换(注意:有 -
),切换/登录 login shell 会执行这四个 /etc/profile
、
/etc/.bashrc
、 ~/.bash_profile
、
~/.bashrc
,离开时,
nologin shell
使用 su violetu
切换, 切换/登录 nologin
shell,只会执行这两个: /etc/.bashrc
、
~/.bashrc
。
shell 查看与更改
查看当前正在使用的 shell
echo $SHELL
ps
echo $0
- 输入不存在的命令,查看出错的 shell 提示
查看系统中安装了哪些 shell
cat /etc/shells
改变当前 shell
chsh -s /bin/zsh
GNU/bash shell 特点
Tab 命令自动补齐
命令历史记忆功能 上下键、、
!string
、!$
、!!
、^R
下面的有些指令,可能在我们人使用时,价值不大,但是它们写 shell 脚本时,可以发挥作用。
上下键
!number
:跟木 number 显示并执行 history 中对应第几条的命令!stirng
, 找到最近一个以 string 开头的命名,例如:!da
找到你最近执行的、以 d a 开头的命令!$
引用上一个命令的最后一个参数1
2
3
4
5
6
7
8violetv at manjaro in ~ [20:59:39]
cd ~/Downloads
violetv at manjaro in ~/Downloads [20:59:48]
ll !$
violetv at manjaro in ~/Downloads [21:00:00]
ll ~/Downloads!!
上一个命令
定义别名
alias、unalias 临时定义/解除定义临时别名
~/.bashrc
、~/.zshrc
定义永久的别名\命令
不使用该命令的别名1
2
3
4
5
6
7
8
9
10
11
12violetv at manjaro in ~ [21:19:07]
alias cd="echo this is cd temp alias"
violetv at manjaro in ~ [21:19:23]
cd
this is cd temp alias
violetv at manjaro in ~ [21:19:24]
\cd ~/Downloads
violetv at manjaro in ~/Downloads [21:19:32]
快捷键
详细见:让你提升命令行效率的 Bash 快捷键 [完整版] 常用: Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Alt + f :按单词前移(右向) Alt + b :按单词后移(左向) Ctrl + w :从光标处删除至字首 Alt + d :从光标处删除至字尾 Ctrl + r:逆向搜索命令历史 Ctrl + l:清屏 Ctrl + c:终止命令 Ctrl + z:挂起命令 Ctrl + s:阻止屏幕输出(zsh 不适用) Ctrl + q:允许屏幕输出 Ctrl+d: (Terminate input, or exit shell) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入 exit 后回车;
元字符(通配符)
*
匹配任意多个字符ls ln*
、rm -rf *
、rm -rf *.pdf
、find / -iname "*-eth0"
?
匹配任意一个字符[]
匹配括号中的任意一个字符[abc] [a-z] [0-9] [^a-z0-9]
()
在子 shell 中执行命令,不影响当前 shell。 例如:改变 umask,然后创建文件(只希望它影响创建的那个文件的权限),那就可以在 子 shell 中执行命令。 umask 指定默认的文件权限,两种查看方式:umask
返回的是去除的权限,其中文件基数为 666,目录为 777, 即:文件夹权限是777
-其返回结果,文件权限是666
-其返回结果umask -S
返回文件创建的默认权限的符号化表达。1
2
3
4
5
6
7violetv at manjaro in ~/test [8:56:05]
umask
022
violetv at manjaro in ~/test [8:56:12]
umask -S
u=rwx,g=rx,o=rx{}
集合 逗号:touch test{1,3}
指 test1 和 test3mkdir ~/{111,333}
指在 home 目录下创建 111 和 333 目录 两个点:touch test{1..3}
指 test1 和 test31
2
3
4
5
6violetv at manjaro in ~/test [9:02:13]
touch test{1,3}
violetv at manjaro in ~/test [9:02:07]
ll|grep "test[.]*"
-rw-r--r-- 1 violetv violetv 0 6月 30 09:01 test1
-rw-r--r-- 1 violetv violetv 0 6月 30 09:01 test3复制技巧:
1
2
3
4
5
6
7
8violetv at manjaro in ~/test [9:13:56]
cp -rv ~/test/{xx.config,xx.config.old}
'/home/violetv/test/xx.config' -> '/home/violetv/test/xx.config.old'
再简写
violetv at manjaro in ~/test [9:16:19]
cp -rv ~/test/xx.config{,.old}
'/home/violetv/test/xx.config' -> '/home/violetv/test/xx.config.old'\
转义字符 以下为转义*
和转义回车1
2
3
4
5
6
7
8violetv at manjaro in ~/test [9:17:19]
echo \*
*
violetv at manjaro in ~/test [9:17:22]
echo \
> hello
hello