linux_SOP

vim 常用快捷键

vim快捷键

《Linux私房菜基础学习篇》Page278-280

常用系统命令

1
2
3
4
5
6
7
8
9
10
11
# 将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name "*.c"

# 将目前目录其其下子目录中所有一般文件列出
find . -type f

# 将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20

# 文本替换
sed "s/success/{\\\\\"status\\\\\":0}/g" -i /home/mdm/script/config/audi_pre.json

linux 系统命令

history

1
2
// 显示历史命令
history

如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1  ls
2 ls -a
3 ls -al
4 ls -als
5 ls -h
6 ls
7 ls -alsh
8 ls -als
9 cls
10 clear
11 clear
12 cls
13 ls -help
14 ls --help
15 date
16 date +%Y
17 date +%y
18 date +%M
19 date +%m
20 cal
21 cal 2022
22 cal 2022 02
23 cal 3-22
24 cal 03-22
25 cal 03-2022
26 cal 03 2022
27 bc
28 date
29 history

然后输入!15可以快速执行 history 中标记 15 的那行命令。

1
2
3
[root@47546a5b4ea9 /]# !15
date
Wed Mar 23 02:14:32 UTC 2022

cal

1
2
3
4
5
6
7
8
[root@47546a5b4ea9 /]# cal 03 2022
March 2022
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

date

1
2
3
4
5
6
7
8
9
10

[root@47546a5b4ea9 /]# date +%Y
2022
[root@47546a5b4ea9 /]# date +%y
22
[root@47546a5b4ea9 /]# date +%M //秒
46
[root@47546a5b4ea9 /]# date +%m //月
03

常用快捷键

  • Ctrl + i:跳到本行开头
  • Ctrl + e:跳到本行结束
  • Ctrl + ←:往左跳一个单词
  • Ctrl + →:往右跳一个单词
  • Ctrl + U:从当前光标开始删除,删到本行开头
  • Ctrl + K:从当前光标开始删除,删到本行结束
  • ESC + . :快速提取上条命令的输入参数(准确来说是命令的最后一部分值),可反复上翻调用
  • ^AA^BB :把上条命令中的AA替换成BB之后重新执行一遍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@47546a5b4ea9 /]# ls -a
. dev lib64 opt sbin usr
.. etc lost+found proc srv var
.dockerenv home media root sys
bin lib mnt run tmp
[root@47546a5b4ea9 /]# ^-a^-l
ls -l
total 48
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Mar 23 01:28 dev
drwxr-xr-x 1 root root 4096 Mar 23 01:28 etc
drwxr-xr-x 2 root root 4096 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 4096 Sep 15 2021 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 2020 media
drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt
drwxr-xr-x 2 root root 4096 Nov 3 2020 opt
dr-xr-xr-x 170 root root 0 Mar 23 01:28 proc
dr-xr-x--- 2 root root 4096 Sep 15 2021 root
drwxr-xr-x 11 root root 4096 Sep 15 2021 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Mar 23 01:28 sys
drwxrwxrwt 7 root root 4096 Sep 15 2021 tmp
drwxr-xr-x 12 root root 4096 Sep 15 2021 usr
drwxr-xr-x 20 root root 4096 Sep 15 2021 var
  • 文本下冒号输入/(string):查找文本中的对应字符串,小写 n 从上往下查找,大写 N 从下往上查找。string 也支持部分正则表达式。
  • file 命令可以查看 linux 文件种类(因为 linux 大部分文件都是没有后缀或者说扩展名的)。
  • cd -:回到刚才那个目录
  • cd(后面什么都不跟):进入到当前用户的主文件夹。
  • cd ~account:进入到 account 用户的主文件夹。
  • pwd -P:显示正确的完整路径,针对 link 类型的文件有用。
  • mkdir -p:可以创建多层目录。
1
2
3
4
5
6
7
8
9
10
# mkdir -p test/{dir1,dir2,dir3}
# tree test
test
├── dir1
├── dir2
└── dir3

3 directories, 0 files
# ls
test
  • cat -n:查看文件时显示行号。cat 适合查看小文件。cat -n等用于命令nl
  • tac:与cat相反,从最后一行开始显示,一直显示到第一行。没有 -n 选项。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@47546a5b4ea9 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 47546a5b4ea9
[root@47546a5b4ea9 /]# cat -n /etc/hosts
1 127.0.0.1 localhost
2 ::1 localhost ip6-localhost ip6-loopback
3 fe00::0 ip6-localnet
4 ff00::0 ip6-mcastprefix
5 ff02::1 ip6-allnodes
6 ff02::2 ip6-allrouters
7 172.17.0.2 47546a5b4ea9
[root@47546a5b4ea9 /]# tac -n /etc/hosts
tac: invalid option -- 'n'
Try 'tac --help' for more information.
[root@47546a5b4ea9 /]# tac /etc/hosts
172.17.0.2 47546a5b4ea9
ff02::2 ip6-allrouters
ff02::1 ip6-allnodes
ff00::0 ip6-mcastprefix
fe00::0 ip6-localnet
::1 localhost ip6-localhost ip6-loopback
127.0.0.1 localhost
  • 嵌套在语句中的命令如果要被执行,需要打标记,如下:
1
2
3
4
5
6
7
8
[root@47546a5b4ea9 /]# hostname
47546a5b4ea9
[root@47546a5b4ea9 /]# echo "xxx `hostname` xxx"
xxx 47546a5b4ea9 xxx
[root@47546a5b4ea9 /]# echo "xxx $(hostname) xxx"
xxx 47546a5b4ea9 xxx
[root@47546a5b4ea9 /]# echo "xxx ${hostname} xxx"
xxx 47546a5b4ea9 xxx
  • 查找文件的几种方式:
    • which:只用来找命令,且只在 PATH 中找,只显示找出来的第一条,-a则列出所有同名执行文件。
    • where is-b只找二进制文件;-m只找说明文件;-s只找source源文件。
    • locate:与上面一样,通过数据库查找数据,没有实际查找磁盘,所以很快,但导致需要更新数据库:updatedb,不然可能找到已经删除的文件,或找不到刚刚创建的新文件。查找支持关键字查找,输入部分名称也可检索出结果。
    • find [PATH] [option] [action]:强大但慢,是查找磁盘,所以不是很常用。《鸟哥私房菜》Page 190 有详细用法介绍。
  • 查找文件时-i选项用来忽略大小写。
  • tar:本身不压缩,只用来打包,打包功能来源于 bzip2 和 gzip 的功能支持。
    • -c:新建打包文件;
    • -t:查看打包文件的内容含有哪些文件名;
    • -x:解打包/解压缩;
    • -j:通过 bzip2 的支持,进行压缩/解压缩,此时文件名最好为*.tar.bz2
    • -z:通过 gzip 的支持,进行压缩/解压缩,此时文件名最好为*.tar.gz
    • -v:显示正在处理的文件名;
    • -f filename:接的是被处理的文件名,建议-f单独写作一个参数;
    • -C:用于解压缩时指定解压缩目录;
  • dump [-Suvj] [-1evel] [-f 备份文件] 待备份数据:对文件系统进行备份和存储。
    • -S:仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕;
    • -u:将这次 dump 的时问记录到 /etc/ dumpdateS 文件中;
    • -v:将 dump 的文件过程显示出来;
    • -j:加入 bzip2 的支持,将数据进行压缩,默认 bzip2 压缩等级为 2;
    • -(level):-0 ~ -9 共10个等级;
    • -f:有点类似 tar,后面接产生的文件,可接例如 /dev/st0 设备文件名等;
    • -W:列出在 /etc/fstab 里面的具有 dump 设置的分区是否有备份过。
  • restore:恢复系统。Page 262
  • dd:可备份完整的分区或磁盘,因为 dd 可读取磁盘的扇区表面数据。Page 262

curl命令的常见用法

说明

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称curl为下载工具。

语法

1
# curl [option] [url]

1. 获取页面内容

当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。

1
curl http://www.baidu.com

2. 显示 HTTP 头

如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 选项:

1
curl -I http://www.baidu.com

输出为

1
2
3
4
5
6
7
8
9
10
HTTP/1.1 200 OK 
Server: nginx/1.10.3
Date: Thu, 11 May 2017 08:24:45 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24206
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary: Accept-Encoding

也可以同时显示 HTTP 头和文件内容,使用 -i 选项:

1
curl -i http://www.baidu.com

输出为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK 
Server: nginx/1.10.3
Date: Thu, 11 May 2017 08:25:46 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24206
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary: Accept-Encoding

<!DOCTYPE html>
<html lang="en">
......
</html>

3. 将链接保存到文件

我们可以使用 > 符号将输出重定向到本地文件中。

1
curl http://www.baidu.com > index.html

也可以通过 curl 自带的 -o/-O 选项将内容保存到文件中

-o(小写的 o):结果会被保存到命令行中提供的文件名
-O(大写的 O):URL 中的文件名会被用作保存输出的文件名

1
2
curl -o index.html http://www.baidu.com 
curl -O http://www.baidu.com/page/2/

注意

使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号

4. 使用 -H/–header 自定义 header

当我们需要传递特定的 header 的时候,可以仿照以下命令来写:

1
curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com

5. 使用 -d 发送 POST 请求

我们以登陆网页为例来进行说明使用 curl 发送 POST 请求的方法。假设有一个登录页面 http://www.example.com/login,只需要提交用户名和密码便可登录。我们可以使用 curl 来完成这一 POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式:

1
curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login

在使用 -d 的情况下,如果省略 -X,则默认为 POST 方式:

1
curl -d "userName=tom&passwd=123456" http://www.example.com/login

6. 使用 -c 保存cookie

当我们使用 curl 访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。

-c 后面跟上要保存的文件名。

1
curl -c "cookie-example" http://www.example.com

7. 自动跳转

有的网址是自动跳转的。使用 -L 参数,curl 就会跳转到新的网址。

1
curl -L www.sina.com

键入上面的命令,结果自动跳转为 www.sina.com.cn

使用 --cookie 参数,可以让 curl 发送 cookie。

1
curl --cookie "name=xxx" www.example.com

至于具体的 cookie 的值,可以从 http response 头信息的 Set-Cookie 字段中得到。

9. HTTP 认证

有些网域需要 HTTP 认证,这时 curl 需要用到 --user 或者 -u 参数。

1
curl --user name:password example.com

认识与学习 bash

  • 使用变量过程中需要注意的问题:
    • 单引号 VS 双引号
    • 变量名前要带 $
    • 最好带大括号,避免产生歧义:${xxx}
    • set查看本地变量 env/export查看环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@9824e1123313 /]# var='$PATH'  // 单引号
[root@9824e1123313 /]# echo $var
$PATH
[root@9824e1123313 /]# var="$PATH" // 双引号
[root@9824e1123313 /]# echo var // 不带 $
var
[root@9824e1123313 /]# echo $var // 带 $
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[root@9824e1123313 /]# set 1 2 3 4 5 6 7 8 9 a b c
[root@9824e1123313 /]# echo $10 // 不带{},分解为 $1 + 0
10
[root@9824e1123313 /]# echo ${10} // 带{}
a
  • read常用在 shell 中阻断,等待读取用户输入的参数,进行交互。-p:输入前的提示语句。
1
2
3
4
5
6
7
8
9
/# read xx
123
/# echo $xx // echo 不加 -n 则会默认输出一个换行
123
/# echo -n $xx
123/# read // read 不加变量则赋值给默认环境变量 REPLY
222
/# echo $REPLY
222
  • bash 中的 array 类型。
1
2
3
4
5
6
7
8
9
/# xx=(aa bb cc)
/# echo ${xx[1]}
bb
/# echo ${xx[*]}
aa bb cc
/# echo ${xx[@]}
aa bb cc
/# echo ${!xx[*]}
0 1 2
  • 利用 $RANDOM 设置随机数
1
2
3
// $ RANDOM 介于0~32768之间,设置0~9的随机数,代码如下
/# declare -i number=$RANDOM*10/32768; echo $number
3
  • 查看命令的执行优先级:type -a xxx
1
2
3
/# type -a rm
rm is an alias for trash
rm is /bin/rm

linux 复杂操作合集

访问本机接口

1
2
3
curl --location --request POST 'http://本机IP/接口' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'data=[{"type":1,"brand":"GE","ae_oe_code":"9261317"}]'

curl --location --request GET 'http://127.0.0.1:18016/honda/oe_by_std_name?vin=LVHRM1836D5019492&std_name=%E6%B3%A2%E7%AE%B1%E6%B2%B9'

查看 log 技巧

1
2
3
4
tail -f <file> i//自动刷新查看文件,适用于查看日志,相对于cat的优点在于不用全部打开,只会看最新的几行,看大文件时不会那么容易卡死

//查看nginx日志,并进行过滤
tail -f /var/log/nginx/access.log | grep XXX