最流行的shell,bash介绍及入门
- Bash
- 命令窗口
- 快捷键
- 通配符
- 命令历史
- 命令别名
- 命令缓存
- 命令帮助
- 常用命令
- 文件目录命令
- 文本命令
- 压缩命令
- 进程命令
- 系统管理命令
- 磁盘命令
- 上传下载命令
Bash
目前主流的Linux发行版都预装了bash,而且在Redhat系上sh是bash的软链接
命令窗口
登录后,首先看到的是命令提示符,一般是
登录名@主机名:当前路径$
,例如
root@pc2020-virtual-machine:~#
,如果最后是
$
表示普通用户,
#
表示root用户,环境变量
PS1
控制命令提示符的样式。
一个命令窗口就是一个会话, 运行一个命令类似浏览器打开一个标签, 通过
jobs
可以查看所有任务,
fg
切换到前台,
bg
切换到后台, 利用
nohup
和
&
可以运行与终端无关的后台任务, 利用
screen
可以保持断线后任务继续运行, 用户退出后一般的任务都是与终端关联的, 终端没了, 任务也就自动结束了
快捷键
作为最常用的命令行环境,快捷键可以极大的提高效率。
TAB键
:最常用的就是,可以自动补全文件和目录的路径,也可以补全命令
鼠标中键
:复制粘贴是非常高频的动作,鼠标左键选中,中键粘贴,特别常用
Ctrl + L
:屏幕上内容非常多时,清屏
Ctrl + U
:清除光标到命令提示符的内容
Ctrl + K
:清除光标到末尾的内容
Ctrl + A
:不是全选,而是移动光标到行首
Ctrl + E
:移动光标到行尾
Ctrl + C
:取消命令的执行,实际是发送中断信号
SIGINT
给进程,例如
ping
是不会自动停止的,这个快捷键可以立即停止
Ctrl + R
:搜索历史命令
!!
:两个感叹号,重复执行上次的命令,
history
记录着历史命令,
!2
,倒数第二次运行的命令
!CMD
:重复执行上次以CMD开头的命令,例如,
!git
,执行以git开头的上一个命令
通配符
Linux的通配符特别简单, 只有三个,
*
表示所有,
[0-9]
表示范围中的一个,
?
表示任意一个
表示范围的常用集合:
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
[^[:digit:]]
,表示匹配非数字
命令历史
history
,显示命令历史,命令是历史记录,一般保存在
~/.bash_history
,可通过
HISTFILE
指定
HISTFILESIZE=2000
,指定历史记录的条数为2000,默认为500条
HISTCONTROL=ignorespace:ignoredups
,可配置忽略重复的和空格开头的命令,Ubuntu默认如此
HISTTIMEFORMAT=\"%F %T \"
,记录命令的执行时间
help history
,显示帮助信息
history -c
,清除所有历史记录
history -d 1
,清除第一条
history -s xxx
,向history中添加xxx
history -w
,保存当前记录到历史记录文件
命令别名
help alias
,查看帮助
alias
,显示所有命令别名
alias gt =\'git status\'
,设置
git status
的别名为gt,如果想要永久有效,需要配置到配置文件
~/.bashrc
中
unalias gt
,取消gt别名
\\ls
,使用ls命令本身执行
命令缓存
help hash
,显示帮助
hash
,显示所有命令缓存
hash -p /usr/local/ls ls
,设定
ls
的缓存路径为
/usr/local/ls
hash -r
,清除所有缓存
hash -d ls
,删除
ls
的缓存
命令帮助
一般使用
xxx --help
查看命令的简短帮助信息
type xxx
, 显示xxx是内建命令, 还是外部命令
help xxx
, 显示内建命令的帮助信息
man xxx
, 显示xxx的man手册,
man man
查看man命令的man手册
man crontab
, 显示
crontab
命令的man手册
man 5 crontab
, 显示crontab文件的man手册
对于比较复杂的命令, 一般使用网络上的常用参数和参考示例, 见末尾
常用命令
which
命令可检查命令是否存在,如果有则返回命令的路径
whereis
, 不仅可以搜索命令,还可以搜索man文档和其他文件
文件目录命令
pwd
, 打印当前工作目录
cd xxx
, 切换到xxx目录,
~
表示家目录,
-
表示上一次的目录,
.
表示当前目录,
..
表示上级目录
ls
, 列出目录中的文件,
ls -l
, 长格式,
ls -a
所有文件, 其他参数还有
tArRidh
stat xxx
, 查看文件的元数据
chmod 644 xxx
, 修改文件的权限, 文件默认权限为644, 表示本人可读写, 其他可读, 目录为755, R表示递归修改权限
chown xxx:xxx yyy
, 修改文件的属主为xxx, 属组为xxx, 同样R可递归修改
rmdir xxx
, 删除空目录
mkdir -p xxx/yyy/zzz
, 递归创建目录
rm xxx
, 删除文件, f参数可强制删除, r递归删除
cp -a xxx yyy
, 归档复制文件, 即保留文件的时间属主权限等信息
mv xxx yyy
, 移动文件, i参数可交互式移动, f可强制覆盖
文本命令
最常用的是less查看文本, vim修改文件
vi
, 默认进入的是命令模式, ,
a
可以追加并切换到插入模式,
o
增加一行, 并进入插入模式,
i
直接进入插入模式,
ESC
键可退出插入模式,
:
进入单行命令模式,
:wq
保存退出,
:q!
强制退出, 其他的编辑器还有gedit, 图形界面类似记事本, nano命令行的文本编辑器
Ubuntu中默认情况下, 使用兼容模式, 方向键不会移动光标, backspace没有删除的功能,
hjkl
分别是左下上右键,
x
键可以删除一个字符
加上下面两行配置可正常使用方向键和退格键, 可配置到
.vimrc
中
set nocompatibleset backspace=2
一般写代码需要缩进, 一般使用4个空格代表一个制表符, 常用phpMyAdmin的配置:
set expandtabset ts=4set sts=4set sw=4
但Linux kernel中却是
tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab
less -N xxx
查看文本, 可以使用方向键和空格翻页, N可显示行号, q退出, 对于大文件的优化特别好, 帮助信息简单明了, 支持正则搜索, 支持标记和导出
其他命令还有:
cat tac more tail head tailf
tail -f xxx
, 跟踪文件的内容
tail -c 200MB xxx > yyy
, 导出文件的最后200MB到另一个文件,
+200MB
,表示文件的前200MB
find . -name \"*.mp4\" -exec ls -l {} \\;
, 查找并列出文件
find . -name \"*.mp4\" | xargs ls -l
, 利用xargs可以自定义参数的传递方式
fgrep xxx /var/log/secure
, 文本中搜索指定的字符, 速度非常快, 没有使用正则
grep -E
, 扩展的正则, 因为基本正则许多字符都需要转义, 常用扩展的,
grep -P
, 使用perl的正则
grep -E \'^(r[a-p]{2}t).*?\\1.*?\\1\' /etc/passwd
, 匹配root, 并随后出现两次
压缩命令
最常用的是tar,其次是gzip和zip
tar cvf xxx.tar.gz yyy
, 创建压缩文件, 需要cd到上一层目录, gz表示使用gzip格式, xz表示使用bzip2格式
tar xf xxx.tar.gz
, 解压缩文件
ls -l | gzip > xxx.gz
, 表示将命令的输出结果压缩为文件
进程命令
ps aux
或
ps -ef
, 显示所有进程
pgrep
, 搜索进程
kill -s SIGHUP xx
, 给进程发送一个指定的信号
pkill xxx
, 根据进程名结束进程
yum -y install lrzsz
, 安装程序包
rpm -iv xxx.rpm
, 安装rpm包
系统管理命令
shutdown -h now
, 立即关机,
shutdown -h +5
, 5分钟后关机,
shutdown -h 16:48
, 指定时间关机,
shutdown -c
, 取消关机
reboot
, 立即重启
passwd
, 设定当前用户密码,
passwd www
, 设定www用户的密码, 此命令还有锁定用户等功能
su - www
, 切换到www用户, 环境变量一并切换,
su - www -s /bin/bash -c ls
使用www用户身份, 以bash执行ls命令
sudo -u www ls
, 以www身份执行ls, 如果不指定用户, 则以root用户执行, 使用
visudo
可以添加sudo权限
磁盘命令
free -mh
, 查看内存容量
df -h
, 查看磁盘容量
du -sh
, 查看目录所占的磁盘大小
mount
, 用于挂载磁盘
上传下载命令
最常用的就是sftp, 通过
get
,
put
上传下载, 但是多层转发比较麻烦, 还有通过ftp协议的lftp
其次就是
rz
上传,
sz
下载, 可以穿透多层主机, 比如通过Nginx主机ssh登录MySQL, 可以直接上传下载
rz -y
, 覆盖上传
最后就是通过HTTP协议的curl和wget
wget默认自动302转发, 而curl默认不会
配置文件
配置文件分为两类,环境变量及登陆后的程序类profile,函数及别名类bashrc。
配置文件路径:
/etc/bashrc
、
/etc/profile
、
/etc/profile.d/
、
~/.bashrc
、
~/.bash_profile
交互式登陆,就是要输入用户名密码的登陆和
su - USERNAME
等
依次加载:
/etc/profile.d/*.sh
、
/etc/profile
、
/etc/bashrc
、
~/.bashrc
、
~/.bash_profile
Ubuntu系依次加载:
/etc/bash.bashrc/etc/profile.d/test.sh/etc/profile/root/.bashrc/root/.profile
非交互式登陆,桌面中打开终端和
su USERNAME
等
依次加载:
/etc/profile.d/*.sh
、
/etc/bashrc
、
~/.bashrc
Ubuntu系依次加载:
/etc/bash.bashrc/root/.bashrc