bash常用命令集锦
以下主要用 bash
作为终端实例
一. shell 配置
1. 输入提示 (prompt)
指的是在未输入任何命令时在终端开头的提示,可以展示当前的用户、时间、当前工作目录,甚至 git
状态。每执行完一个命令或函数之后会更新提示
输入提示由 bash 的环境变量 PS1
决定,最简单的修改方式如:
PS1='[\t] \W '
提示就会变成类似这样
[10:52:12] ~
还有更高端的github上的配置,自己的配置就是基于这个版本的修改版
2. 命令自动补全
随着系统的使用时间越来越长,免不了会装各种命令程序,最终可能会有成千上万的可执行命令,如果不是常用命令,很难一次就输入正确,虽然也比较浪费时间,所以一个命令补全显得十分有必要
大多数linux的发行版本里都会有最基本的命令补全,当在命令行输入 ls
时,按下两次 tab
,应该会得到以下输出:
1 | $ ls |
会在下一行开始,显示出所有以 ls
开头的命令
当输入的长度对应的可选命令只有一个候选时,按下一次 tab
即可完全补全命令,如果侯选命令都有比输入更长的相同开头,一次 tab
会补全到那个更长的开头
比如候选命令包括
abc abd abe
那么输入 a
后一次 tab
即可补全到 ab
当然还有命令级别的自动补全,比如 apt
, npm
, pip
这些命令都是提供了参数级别的自动补全,不过需要配置就是了,比如需要安装 bash-completion
,然后将对应的补全脚本放在合适的地方,补全脚本可能是原本在安装软件的时候提供的,程序自己也可以提供这样的补全脚本,提示用户放在正确的位置。
比如执行 npm completion
,会输出补全脚本,其中注释里会提示
1 | # |
这些补全脚本可以极大的提高命令使用的舒适度
自动补全大小写忽略
如果有时候命令或者参数里包含大写的字符,可能输入会麻烦一点,所以可以进一步偷懒
执行 echo 'set completion-ignore-case on' >> ~/.inputrc
即可,在下一次开启bash实例的时候就会生效,多用在自动匹配文件名上
3. bash启动提示
即在每次开启bash时输出的提示,类似这样:
1 | _______________________________________ |
精心设计的字符画,加上一段名言,也可以五彩缤纷的
基本原理就是在每次bash开始时,会按顺序导入一堆配置文件,执行命令或者修改环境变量等等
这里可以修改和用户最近的配置文件 $HOME/.bashrc
,这里能发现很多重要的配置,很多地方都会用到
个人配置如下(命令大概需要额外安装):
1 | cows=(beavis.zen blowfish bong bud-frogs bunny cheese cower daemon default dragon-and-cow dragon elephant-in-snake elephant eyes flaming-sheep ghostbusters hellokitty kiss kitty koala kosh luke-koala meow milk moofasa moose mutilated ren satanic sheep skeleton small stegosaurus stimpy supermilker surgery three-eyes turkey turtle tux udder vader-koala vader www) |
大概输出过程包括随机选择字符画模板,输出名言,字符画,彩虹输出
4. 命令快捷方式
核心就是 alias
函数
大多数能看到的最多的使用场景,应该是 ls
命令
比如实际执行 ls
的时候,会出现彩色的输出
可以在 $HOME/.bashrc
里看到
1 | alias ls='ls --color=auto' |
意思就是在执行 ls
时,其实自带里一个参数 --color=auto
在执行 ll
的时候,其实执行的是 ls -l
自己比较常用的方式还包括
1 | alias blogs='ssh blogserver' # ssh到blogserver时,仅需要执行 blogs 即可 (当然,这需要ssh配置正确) |
如果想要跳过快捷方式,直接执行命令,比如 ls
,那么用完整的命令路径即可,如 /bin/ls
,可以通过 which ls
找到 ls
的完整命令路径
二. 常用命令
资源管理
ls
当之无愧最常用的命令,列出当前或指定路径的文件信息,除了最基本的 ls
无参数执行外,还有 ls -l
等
有一个不常用,但是曾经解救人于危难的参数 ls -li
输出如:
1 | $ ls -li |
第一列输出了文件的 inode 号,是某个文件在一个分区上的唯一索引号,如果两个文件的索引号一致,那肯定是同一个文件。当一个文件的文件名不能在终端上显示为参数时,这个索引号就很重要了
比如要删除一个特殊文件名的文件 -
或者乱码的文件 (在终端里用unrar解压一个Windows环境下压缩的rar文件)
首选需要找到要删除文件的inode号,然后用 find
执行删除 find . -inum {inode} -delete
或者删除目录 find . -inum {inode} -exec rm -rf {} +
控制 ls 染色
通过环境变量 LS_COLORS
,写在 .bashrc
即可
示例:
1 | export LS_COLORS="*.yml=01;35:$LS_COLORS" |
将 *.yml
染为紫色
ln
全称应该叫 link
,用于生成链接,一般是硬连接或者软连接
软连接是创建一个文件,并指向目标文件(linux中一切皆文件),目的是创建一个文件的快捷方式,删除之后,只是把快捷方式删除而已,不影响目标文件
通过 ln -s
创建
1 | # echo fine > linux |
硬连接让一个文件拥有多个可用路径,可以用于备份,防止误删除等
1 | # ln linux h |
创建硬连接比软连接更简单,没有 -s
参数,创建的硬连接和源文件指向同一个文件,可以看到两者 inode 索引相同,和软连接不一样,本身也并没有导致磁盘空间占用的翻倍。
软硬连接对比:
- 软连接创建了新的文件,硬连接并没有
- 软连接可以连接到文件系统内任何地方,硬连接限制在当前设备,否则会报错
Invalid cross-device link
,这和文件系统有关 - 硬连接会增加文件索引数,如上面展示的
ls -li
结果中的第三列,由原本的 1 增长为 2,表示该文件的硬连接数为 2,软连接不会增加该指数
特别点:一个目录的硬连接数 = 子目录数 + 2
一个目录的每个子目录都会有一个硬连接叫 ..
指向父路径,所以是 子目录数
,该目录自身是一个文件,所以硬连接数 +1
,然后该目录里还有一个 .
指向当前路径,所以硬连接数 +1
rm
万能删除 rm -rf xxx
,除了 /
大概都能通通删掉
cd
change directory
切换当前路径
默认动作:
cd
回到用户 home 目录
cd -
回到前一个目录
mkdir
创建目录
mkdir -p a/b/c/d
一路创建目录到 a
lsof
端口资源查看,如查看某端口被那个进程占用
1 | # lsof -i :80 |
df
展示硬盘占用情况
du
展示给定路径的资源占用
组合命令: du -hc . | tail -n 1
获取当前目录总大小
find
搜索文件
按照文件名搜索: find . -name \*.py
搜索当前路径下所有 .py 文件
按照文件类型搜索: find . -type d
搜索当前路径下所有目录类型
tree
按照树形结构展示目标路径:
1 | # tree x |
netstat
查看端口占用情况
1 | # netstat -ntpl |
常用组合 netstat -ntpl
进程管理
ps
进程列表
常用组合 ps -ef | grep xxx
: 搜索给定进程
1 | ps -ef | grep nginx |
各列分别表示:用户,进程号,父进程号,class,进程开始时间,TTY,CPU时间,命令
kill
给指定进程发送信号,不仅仅是 SIGKILL
一般先通过 ps
找到目标进程id,kill -9 {pid}
htop
动态展示系统进程状态 (比 top 直观)
工具类
文本处理程序
如:awk, grep, tail, head, less, more, cat, sort
每个命令都很少单独使用,大多数时候都是组合在一起
例子:
- docker同时持续查看多个容器日志的关键词
1 | docker ps | grep xxx | awk '{print $1}' | xargs docker inspect --format {{.LogPath}} | xargs tail -f | grep keyword |
ssh
通过ssh协议访问目标机器
首先生成ssh 公钥密钥对
1 | # ssh-keygen -t ecdsa -C hellflame |
然后在服务端部署公钥
将 key.pub
里的内容写进服务端 $HOME/.ssh/authorized_keys
,如果没有这个文件,创建之后,文件权限需要限制只允许当前用户有读权限
一般为了安全,在服务端可设置仅允许通过 ssh key 登陆,在 /etc/ssh/sshd_config
配置 PasswordAuthentication no
,拒绝密码登陆
更新之后重启sshd即可
1 | service sshd restart |
配置本地ssh公钥
在当前客户端,$HOME/.ssh/config
文件中添加配置如:
1 | Host xxx.xx.xx.x |
其中 /path/to/key
指向刚生成的密钥路径
本文作者 : hellflame
原文链接 : https://hellflame.github.io/2021/01/01/bash-command-summary/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!