本文总结日常工作中经常用到的linux命令,作为总结,以便学习和回顾。
1. vim
1.1 查找文件中的指定字符串
a. vim service.log --> ?abc 从倒数第一行到正数第一行的遍历方式查找文件service.log中的字符串abc,并高亮显示.
b. vim service.log --> /abc 从第一行到最后一行的遍历方式查找文件service.log中的字符串abc,并高亮显示.
c. n 显示下一个a或者b搜索到的字符串abc
d. Ctrl + B 向上翻页
e. Ctrl + F 向下翻页
f. $ 显示最后一页
g. set hls 打开高亮
h. set nohls 关闭高亮
2. df
2.1 df -h
查看机器磁盘空间
2.2 du -h .
查看当前目录(.)下的文件大小
3. netstat
netstat -a 列出所有当前的连接
netstat -at 只列出 TCP 协议的连接
netstat -au只列出 UDP 协议的连接
netstat -l 只列出正在监听的链接
netstat -p 获取进程名,进程号以及用户Id等信息
4. pwd
显示当前路径
5. cd
cd abc 切换到abc目录
cd .. 返回上一目录
cd ../../.. 连续返回上一目录三次
6. ssh
ssh lance@192.168.0.122 使用指定账户登陆到指定机器(后续需要输入密码)
ssh 192.168.0.122 使用当前用户登录到192.168.0.122机器
7. tail
tail -f service.log 实时显示文件service.log的最后10行(动态)
tail -1000f service.log 实时显示文件service.log的最后1000行(动态)
tail -f * 实时显示当前目录下所有文件的的最后10行(动态)
8. mkdir
mkdir abc 创建目录
rmdir 删除空目录
9. rm
rm abc,删除abc文件
rm * 删除当前目录下的所有文件
rm -f 强制删除文件或目录
rm -r 递归删除指定目录下的所有文件和子目录
rm -rf abc 强制+递归删除目录为abc的目录
10. top
动态显示当前耗费资源最多进程信息
11.curl 构造http请求
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"context":{"userId":"1967","userName":"lance"},"id": "11223344"}' 'http://service.company.com/business/function'
说明:
curl -v 显示返回的状态码等信息
如果使用GET,且url中有中文,如:
curl -v -X GET 'http://service.company.com/business/Search?keyword=中华人民共和国&pageIndex=1&pageSize=5'
因为有中文,所以会报错,提示Encoding错误:
HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date: Fri, 19 Apr 2019 02:43:59 GMT
Connection: close
可以使用:URLEncoder.encode方法转成utf-8格式:
String str = "中华人民共和国";
System.out.println(URLEncoder.encode(str,"utf-8"));
即:curl -v -X GET 'http://service.company.com/business/Search?keyword=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD&pageIndex=1&pageSize=5'
12. vmstat
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。
后面跟数字, 如vmstat 2 10 表示每隔2秒采集一次数据,显示10次。
13. rpm -qa
rpm -qa 查询安装了那些软件包
rpm -qa zip 查看安装包,且安装包的名称包含zip
14.cat
cat lance.txt 显示整个文件
cat lance.txt | tail -n +100 | head -n 500 从第100行开始,显示500行,即显示100~599行
cat lance.txt | head -n 300 | tail -n +100 显示100行到300行
cat file1 file2 > lance.txt 将file1和file2合并成lance.txt
15.sed
常用选项:
-n∶打印到屏幕
-e∶编辑;
-f∶直接写入文件;
-i∶修改读取的文件内容。
常用命令:
a ∶新增
c ∶取代
d ∶删除
i ∶插入
p ∶打印行
s ∶取代
举例:
sed '1d' lance.txt 删除第一行
sed -n '100,200p' lance.txt 显示第100行到200行
sed -n '/Exception/p' lance.txt 显示包含Exception的所有行
sed '1c lance' lance.txt 将第一行替换为lance
16.查看曾经执行的命令历史记录
history
17.查看内存使用情况
free -h 格式化的显示linux的内存
18.压缩和解压缩文件
19.sudo
sudo rm file.txt
sudo -u lance1 rm file.txt 以lance1的身份执行删除命令
20.du
du -sh * 查看当前目录下的所有文件和目录的大小
21.grep 检索
ps -ef | grep lance 搜索进程中的lance
ps -ef | grep lance --color=auto 搜索进程中的lance,并高亮显示lance
cat lance.txt | grep lance --color=auto 搜索文件lance.txt中的lance,并高亮显示lance
more lance.txt | grep -C 10 zhang 搜索文件lance.txt中的zhang,并显示匹配到的数据的前后10行
more lance.txt | grep -A 10 zhang 搜索文件lance.txt中的zhang,并显示匹配到的数据的后10行
more lance.txt | grep -B 10 zhang 搜索文件lance.txt中的zhang,并显示匹配到的数据的前10行
grep -B 10 zhang lance.txt 搜索文件lance.txt中的zhang,并显示匹配到的数据的前10行
less error.log | grep Exception | grep -v WARN 搜索文件error.log中的Exception,并排除含有WARN字符串的行。
22.查看CPU的信息
lscpu
23 ln 创建连接
ln -s /usr/lance/data /dev/data 创建软连接,相当于window的快捷键;
ln -d /usr/lance/data.log /dev/data.log 创建硬连接,相当于文件的备份,仅支持文件不支持目录;
24 查看linux日期和时间
date
date -R
25 移动或重命名文件/目录
mv file1.txt /opt/lance 将文件移动到/opt/lance目录
mv file1.txt file2.txt /opt/lance 将文件移动到/opt/lance目录
mv *.txt /opt/lance 将文件移动到/opt/lance目录
mv file1.txt file2.txt 将文件file1.txt重命名为file2.txt
26 nohup & 后台执行
nohup [command] [args]
nohup java -jar -Xms2048m -Xmx4000m XXX.jar arg1 arg2
a.默认输出到nohup.out;
b.使用Ctrl + C会发送SIGINT中断信号,使程序关闭;
c.关闭session发送SIGHUP挂起信号,程序免疫。
&后台运行程序
[command] [args] &
java -jar -Xms2048m -Xmx4000m XXX.jar arg1 arg2 &
a.输出结果到终端;
b.使用Ctrl + C会发送SIGINT中断信号,程序免疫;
c.关闭session发送SIGHUP挂起信号,程序关闭。
最佳实践:
nohup [command] [args] &
nohup java -jar -Xms2048m -Xmx4000m XXX.jar arg1 arg2 &
这样同时免疫SIGINT中断信号和SIGHUP挂起信号,而且信息输出到了nohup.out文件中,日志信息得以持久保留。
nohup的参数:
0:表示stdin标准输入;
1:表示stdout标准输出,为缺省值;
2:表示stderr标准错误。
nohup [command] [args] > file.log 等于 nohup [command] [args] 1> file.log 即将标准输出输出到file.log文件;
nohup [command] [args] 2> errorFile.log 将错误输出到errorFile.log文件;
nohup [command] [args] 2>&1 将错误输出重定向到标准输出。
27 awk
awk [-F field-separator] 'commands' input-file(s)
读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键"
[lance@172.28.0.172 ~]$ last -n 5
lance pts/2 172.28.0.172 Tue Jun 11 14:07 still logged in
root pts/0 172.28.3.250 Tue Jun 11 11:08 still logged in
lance pts/0 172.28.3.250 Tue Jun 11 10:39 - 10:39 (00:00)
lance pts/0 172.28.3.250 Mon Jun 10 18:17 - 19:16 (00:59)
zhangz pts/2 172.29.0.64 Tue Jun 4 15:01 - 21:00 (1+05:58)
[lance@172.28.0.172 ~]$ last -n 5 | awk '{print $3}'
172.28.0.172
172.28.3.250
172.28.3.250
172.28.3.250
172.29.0.64
[lance@172.28.0.172 ~]$ last -n 5 | awk '{print $3}' | awk -F '.' '{print $1}'
172
172
172
172
172
awk -F ':' '{printf("file:%10s,linenum:%s,colums:%s,content:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
awk -F ':' '{print "file:"FILENAME ",linenum:" NR ",columns:" NF ",content:"$0}' /etc/passwd
awk内置变量
内置变量 | 说明 |
---|---|
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 -F选项 |
NF | 浏览记录的域的个数 |
NR | 已读的记录数 |
OFS | 输出域分隔符 |
ORS | 输出记录分隔符 |
RS | 控制记录分隔符 |
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
$0 | 当前记录(作为单个变量) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
awk提供了print和printf两种打印输出,printf类似于C++中的格式化输出。
28 wc 统计输出个数
wc [OPTION]... [FILE]...
-c, --bytes print the byte counts
-m, --chars print the character counts
-l, --lines print the newline counts
--files0-from=F read input from the files specified by
NUL-terminated names in file F;
If F is - then read names from standard input
-L, --max-line-length print the length of the longest line
-w, --words print the word counts
--help display this help and exit
--version output version information and exit
举例:last | wc -l
举例:last -n 10 | wc -l
29 scp 复制文件
scp lance@172.17.10.21:/home/lance/test.sh . 下载文件
scp test.sh lance@172.17.10.21:/home/lance 上传文件
scp -r lance@172.17.10.21:/home/lance . 下载目录
scp -r . lance@172.17.10.21:/home/lance 上传目录