Bash

Bash命令

Posted by Sun8min on May 12, 2019

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)

保存退出:按ESCshift+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>

附:locate与find命令的区别

判断文件/文件夹

[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> 

附:编辑文本命令 sed


常见问题

locate与find命令的区别

locate查找的是linux系统保存的文件目录database,更新频率:每日, 因此新创建的文件需要执行updatedb立即更新数据库。

find是实时查找,速度比locate稍慢,但准确。附:find查找文件/文件夹

当前系统是CentOS还是Ubuntu

附:查看系统的发行版信息

查看端口被占用

附:查看端口使用, 杀死进程

文件编辑错误

执行ls -a,找到同文件名.swp文件,删除。重新编辑文件即可。附: 文件编辑

清屏命令区别

clear类似翻页,达到清屏的效果,reset是真正的清屏,所以clear速度更快,一般使用clear