Linux操作技巧
本文转载自labuladong的算法小抄,个人学习积累使用。
1. 标准输入和命令行参数区别
- 管道符
|
,文件重定向>
,变量$
。 - 删除脚本:
$ where connect.sh | rm
# 这种方法是错误的
$ rm $(where connect.sh)
# 这种方法是对的
前一种方法试图将where的结果连接到rm的标准输入。
标准输入就是scanf、readline这种命令。
后一种方法将结果作为命令行参数传给rm。
命令行参数类似args字符数组。
- rm只接受命令行参数,而cat接受两种方式。
2. 后台运行程序
- (cmd &)使程序不发生阻塞,且退出服务器后依然可以访问web服务:
$ python manager.py runserver 0.0.0.0
# 这种写法会阻塞,无法继续输入内容
$ (python manager.py runserver 0.0.0.0&)
# 这种写法就不会造成阻塞,而且退出服务器后依然可以访问web服务
$ kill $(ps -aux | grep "runserver")
# 这种方法删除后台指定命令
- 原理是:(cmd &)将cmd命令挂到一个systemd系统守护进程名下。
3. 单引号与双引号的区别
- 对于
$
、(
、)
这几个符号,单引号包围的字符串不会转义,而双引号包围的字符串会转义。 - 如果
$
读取的字符串包含空格一类,应该使用双引号括起来,否则会报错。
4. sudo找不到命令
- 使用sudo时,系统会使用
/etc/sudoers
这个文件规定的该用户的权限和环境变量。 - 当命令不在
/etc/sudoers
环境变量目录中时,可以使用脚本文件的路径,而不仅仅是脚本名称。
$ sudo /home/bluestragglers/connect.sh
5. 输入相似文件名技巧
- 用花括号括起来的字符串用逗号连接,可以自动扩展。注意花括号内部不应有空格。
$ echo {one,two,three}file
onefile twofile threefile
$ echo {one,two,three}{1,2,3}
one1 one2 one3 two1 two2 two3 three1 three2 three3
$ cp /bluestragglers/file{,.bak}
# 给file复制一个叫file.bak的副本
$ rm file{1,3,5}.txt
# 删除file1.txt、file3.txt、file5.txt
$ mv *.{c,cpp} bluestragglers/
# 将所有c、cpp后缀的文件都移动到bluestragglers中
6. 输入路径名技巧
- 返回刚才的目录:
cd -
。 - 上次命令的路径:
!$
。 - 上次命令所有文件的路径:
!*
。 - 加入常用工作目录:
export CDPATH='bluestragglers'
7. 输入重复命令技巧
- 输入上次命令:
!!
- 反向搜索历史命令:
Ctrl + R
- 搜索某个历史命令:
history | grep 'bluestragglers'
、!123
- 简化搜索:
export .bashrc='his(){history | grep "$@"}'
、his bluestragglers
8. 其他技巧
- 自动输入yes:
yes | cmd
- 记录上次命令返回值:
$?
- 记录当前进程PID:
$$
Comments | NOTHING