linux必会命令

1,940 阅读8分钟

所有程序员都应该自己动手使用Linux,如果开发在Windows上,开发环境所需的其他服务应该要搭在虚拟机上,目的是熟悉Linux系统,平时避免不了要接触服务器

本文介绍一些常用必会的命令或软件,以及终端和VIM快捷键

必会命令

man

查看命令帮助文档

// 查看ls的帮助文档
man ls
// 查看文档第1页
man 1 ls

ll

列出当前目录或指定目录下的文件和目录,有些环境(如docker容器)中并没有这个命令,用ls -l代替

root@today2:/usr/local/docker/nginx-lua# ll
total 32
drwxr-xr-x  6 root root 4096 May 29 14:44 ./
drwxr-xr-x 57 root root 4096 May 24 10:35 ../
drwxr-xr-x  2 root root 4096 May 29 14:24 build/
-rw-r--r--  1 root root  428 Sep 18  2020 docker-compose.yml
drwxr-xr-x  2 root root 4096 Dec 31 18:32 log/
-rw-r--r--  1 root root 2780 May 29 14:43 nginx.conf
drwxr-xr-x  3 root root 4096 Dec 31 18:33 waf/
drwxr-xr-x  2 root root 4096 Aug 10  2020 wwwroot/

root@today2:/usr/local/docker/nginx-lua# ll -h
total 32K
drwxr-xr-x  6 root root 4.0K May 29 14:44 ./
drwxr-xr-x 57 root root 4.0K May 24 10:35 ../
drwxr-xr-x  2 root root 4.0K May 29 14:24 build/
-rw-r--r--  1 root root  428 Sep 18  2020 docker-compose.yml
drwxr-xr-x  2 root root 4.0K Dec 31 18:32 log/
-rw-r--r--  1 root root 2.8K May 29 14:43 nginx.conf
drwxr-xr-x  3 root root 4.0K Dec 31 18:33 waf/
drwxr-xr-x  2 root root 4.0K Aug 10  2020 wwwroot/
root@today2:/usr/local/docker/nginx-lua# 

ll -h大小以便于人类阅读的方式显示

cd

切换目录

cp

复制文件或目录

cp a.txt b.txt
# 复制目录时需要添加-r,表示递归的意思
cp -r dir1 dir2

mv

移动文件或目录,常用来修改文件或目录名

mv a.txt b.txt
mv dir1 dir2

scp

跨服务器复制文件,可将文件从当前服务器复制到另一个服务器上

scp a.txt root@192.168.3.4:/home/xxx/a.txt

按回车后需要输入目标服务器root账号的密码,如果是pem证书可在scp命令后面紧跟-i xxx.pem,如果不想每次都输入密码,可以设置目标服务器免密登录

mkdir

创建目录

mkdir a
mkdir -p a/b/c

rm

删除文件和目录

rm a.txt
rm dir1
rm -rf dir2

添加-rf时需要非常仔细查看命令是否正确,有时候因为一个不起眼的空格可能就变成rm -rf / dir2或者要删除的目录是变量,但是很不幸变量没有正确赋值,大家都知道rm -rf的威力

df

查看硬盘剩余

df
df -h

du

查看硬盘使用情况

// 查看当前目录
du -h
// 查看当前目录,只查看一级
du -d 1 -h
// 查看/dir2这个目录,只查看二级
du -d 2 /dir2 -h

find

查找文件或目录

// 在根目录下查找xxx这个文件名目录
find / -name xxx
// 限定只查找目录
find / -name xxx -type d

ps

查看进程,常用来查找进程ID或查看程序启动时的命令参数

// 查看tomcat进程
ps -ef | grep tomcat

netstat

查看网络情况,常用来查找指定端口,或判断端口是否在监听

// 查看8080端口
netstat -anp | grep 8080

cat

查看文件内容

// 查看a.txt中包含xxx的行
cat a.txt | grep xxx
// -n 显示行号
cat -n a.txt | grep xxx

tail

从文件尾部查看,常用来查看日志文件

// 从a.log末尾查看1000行,-f是监听文件变化,文件发生变化后立即更新到屏幕
tail -n 1000 -f a.log

nc

监听指定端口,并可以向连接方发送文本内容

nc -l 12345
nc -lk 12345

-k是在客户端断开连接后服务端不会关闭程序,客户端可以重连

cut

分隔字符串,和程序中split类型

// 将1.5以.分割,取第一部分,得到1
echo '1.5' | cut -d '.' -f1
// 得到5
echo '1.5' | cut -d '.' -f2

head

读取文件指定行数

// 读取第一行
head -1 xxx.txt
// 读取前3行
head -3 xxx.txt

sed

以行为单位进行查找、替换、新增和删除操作,这个命令比较复杂,常用于替换文件中的指定内容,以下列举一些常用的用法

// 替换掉test.txt中每行的第一个green为red
sed 's/green/red/' test.txt

// 将test.txt中第3行的第一个blue替换成red
sed '3s/blue/red/' test.txt

// 将test.txt中第3-9行中每行的第一个blue替换成red
sed '3,9s/blue/red/' test.txt

// 将test.txt中第3-9行中每行的所有blue替换成red,并且不区分大小写,g是global的意思,i是ignore case的意思
sed '3,9s/blue/red/gi' test.txt

// 正则,从test.txt中将每行的sea is xxx替换成sea is xxxblue
sed 's/sea is \(.*\)/sea is \1blue/' test.txt

sed命令格式非常多,在此不一一列举,学会这个命令可以干很多自动化的事

awk

awk是一种程序语言,支持变量、运算符、流程控制等程序语法,用于处理复杂的数据,生成格式化的报表

结合数据库来解释原理: 将一行当做一条记录,一行中以一个或多个空格或Tab隔开的当做字段,字段之间的分隔符可以通过-F指定,如awk -F:指定使用:来作为字段分隔符

使用NR==指定行号,指定列,如awkNR==3表示行号=3的才满足条件,指定列,如`awk 'NR==3'`表示行号=3的才满足条件,0表示一整行,1表示第一列,1表示第一列,NF表示最后一列

假设test.txt的内容如下:

Flower is red
Grass is green
The sky is blue
The sea is blue
Grass is Green
Flower is RED
Green green green
red red red
aaa

对test.txt操作列举一些用法

// 打印所有行的第1列
awk '{print $1}' test.txt
// 打印test.txt中第三行,$0表示一整行
awk 'NR==3{print $0}' test.txt
// 打印test.txt中第三行的第1列
awk 'NR==3{print $1}' test.txt
// 打印第1和第2列,在前面添加指定字符串,输出结果a:Flower  b:is
awk '{print "a:"$1," b:"$2}' test.txt
// 从test.txt中读取第一行第1列赋值给变量a,第二行第1列赋值给变量b,再拼接起来
awk 'NR==1{a=$1}NR==2{b=$1; print a"-"b}' test.txt

awk的用法还有非常多,熟练之后可以计算CPU使用率等等很多实用功能

echo

输出内容,可以输出内容到文件或管道

// 清空a.log的内容,一般用来清空大文件,直接rm文件可能并不能立即释放文件占用的空间,但是清空内容再删除就可以
echo '' > a.log
// 替换a.txt中的内容为abc
echo 'abc' > a.txt
// 向a.txt末尾追加一行abc
echo 'abc' >> a.txt

默认echo是换行的,添加-n表示不换行,-e表示输出的内容中支持转义符,如\t和\b

wc

统计行数,也可以统计字数和字节数,常用于配合ps -ef检测进程是否存在

// 统计test.txt有多少行
wc -l test.txt
// 统计test.txt中有多少个单词/字
wc -w test.txt
// 统计test.txt有多少字节
wc -c test.txt
// 查看docker进程并统计结果的行数
ps -ef | grep docker | wc -l

watch

监视命令的结果,相当于每隔一段时间执行一次被监视的命令,将不同的地方显示出来,通常用于需要不断的执行某个命令查看结果,使用watch命令就省去不断的执行命令了

// 每隔1秒刷新一次ls -l命令的结果,如果目录下文件发生了变化,就会立即显示出来
watch -n1 ls -l

top

查看系统当前的状态,如CPU使用情况、内存使用情况等,进入top后按1可查看所有CPU核心的使用情况

-d 设置刷新频繁,单位秒

curl

访问远程资源,如某个网址并保存为指定文件,常用来测试指定URL能否访问,以及得到响应的结果

curl http://ahydd.com
// 访问网站并将响应结果保存到文件
curl http://ahydd.com -o ahydd.html

curl命令的参数很多,以下列举常用的参数

-X 指定请求方式

curl -XPOST http://ahydd.com

-o 将结果保存到文件

curl http://ahydd.com -o ahydd.html

-H 指定请求头

curl -H 'token:xxx' -H 'a:yyy' http://ahydd.com

-b 携带cookie

curl -b 'a=123' http://ahydd.com

-c 将返回的cookie写入本地文件

curl -c xxx.txt http://ahydd.com

-d 请求内容

curl -d 'a=123&b=456' -XPOST http://ahydd.com
curl -d 'a=123' -d 'b=456' -XPOST http://ahydd.com

-e 指定referer

curl -e 'http://baidu.com' http://ahydd.com

-k 跳过SSL检查,不检查服务端的SSL证书是否有效

curl -k https://ahydd.com

-u 认证

curl -u 'username' http://ahydd.com

-u 'username:password',如果只写username不写password,在执行命令的时候需要输入密码,建议只写username,这样在history里就不会暴露密码

curl命令还有很多参数,以上是常用的

wget

下载远程文件到本地,一般只用于下载文件,如果docker容器中没有curl也可以用wget指定wget -q -O -来代替curl

wget http://ahydd.com -O ahydd.html

-q 安静模式,不会在终端显示下载进度

-O 输出到指定文件,-O -表示输出到终端,不指定-O下载后的文件名和远程的文件名一致

--header 指定请求头,如--header="version: v1" --header="token: xxx"

tar

压缩和解压文件,参数很多,只列举最常用的两个

-czvf 压缩文件

tar -czvf xxx.tar.gz dir1 dir2 file1 file2

-xzvf 解压文件

tar -xzvf xxx.tar.gz
// 解压到指定目录
tar -xzvf xxx.tar.gz -C xxx

记住-c是压缩,-x是解压,-z是zip

公众号:飞翔的代码