Bash
shell是Unix操作系统下的用户交互的界面,也是控制系统的脚本语言。
bash是shell的一种,Linux中默认的shell就是Bourne-Again shell(简称bash)。
ssh远程连接
8minofsuns-Mac-mini:~ 8minofsun$ ssh root@118.126.91.55
root@118.126.91.55's password:
目录相关
查看当前所在目录
pwd
移动到指定目录
## 移动到根目录/
cd /
## 移动到上层目录
cd ..
## 移动到当前目录
cd .
列出目录树
## 列出指定目录深度n的文件与文件夹
tree -L n <filepath>
文件相关
创建文件
touch <filename>
查看文件内容
cat <filename>
删除文件
rm -f <filename>
编辑文件
## 如果文件不存在会自动创建
vi <filename>
输入:按I
(insert)
保存退出:按ESC
,shift+Z+Z
或者输入:wq
不保存退出:按ESC
,输入:q!
重命名文件
mv <filename> <new filename>
移动文件
mv <filename> <filepath>
拷贝文件
cp <filename> <filepath>
## 拷贝并重命名
cp <filename> <new filename>
查看文件编码
file <filename>
文件夹相关
创建文件夹
mkdir <filepath>
## 创建文件夹,如果存在上层目录不存在则会自动创建它
mkdir -p <filepath>
删除文件夹目录
rm -rf <filepath>
## 相关解释:
-r: 递归删除
-f: 强制删除、不需要一一确认
查看目录文件列表
ls
## 查看所有
ls -a
## 查看各个文件详情
ls -l
重命名文件夹
mv <dir> <new dirname>
移动文件夹
mv <dir> <filepath>
拷贝文件夹
cp -r <dir> <filepath>
## 拷贝并重命名
cp -r <dir> <new dirname>
压缩解压
zip
-
压缩
zip -r <zip name> <dir|file>
zip -r bala file
-
解压
unzip <zip name>
unzip bala.zip ## 解压到指定目录 unzip bala.zip -d ./newdir/
-
查看帮助
zip --help
tar
-
压缩
tar -cf <tar name> <file|dir>
## 从文件 foo 和 bar 创建归档文件archive.tar tar -cf archive.tar foo bar ## 压缩到指定目录 tar -cf <file path>/archive.tar foo bar ## 查看archive.tar中的所有文件 tar -tvf archive.tar ## 相关解释: -c: create 创建 -f: file 使用归档(压缩)文件 -t: list 列出文件 -v: verbose 详细信息
-
解压
tar -xf <tar name>
## 解压archive.tar中的所有文件 tar -xf archive.tar ## 解压到指定目录 tar -xf archive.tar -C newdir/ ## 相关解释: -x: extract 解压 -C: directory 改变解压目录
-
查看帮助
tar --help
权限用户相关
权限基础知识
二进制:
r-- = 100
-w- = 010
--x = 001
--- = 000
转换成八进制数,则为 r=4, w=2, x=1, -=0
r 表示可读取,
w 表示可写入,
x 表示可执行,
X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
+ 表示增加权限,
- 表示取消权限,
= 表示唯一设定权限。
u 表示该档案的拥有者,
g 表示与该档案的拥有者属于同一个群体(group)者,
o 表示其他以外的人,
a 表示所有(包含上面三者)
查看文件权限
ll
文件/文件夹赋权
## 该所有用户赋予<file|dir> 读、写、执行 权限
chmod 777 <file|dir>
使用root用户权限运行命令
sudo <commond>
切换用户
su <username>
修改当前用户密码
passwd
常用命令
清除输入
Ctrl + U
清屏
clear
或者 reset
附: 清屏命令区别
find查找文件/文件夹
-name 指定文件名/文件夹名
-type 查找某一类型的文件,d - 目录,f - 普通文件。
-size n[c] 查找文件长度为n块(1块:512字节)的文件,带有c时表示文件长度以字节计。
-exec 对匹配的文件执行shell命令。(-exec <command> {} \;)
-ok 给出提示,确认执行。
例:
## 在所有目录查找名为frp的文件夹
find / -name frp -type d
## 在当前目录及其子目录查找扩展名为“c”的文件
find . -name "*.c"
## 删除当前目录文件大小为零的文件
find . -size 0 -ok rm {} \;
管道命令|
匹配文本命令grep
## 查找tar命令帮助中-f选项('-'需要转义)
tar --help | grep -w '\-f'
## 相关解释:
-i : 不区分大小写,默认区分
-w : 匹配整个词
将上游输入作为参数命令xargs
## 在当前目录查找文件名为file的文件,并且列出详细信息
find -name file | xargs ls -l
ps: 上面的命令可用find自带的exec实现: find -name file -exec ls -l {} \;
处理文本命令awk
awk [选项参数] 'script' file
## 查看cpu使用情况
[root@sun8min dir]# top -bn 1 -i -c | grep Cpu
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
## 查看cpu使用情况并使用awk处理
[root@sun8min dir]# top -bn 1 -i -c | grep Cpu | awk -va=: -vb=, -F'[:,]' '{print $1a,$2b,$5}'
%Cpu(s): 0.0 us, 93.3 id
## 相关解释:
-v: 自定义变量,例子中定义了a=:和b=,
-F:自定义分隔符(默认使用空格或tab),例子中定义了:和,
处理部分定义了输出第1、第2、第5个字串,并且第1后面加上a变量,第2后面加上b变量
编辑文本命令sed
sed <参数> 'n1[,n2]动作 [内容]'
- 基础知识
## 相关解释:
参数:
-n :silent,只打印改变的行
-e :在命令行上输出改动结果
-f :运行文件内的 sed 动作
-i :直接修改文件
n1[,n2] : n2不存在,对n1执行,n2存在,对n1到n2行执行sed命令,最后一行用$符号。
function:
a :新增,在下一行
c :取代指定行的全部内容
d :删除
i :插入,在上一行
p :打印,一般同 -n 参数使用
s :取代匹配<old>的内容,可使用正则,格式:n1[,n2]s/<old>/<new>/g
例:
## nl命令输出原文件内容与行数
[root@sun8min docker_files]# nl file
1 a
2 b
3 c
4 d
5 e
## 第一行前面插入xxxxxx,后面插入yyyyyy
[root@sun8min docker_files]# nl file | sed -e '1i xxxxxx' -e '1a yyyyyy'
xxxxxx
1 a
yyyyyy
2 b
3 c
4 d
5 e
## 第一行到第二行的内容用ooooo代替,第4行到第5行的d去除,并删除第3行
[root@sun8min docker_files]# nl file | sed -e '1,2c ooooo' -e '4,5s/d//g' -e '3d'
ooooo
4
5 e
## 打印第三行
[root@sun8min docker_files]# nl file | sed -n '3p'
3 c
## 直接改动文件,在最后一行加入last line,并用nl命令查看文件
[root@sun8min docker_files]# sed -i '$a last line' file && nl file
1 a
2 b
3 c
4 d
5 e
6 last line
查看端口使用
lsof -i :<port>
杀死进程
kill <pid>
## 强制结束进程
kill -9 <pid>
其他命令
locate查找文件/文件夹
## 在所有目录,查找包含指定文件名/文件夹名
locate <filename>
判断文件/文件夹
[root@sun8min docker_files]# ll
总用量 32
drwxr-xr-x 2 root root 4096 5月 12 12:46 dir
-rw-r--r-- 1 root root 0 5月 12 12:46 file
使用命令ll
可以看到dir文件夹的权限的第一个字母d
,代表文件夹
file文件的权限的第一个字母-
,代表文件
远程下载上传文件
-
远程下载:
scp -r <user>@<host ip>:<filepath> <download path>
-r: 表示递归
8minofsuns-Mac-mini:Volumes 8minofsun$ scp -r root@118.126.91.55:/opt/docker_files/file /Volumes/mac_data/ root@118.126.91.55's password:
-
远程上传:
scp -r <file path> <user>@<host ip>:<upload path>
8minofsuns-Mac-mini:mac_data 8minofsun$ scp -r /Volumes/mac_data/dir root@118.126.91.55:/opt/docker_files root@118.126.91.55's password:
url下载文件
wget <url>
curl命令
-
GET与POST请求
## GET: curl https://sun8min.com?username=root&pwd=123123 ## POST curl -H "Content-Type:application/json" \ -X POST \ -d '{"username":"root","pwd":123123}' \ https://sun8min.com/
-
查看帮助
curl --help
查看各目录硬盘使用
## 查看根目录,深度1,占用空间
du -hd 1 /
## 相关解释:
-h: human-readable 友好方式显示(1k,234M,2G等)
-d <n>: 显示目录深度n
查看各挂载点硬盘使用
df -h
查看内存、cpu使用
## 使用命令 vmstat 查看内存、cpu使用
[root@sun8min dir]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
9 0 0 101872 231932 1069148 0 0 8 25 19 22 1 1 98 0 0
## 查看内存使用,以m(兆)为单位
[root@sun8min dir]# free -m
total used free shared buff/cache available
Mem: 1994 622 101 0 1270 1159
Swap: 0 0 0
## 查看cpu使用百分比
[root@sun8min dir]# top -bn 1 -i -c | grep Cpu | awk -va=: -vb=, -F'[:,]' '{print $1a,$2b,$5}'
%Cpu(s): 0.0 us, 93.3 id
## 相关解释:
%us:cpu使用
%id:空闲cpu
查看各进程情况
top
查看系统的发行版信息
lsb_release -i
## 相关解释:
lsb: Linux Standard Base
系统重启
reboot
查看时间
date
查看日历
cal
查看前n行
## 查看前5行
head -n 5 <filename>
## 默认查看前10行
head <filename>
## 查看帮助
head --help
查看后n行
## 查看后5行
tail -n 5 <filename>
## 默认查看后10行
tail <filename>
## 查看帮助
tail --help
查看指定行数
## 查看第2行到第3行
sed -n '2,3p' <filename>
常见问题
locate与find命令的区别
locate查找的是linux系统保存的文件目录database,更新频率:每日,
因此新创建的文件需要执行updatedb
立即更新数据库。
find是实时查找,速度比locate稍慢,但准确。附:find查找文件/文件夹
当前系统是CentOS还是Ubuntu
查看端口被占用
文件编辑错误
执行ls -a
,找到同文件名.swp
文件,删除。重新编辑文件即可。附: 文件编辑
清屏命令区别
clear
类似翻页,达到清屏的效果,reset
是真正的清屏,所以clear
速度更快,一般使用clear
。