show me the code and talk to me,做的出來更要說的明白
GitHub 項目JavaHouse同步收錄
我是布爾bl,你的支持是我分享的動力!
引入
作為一名合格的后端開發人員,我們難免要在 Linux 環境下進入操作,查找問題,配置文件等等操作。因此,我覺得我們需要掌握簡單的 Linux 命令。本文簡簡單單介紹一下 Linux 的常見操作,努力讓讀者在 Linux 環境下可以進行工作。
目錄結構
Linux 大體目錄結構如圖所示。其中上面的 / 表示的是跟目錄。
顯示目錄位置pwd
[root@iZm5eixsxpdmrg95cpxvmlZ /]# pwd
/
進入目錄 cd
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cd usr/
[root@iZm5eixsxpdmrg95cpxvmlZ usr]# pwd
/usr
可以看到我們進入了 usr 目錄
顯示內容 ll
[root@iZm5eixsxpdmrg95cpxvmlZ usr]# ll
total 136
dr-xr-xr-x. 2 root root 32768 Jan 6 21:00 bin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 etc
drwxr-xr-x. 2 root root 4096 Apr 11 2018 games
drwxr-xr-x. 69 root root 12288 Dec 4 11:16 include
drwxr-xr-x 3 root root 4096 Dec 4 11:27 java
dr-xr-xr-x. 33 root root 4096 Jan 6 21:02 lib
dr-xr-xr-x. 49 root root 36864 Jan 6 21:00 lib64
drwxr-xr-x. 24 root root 4096 Dec 4 11:16 libexec
drwxr-xr-x. 21 root root 4096 Jan 6 21:02 local
dr-xr-xr-x. 2 root root 16384 Jan 6 21:02 sbin
drwxr-xr-x. 104 root root 4096 Jan 6 21:00 share
drwxr-xr-x. 4 root root 4096 Jul 11 2019 src
lrwxrwxrwx. 1 root root 10 Jul 11 2019 tmp -> ../var/tmp
該命令可以顯示目錄里面所有的文件名稱、文件的權限、文件大小(kb)等等詳細信息。
進入根目錄 cd /
[root@iZm5eixsxpdmrg95cpxvmlZ usr]# cd /
[root@iZm5eixsxpdmrg95cpxvmlZ /]# ll
total 2097224
lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 11 2019 boot
drwxr-xr-x 6 root root 4096 Dec 15 10:04 data
drwxr-xr-x 19 root root 2960 Dec 15 10:05 dev
drwxr-xr-x. 82 root root 4096 Jan 6 21:02 etc
drwxr-xr-x. 2 root root 4096 Apr 11 2018 home
drwxr-xr-x 3 root root 4096 Dec 4 11:04 java
lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Jul 11 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 92 root root 0 Dec 15 10:05 proc
dr-xr-x---. 5 root root 4096 Jan 10 10:57 root
drwxr-xr-x 24 root root 720 Jan 6 21:00 run
lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
-rw------- 1 root root 2147483648 Dec 4 11:13 swapfile
dr-xr-xr-x 13 root root 0 Dec 15 15:28 sys
drwxrwxrwt. 9 root root 4096 Jan 10 03:15 tmp
drwxr-xr-x. 14 root root 4096 Dec 4 11:27 usr
drwxr-xr-x. 19 root root 4096 Jul 11 2019 var
進入上級目錄 cd ..
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cd /usr/
[root@iZm5eixsxpdmrg95cpxvmlZ usr]# cd ..
[root@iZm5eixsxpdmrg95cpxvmlZ /]# pwd
/
文件權限chmod
一般來說一個文件有三種角色
- 擁有者
- 擁有組
- 其他人
權限有三種表示
- r 表示只可以讀文件,可以用數字 4 代替
- w 表示只可以寫文件,可以用數字 2 代替
- x 表示只可以執行文件,可以用數字 1 代替
其中數字可以累加
- 5 表示可讀可執行
- 6 表示可讀可寫
- 7 表示可讀可寫可執行
舉個例子
chmod 754 a.txt
該命令表示
- 擁有者可讀可寫可執行
- 擁有組可讀寫可執行
- 其他者可讀
可見三個數字是表示三種不同角色。
查找目錄
find 位置 -name 文件名
例子
[root@iZm5eixsxpdmrg95cpxvmlZ /]# find / -name tomcat
/usr/local/tomcat
/etc/logrotate.d/tomcat
/etc/selinux/targeted/active/modules/100/tomcat
/etc/rc.d/init.d/tomcat
顯然我們目的是在從目錄開始去尋找 tomcat 目錄
字符串處理
管道|
這個命令大家應該很常見,他是 Linux 里面管道,用於連接兩個或者多個命令,具體表現為上一個命令的輸出內容作為下個命令的輸入內容。
例子
[root@iZm5eixsxpdmrg95cpxvmlZ /]# ps aux| grep tomcat
root 2292 0.0 0.0 112712 956 pts/0 R+ 11:29 0:00 grep --color tomcat
www 6514 0.1 32.8 2993956 618504 ? Sl 2019 45:28 /usr/java/jdk1.8.0_231/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx919m -Dfile.encoding=UTF-8 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Djava.library.path=/usr/local/apr/lib -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
搜索文本grep
該命令用於匹配字符串,相當於我們常用的 Ctrl+f.
grep 匹配內容 文件名
例子
[root@iZm5eixsxpdmrg95cpxvmlZ /]# grep asda test.txt
asda
排序sort
sort [-ntkr] 文件名
其中:
n:數字排序
t:指定分隔符
k:指定一第幾列為標准排序,常與 t 一起使用
r:逆序
例子:
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt
a:2
s:6
d:1
a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt | sort
a:0
a:2
d:1
s:6
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt | sort -t ":" -k 2
a:0
d:1
a:2
s:6
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt | sort -t ":" -k 2 -r
s:6
a:2
d:1
a:0
計算重復uniq
uniq [-ic]
# -i 忽略大小寫
# -c 計算重復行數
常與sort
使用
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt
a:2 a a d
s:6 a V
d:1 a
a:0
a:0
a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt | uniq
a:2 a a d
s:6 a V
d:1 a
a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt | uniq -c
1 a:2 a a d
1 s:6 a V
1 d:1 a
3 a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt| sort | uniq -c
3 a:0
1 a:2 a a d
1 d:1 a
1 s:6 a V
進程
瞬間狀態ps
該命令用於查看某一時刻的進程狀態
ps 參數
#-A 列出所有的進程,和-e一樣
#aux 顯示所有的包含其他使用者的進程
查看tomcat進程是否存在
[root@iZm5eixsxpdmrg95cpxvmlZ /]# ps aux | grep tomcat
www 6514 0.1 32.8 2993956 618504 ? Sl 2019 47:29 /usr/java/jdk1.8.0_231/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx919m -Dfile.encoding=UTF-8 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Djava.library.path=/usr/local/apr/lib -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 32062 0.0 0.0 112712 952 pts/0 R+ 17:46 0:00 grep --color tomcat
實時狀態top
該命令用於查看cpu實時運行狀態,內存空間
通過pid終止進程kill
通過名稱終止進程killall
killall
命令比較安全,可以輸出進程名稱終止,避免輸錯數字pid
端口占用 lsof
改命令查看端口是否被占用
[root@iZm5eixsxpdmrg95cpxvmlZ /]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5437 mysql 30u IPv4 94759 0t0 TCP *:mysql (LISTEN)
vim 編輯器
vim編輯器是Linux的文本編輯器,相當window的記事本。
查找關鍵字 /
在vim里面我們使用 / 關鍵字
查找關鍵字
退出
使用 esc
和:wq
組合保存退出vim
文本處理工具awk
awk
默認以空格划分域(列數),因此我們可以通過 awk
打印特定的列
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt
a:2 a a d
s:6 a V
d:1 a
a:0
a:0
a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# awk '{print $1}' test.txt
a:2
s:6
d:1
a:0
a:0
a:0
指定分割-F 分隔符
如果我們不需要空格分割,可以指定其他
[root@iZm5eixsxpdmrg95cpxvmlZ /]# cat test.txt
a:2 a a d
s:6 a V
d:1 a
a:0
a:0
a:0
[root@iZm5eixsxpdmrg95cpxvmlZ /]# awk -F : '{print $1}' test.txt
a
s
d
a
a
a