【运维】Java开发人员掌握的Linux命令

作为Java开发人员,要掌握常用的Linux命令。
为什么要写此文,笔者的Linux很厉害?NoNoNo,正因为笔者不熟悉Linux才写此文,以作整理。

最主要的命令

查询命令的简要用法,help

当你不懂一个命令的作用时,可以在该命令后加--help或简写-h查看该命令的用法,比如查询ls的用法:

[root@localhost ~]# ls --help

查询命令的详细用法,man

manmanual,手册的意思,由于手册比较详细,会有翻页等交互,操作与less一致。
比如查询man命令的手册:

[root@localhost ~]# man man

常用选项

  • -h,也可用--human-readable,人类可读的意思
  • -f,也可用--force,强制的意思
  • -n,行数的意思,line number
  • -c,创建的意思,create
  • -x,也可用--extract,解压的意思
  • -f,也可用--file=ARCHIVE,指定归档文件的意思
  • -r,也可用--recursive,递归、循环的意思
  • -d,也可用--decompress,解压的意思
  • -v,也可用--verbose,详细的、啰嗦的意思

文件相关命令

列出目录内容,ls

lslist directory contents,列出目录内容。

[user001@localhost ~]$ ls
1.log  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

另外,ls -l的别名ll也挺好用,因为ll输入起来很方便:

[user001@localhost ~]$ ll
total 36
-rw-rw-r--. 1 user001 user001   25 Mar 23 07:23 1.log
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Desktop
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Documents
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Downloads
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Music
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Pictures
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Public
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Templates
drwxr-xr-x. 2 user001 user001 4096 Nov 29 07:41 Videos

文本编辑,vi

vi,全名为vi IMproved,是很好用的文本编辑器。

  • Esc,退出编辑模式命令模式
  • i,在光标前以插入形式进入编辑模式,进入此模式后在屏幕的左下角可看到-- INSERT --
  • a,在光标后以插入形式进入编辑模式,进入此模式后在屏幕的左下角可看到-- INSERT --
  • x,删除单字符,为什么是x,我的理解是叉的意思
  • 连续的按键位置hjkl分别代表
  • j是右手食指的按键,是最常用的按键,自然是代表
  • k用无名指按的,代表
  • h在最左边,自然代表
  • l在最右边,自然代表
  • 1yy,复制当前光标下的1行,如果复制两行,就是2yy。但是,我不知道为什么yy代表复制
  • p,粘贴,paste
  • dd,删除一行,delete
  • :wq,保存并退出,write & quit
  • :q!,不保存退出

查看文档,less

查看文档。

  • f,向下翻一页文档,forward的意思
  • b,向上翻一页文档,back的意思
  • G,滚动到文档的最后,这在查看日志时很常用
  • F,滚动到文档的最后并定时刷新,这在查看日志时很常用
  • /xxx,查找xxx的文档位置,按n定位到下一个匹配项,N定位到上一个匹配项

创建目录,mkdir

mkdir,意为创建目录,make directories

[root@localhost ~]# mkdir hello_pkg
[root@localhost ~]# 
[root@localhost ~]# ll
total 72
-rw-------. 1 root root  2695 Nov 29 15:36 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Mar 26 21:07 hello_pkg

创建文件,touch

touch,修改文件时间,或创建文件。以下是例子:

[root@localhost hello_pkg]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 26 21:11 hello_world.txt
[root@localhost hello_pkg]# 
[root@localhost hello_pkg]# touch hello_world.txt 
[root@localhost hello_pkg]# 
[root@localhost hello_pkg]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 26 21:12 hello_world.txt
[root@localhost hello_pkg]# touch hello_new_world.txt
[root@localhost hello_pkg]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 26 21:13 hello_new_world.txt
-rw-r--r--. 1 root root 0 Mar 26 21:12 hello_world.txt

按文件名查找文件

在/目录下查找名称为xxx-data的文件:

find / -name xxx-data

查找文件内匹配的关键字

查找/top.log包含关键字Mem的行:

# grep 'Mem' /top.log 
Mem:   1922148k total,  1783468k used,   138680k free,   180284k buffers

省略注释行和空行的方式查看配置文件

[root@blog ~]# grep -v "^#"  xxx.conf | grep -v "^$"

删除文件或文件夹,rm

rm,删除文件或文件夹,remove files or directories
这是删除一个文件,默认会询问确认是否删除:

[root@localhost hello_pkg]# rm hello_world.txt 
rm: remove regular empty file `hello_world.txt'? y

这是删除目录,默认依然会询问确认,当然你可以通过强制命令取消询问,这里不介绍:

[root@localhost ~]# rm hello_pkg/
rm: cannot remove `hello_pkg/': Is a directory
[root@localhost ~]# 
[root@localhost ~]# rm -r hello_pkg/
rm: descend into directory `hello_pkg'? y
rm: remove regular empty file `hello_pkg/hello_new_world.txt'? y
rm: remove directory `hello_pkg'? y

移动文件,mv

mv,移动文件,move的意思。

[root@localhost hello_package]# mv hello_world ../
[root@localhost hello_package]# ll ../
total 72
-rw-------. 1 root root  2695 Nov 29 15:36 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Mar 26 21:21 hello_package
-rw-r--r--. 1 root root     0 Mar 26 21:21 hello_world

拷贝文件,cp

cp,拷贝文件,copy的意思。

[root@localhost ~]# cp hello_world ./hello_package/
[root@localhost ~]# ll hello_package/
total 0
-rw-r--r--. 1 root root 0 Mar 26 21:23 hello_world

排序,sort

对文件排序并输入。

echo -e "3
2
1" > 123.txt
sort 123.txt
1
2
3

排除重复,uniq

echo -e "3
2
2
1" > 123.txt
uniq 123.txt
3
2
1

实践

nginx的access.log是一个Web的访问日志,用它来练习非常不错,他的内容是这样的:

127.0.0.1 - - [07/Jul/2018:12:34:53 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
192.168.1.1 - - [07/Jul/2018:12:50:05 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:12:50:32 +0800] "GET /index.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:12:52:21 +0800] "GET /index-nick.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:12:52:34 +0800] "GET /index.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:12:54:21 +0800] "GET /index-nick.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:12:56:03 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:32:56 +0800] "GET /index.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:33:02 +0800] "GET /index-nick.html HTTP/1.1" 200 612 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:34:58 +0800] "GET /index.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:35:03 +0800] "GET /index-nick.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:40:10 +0800] "GET /index.html HTTP/1.1" 403 169 "-" "curl/7.29.0"
127.0.0.1 - - [07/Jul/2018:20:40:16 +0800] "GET /index-nick.html HTTP/1.1" 403 169 "-" "curl/7.29.0"

提取所有请求URL并排序排重

awk '{print $7}' /usr/local/nginx/logs/access.log | sort | uniq

归档文件命令

文件打包归档,tar

tar,将文件打包归档,或将存档文件打开。为什么叫tar?我的理解是together archive

[root@localhost hello_package]# tar -cf txt.tar 1.txt 2.txt 
[root@localhost hello_package]# ll
total 12
-rw-r--r--. 1 root root     0 Mar 26 22:29 1.txt
-rw-r--r--. 1 root root     0 Mar 26 22:29 2.txt
-rw-r--r--. 1 root root 10240 Mar 26 22:30 txt.tar
[root@localhost hello_package]# ll
total 12
-rw-r--r--. 1 root root 10240 Mar 26 22:30 txt.tar
[root@localhost hello_package]# tar -xf txt.tar 
[root@localhost hello_package]# ll
total 12
-rw-r--r--. 1 root root     0 Mar 26 22:29 1.txt
-rw-r--r--. 1 root root     0 Mar 26 22:29 2.txt
-rw-r--r--. 1 root root 10240 Mar 26 22:30 txt.tar

gz文件的解压及压缩,gzip

gunzip解压文件:

[root@localhost third_pkg]# gzip -d apache-tomcat-8.5.12.tar.gz 
[root@localhost third_pkg]# ll
total 13452
-rw-r--r--. 1 root root 13772800 Mar 14 19:55 apache-tomcat-8.5.12.tar

gunzip压缩文件:

[root@localhost third_pkg]# gzip -c apache-tomcat-8.5.12.tar > apache-tomcat-8.5.12.tar.gz

xz文件的解压和压缩,xz

解压:

[root@localhost third_pkg]# xz -d rabbitmq-server-generic-unix-3.6.8.tar.xz

压缩:

[root@localhost third_pkg]# xz -k rabbitmq-server-generic-unix-3.6.8.tar

bz2的解压与压缩,bzip2

解压:

[root@localhost third_pkg]# bzip2 -d 123.tar.bz2

压缩:

[root@localhost third_pkg]# bzip2 -c 123.tar > 123.tar.bz2

系统状态的命令

查看网卡的信息,ifconfig

ifconfig,是network interfaces configuring,查询服务器的网卡情况:

[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:72:9D:E7  
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe72:9de7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4806 errors:0 dropped:0 overruns:0 frame:0
          TX packets:826 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:387034 (377.9 KiB)  TX bytes:138929 (135.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:448 (448.0 b)  TX bytes:448 (448.0 b)

查看磁盘使用情况,df

dfdisk file system的简写,用于查看磁盘的使用情况。常搭配-h使用,-h--human-readable的意思。

[user001@localhost ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        77G  3.3G   70G   5% /
tmpfs           495M  216K  495M   1% /dev/shm
/dev/sda1       291M   34M  242M  13% /boot

查看目录大小

查看当前目录的大小:du -sh
查看当前目录下各一级子目录的大小:du -lh --max-depth=1

[root@blog third_package]# du -sh
507M  .
[root@blog third_package]# 
[root@blog third_package]# du -lh --max-depth=1
62M ./redis-3.2.1
232K  ./.deps
23M ./nginx-1.8.0
6.8M  ./.libs
507M  .

查看进程的信息,ps

psprocess snapshot的意思,进程快照,通过此命令可以查看进程的信息,常用的用法:

[user001@localhost ~]$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar22 ?        00:00:01 /sbin/init
root         2     0  0 Mar22 ?        00:00:00 [kthreadd]
root         3     2  0 Mar22 ?        00:00:00 [migration/0]

查看内存使用情况,free

free查看内存使用情况:

[user001@localhost ~]$ free
             total       used       free     shared    buffers     cached
Mem:       1012352     537764     474588          0      72292     253348
-/+ buffers/cache:     212124     800228
Swap:      2031608          0    2031608

其中Swap交换区,类似于Windows的虚拟内存,在内存不够时,把硬盘空间当成内存使用。

虚拟内存统计报告,vmstat

vmstat,是virtual memory statistics,意思为虚拟内存统计。

[user001@localhost ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 473968  72644 253364    0    0     8     4   25   35  0  0 99  0  0

查看网络情况,netstat

[user001@localhost ~]$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 192.168.1.101:ssh           192.168.1.100:63840         ESTABLISHED 
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    9155   @/org/kernel/udev/udevd
unix  2      [ ]         DGRAM                    12811  @/org/freedesktop/hal/udev_event
unix  16     [ ]         DGRAM                    12243  /dev/log

查看IO的情况,iostat

[user001@localhost ~]$ iostat
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain)     03/23/2017      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.29    0.24    0.00   99.41

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.78        16.18         8.62     611952     325794

网络命令

下载文件,wget

wget,从网络上下载文件.The non-interactive network downloader.

[root@localhost third_pkg]# wget http://apache.fayea.com/tomcat/tomcat-8/v8.5.12/bin/apache-tomcat-8.5.12.tar.gz

截取网络传输的数据包,tcpdump

指定eth0网卡且端口为443的数据包:

tcpdump -i eth0 port 443

指定eth0网卡且端口为443且IP为xx.xx.xx.xx的数据包:

tcpdump -i eth0 '(port 443 && host xx.xx.xx.xx)'

将截取的数据包保存为cap文件,在Windows下可用Wireshark分析:

tcpdump -i eth0 -w /tmp/mytcpdump-20170907.cap

安装软件

查询是否安装RPM包

[root@blog third_package]# rpm -qa | grep rabbitmq

安装RPM包

[root@blog third_package]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

等于

[root@blog third_package]# rpm --install --verbose --hash rabbitmq-server-3.6.5-1.noarch.rpm

卸载软件

[root@blog third_package]# rpm -e erlang-common_test-R14B-04.3.el6.x86_64

卸载多版本

[root@blog third_package]# rpm -e --allmatches xxx

yum查询安装包

[root@blog third_package]# yum list | grep erlang

yum安装软件

[root@blog third_package]# yum install xxx

yum卸载软件

[root@blog third_package]# yum remove erlang

定时任务

查看当前用户的定时任务:crontab -l
编辑当前用户的定时任务:crontab -e,其会进入vi编辑具体任务,其对应的是/var/spool/cron/下的文件,比如root用户,就是/var/spool/cron/root

系统的定时任务可以配置到/etc/crontab,另外,此文件也有定时任务时间格式的简单描述。

其它

服务器时间同步

[root@blog ~]# sudo yum install ntp
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
Package ntp-4.2.6p5-10.el6.centos.2.x86_64 already installed and latest version
Nothing to do
[root@blog ~]# sudo ntpdate time.nist.gov
26 Jun 18:00:24 ntpdate[1215]: the NTP socket is in use, exiting

一些符号的用法

前面命令的输出作为后面命令的输入,|

|,前面命令的输出作为后面命令的输入,比如查看进程并筛选包含java的行:

[user001@localhost ~]$ ps -ef | grep java
user001   7729  7601  0 06:29 pts/0    00:00:00 grep java

重定向,>

>重定向,如果文件不存在,则创建文件;如果已存在,则覆盖。

[user001@localhost ~]$ echo 'user101' > 1.log

追加,>>

>>,将内容追加到文件末尾。如果文件不存在,则创建文件;如果已存在,则将内容追加在文件末尾。

[user001@localhost ~]$ echo 'user002' >> 1.log

单引号与双引号,"、""

单引号忽略所有特殊字符,双引号只忽略部分特殊字符,不忽略$、*等等等。而表达一个字符串,除了单引号与双引号,还有不加任何引号的形式,如果是不含空格的连续字符串,在命令中可以直接使用,否则可以用双引号或单引号括起来。
在命令中使用字符串,可以遵循以上规则。
在less命令阅读的文档中查找某关键字,直接使用包含空格的字符串即可。

[root@localhost ~]# echo '$PATH'
$PATH
[root@localhost ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/rabbitmq_server-3.6.6/sbin:/usr/local/erlang/bin

执行多条命令的连接符,"&&"

[root@blog /]# echo 'hello ' && echo 'world'
hello 
world

脚本

强制删除关键字有关的进程

#/bin/bash

ps -ef | grep $1 | cut -c 9-15 | xargs kill -9
原文地址:https://www.cnblogs.com/nick-huang/p/6657789.html