Linux常用命令列:解鎖你的生產力

學習了一段時間的linux之後,開始著手基本命令的學習,這裡主要記錄一些學習過程中重要的知識點供以後查閱。

0、命令連線符

1);

前後命令依次執行,注意前後順序,若更變目錄,則必須在“一句”指令內

2)&

前面一個命令無論是否執行,後面的命令都能執行,兩個命令都執行

3)&&

前面一個命令執行成功後,才能執行後面一個命令,兩個命令都執行

4)|

前面一個命令無論是否執行,後面的命令都能執行且只執行後面一個

5)||

前面一個命令不能正常執行後,才能執行後面一個命令

1、系統資源監控命令

1)檔案系統檢視命令df

df命令是從檔案系統考慮的,不光要考慮檔案佔用的空間,還要統計被命令和程式佔用的空間 (最常見的是檔案已經被刪除,但是程式並沒有釋放空間)

2)統計目錄或檔案大小du

du命令是面向檔案的,只會計算檔案和目錄佔用的空間:

du -sh * | sort -nr

如:
檢視tomcat目錄下佔用空間最大的前6的目錄(du -h |sort -hr|head -n 6 不包括檔案)、檔案(du -ha|sort -hr |head -n 6 包括目錄):

3)檢視程序命令ps

[publisher@shfttppfbdb ~]$ ps -ef|grep sync

publish+ 15990 1 97 Jun30 ? 33-12:38:36 python3.6 -u sync_bmcapp_newversion.py

publish+ 40899 1 99 Jun29 ? 34-16:32:24 python3.6 -u sync_hxapp_newversion.py

publish+ 129897 129351 0 15:16 pts/1 00:00:00 grep --color=auto sync

[publisher@shfttppfbdb ~]$ ps -ef|grep sync |awk $'{print $2}'

15990

40899

129914

[publisher@shfttppfbdb ~]$

grep -v grep:從輸出結果來看,可以過濾掉查詢程序的自身這條命令。(grep -v 是反向查詢的意思,比如 grep -v grep 就是查詢不含有 grep 欄位的行)
#!/bin/shapp_name="manage"#應用名app_path="/app/Assistant"#應用位置pid=''#應用執行的pidMAX_TIMEOUT=10 #最大等待次數#重啟方法functionstop(){echo"開始停止${app_name}" pid=`ps aux|grep ${app_name}|grep -v grep|awk '{print $2}'` #獲取jar包執行的pidecho$pidif [ -z $pid ] ;then#如果pid的長度為空,說明沒有在執行echo"${app_name}未執行,直接啟動"elseecho"${app_name}正在執行中,程序號:"${pid}kill -15 $pidfi#等待60S進行強殺for((i=0;i<$MAX_TIMEOUT;i++))do pid=`ps aux|grep ${app_name}|grep -v grep|awk '{print $2}'`if [ -z $pid ]; thenbreakelseecho"${app_name}停止中..."fi sleep 6doneif [ -z $pid ] ;thenecho"${app_name}已停止"elsekill -9 $pidecho"${app_name}已停止"fi}stop

2、編輯命令vi

1)命令列模式 (command mode/一般模式)

  任何時候,不管使用者處於何種模式,只要按一下“ESC”鍵,即可使Vi進入命令列模式;我們在shell環境(提示符為$)下輸入啟動Vi命令,進入編輯器時,也是處於該模式下。

  在該模式下,使用者可以輸入各種合法的Vi命令,用於管理自己的文件。此時從鍵盤上輸入的任何字元都被當做編輯命令來解釋,若輸入的字元是合法的Vi命令,則Vi在接受使用者命令之後完成相應的動作。但需注意的是,所輸入的命令並不在螢幕上顯示出來。若輸入的字元不是Vi的合法命令,Vi會響鈴報警。

如:G跳到文字末尾,gg跳到文字開頭

2)文字輸入模式 (input mode/編輯模式)

  在命令模式下輸入插入命令i(insert)、附加命令a (append)、開啟命令o(open)、修改命令c(change)、取代命令r或替換命令s都可以進入文字輸入模式。在該模式下,使用者輸入的任何字元都被Vi當做檔案內容儲存起來,並將其顯示在螢幕上。在文字輸入過程中,若想回到命令模式下,按"ESC"鍵即可。

如,i,a,o,c等命令

3)末行模式 (last line mode/指令列命令模式)

  末行模式也稱ex轉義模式。

  Vi和Ex編輯器的功能是相同的,二者主要區別是使用者介面。在Vi中,命令通常是單個鍵,例如i、a、o等;而在Ex中,命令是以按回車鍵結束的正文行。Vi有一個專門的“轉義”命令,可訪問很多面向行的Ex命令。在命令模式下,使用者按“:”鍵即可進入末行模式下,此時Vi會在顯示視窗的最後一行(通常也是螢幕的最後一行)顯示一個“:”作為末行模式的提示符,等待使用者輸入命令。多數檔案管理命令都是在此模式下執行的(如把編輯緩衝區的內容寫到檔案中等)。末行命令執行完後,Vi自動回到命令模式。

如:(shift+:鍵,進入此模式)q!強制退出,wq儲存退出等命令。

4)Vim 字串替換

查詢和替換是任意一款文字編輯器的一組常見和必備功能。下面就來講解 Vim 中的字串替換功能。
Vim 使用以下命令結構實現替換功能。

:<range> s/<search_string>/<replace_string>/<modifier>

% – 對整個檔案執行

< start _line > < end_line > – 在一組特定的行上面執行操作
g – 全域性替換

gc – 在每次更換之前要求確認

gn – 忽略替換功能並突出顯示查詢結果。
例如,在 PackageList.txt 檔案裡用 Python3 字串替換所有 python 字串。
:%s/python/Python3/g
接下來,我們來試試範圍這一個域。其實,我們在前面的例子裡,已經使用了 % 範圍(對整個檔案範圍)。
如果我們不想在整個檔案範圍進行查詢替換,如果我們只想在某幾個特定行進行這種操作,需要怎麼做?我們可以採用類似於以下命令格式:
:200,250 s/python/Python3/g
執行完以上操作,Vim 會將第 200 行開始並在第 250 行結束的所有 python 替換為 Python3 。
此功能不僅限於一個詞,還可以完成對多個關鍵詞的替換。它的命令格式如下:
:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g
比如,讓我們想要將文字中所有 python 和 py 更改為 Python3 。
:%s/python\|py/Python3/g
區分大小寫
本文前面提到的所有替換操作都是區分大小寫的。例如,Python,python ,PYTHON 等都是不同的。

如果你要忽略大小寫,可以在搜尋字串後面加上一個 \c ,如下:

/<search_term>\c

:%s/<search_term>\c/<replace_term>/g

3、檔案搜尋命令

1)字串搜尋命令-grep

#

查詢指定字串string

grep 'string' filename

#

若需要在資料夾下所有檔案查詢

grep 'string' dirPath/*

補充:若目錄下含有多級子目錄,則用 grep -r "string" ./
在檔案當中搜尋符合條件的字串,如果需要匹配,使用正則表示式進行匹配,正則表示式時包含匹配。

2)檔案搜尋命令find

#

搜尋檔案

find [搜尋範圍] [搜尋條件]

find / -name install.log

#

避免大範圍搜尋,會非常消耗系統資源

在系統中搜索符合條件的檔名,如果需要匹配,使用萬用字元匹配,萬用字元是完全匹配。
#

查詢10天前修改的檔案

find . -mtime +10

#

atime 檔案訪問時間

#

ctime 改變檔案屬性

#

mtime 修改檔案內容


#

查詢檔案大小是25KB的檔案

find . -size 25k


#

查詢i節點是262422的檔案

find . -inum 262422


#

查詢/etc目錄下,大於20KB且小於50KB的檔案

find /etc -size +20KB -a -size -50KB

#

-a and 邏輯與,兩個條件都滿足

#

-o or 邏輯或,兩個條件滿足一個即可


#

查詢/etc目錄下,大於20KB且小於50KB的檔案,並顯示詳細資訊

find /etc -size +20k -a -size -50k -exec ls -lh {}\;

#

-

exec

/-ok命令{}\; 對搜尋結果執行操作

注:
萬用字元:

*匹配任意內容
?匹配任意一個字元
[]匹配任意一箇中括號內的字元

3)命令搜尋命令whereis與which

#

搜尋命令所在路徑及幫助文件所在位置

whereis 命令名

-b:只查詢可執行檔案
-m:只查詢幫助檔案

4)檔案搜尋命令locate

#

在後臺數據庫中按檔名搜尋,搜尋速度更快

locate 檔名

/var/lib/mlocate :locate命令所搜尋的後臺資料庫

updatedb:更新資料庫

4、檔案傳輸命令

  • 前提條件:
伺服器要開啟寫入許可權;

本地和伺服器都要安裝有 scp 包;
  • 如何傳輸:
    利用 scp、rsync、rz傳輸檔案

1) 從伺服器上下載檔案

scp username@servername:遠端目錄/檔名 本地目錄
例:scp [email protected]:/var/www/test.txt .
(把 192.168.0.101 上的 /var/www/test.txt 檔案下載到本地目錄 /var/www/local_dir)

2)從伺服器上下載目錄

scp -r username@servername:遠端目錄 本地目錄
例:scp -r [email protected]:/var/www/test .
(把 192.168.0.101 上的 /var/www/test 目錄下載到本地目錄 /var/www)

3)上傳本地檔案到目標伺服器

scp /本地目錄/檔名 username@servername:遠端目錄
例:scp /var/www/test.txt [email protected]:/var/www/
(把本地目錄 /var/www/ 下的 test.txt 檔案上傳到 192.168.0.101 的 /var/www/ 目錄中)

4)上傳本地目錄到目標伺服器

scp -r 本地目錄 username@servername:遠端目錄
例:scp -r /var/www/local_dir [email protected]:/var/www/
(把本地目錄 /var/www/local_dir 上傳到伺服器的 /var/www/ 目錄)

5)rsync從遠端獲取目錄

(可以加引數排除複製某些目錄);
rsync -azh -ssh --exclude 'l_temp' --exclude 'l_tmp/claimImageList' [email protected]:/t/system_temp /t/system_temp
排除複製l_temp 和l_tmp/claimImageList

目錄結構:

/t/system_temp

/t/system_temp/l_temp

/t/system_temp/l_tmp/claimImageList

rsync -az /tpsys/applications/oceanbase_check /tpsys/applications/ --log-file=./rsync_oceanbase_check.log --exclude=

'oceanbase-client-1.1.10.jar'

--delete
rsync -az /tpsys/applications/oceanbase_check [email protected]:/tpsys/applications --log-file=./rsync_oceanbase_check.log --exclude-from /tpsys/applications/conf/sync_exclude.conf --delete

6)使用rz從本地電腦傳輸檔案

7)使用sftp傳輸

sftp username@ip

put [本地檔案的地址] [伺服器上檔案儲存的位置]

get [伺服器上檔案儲存的位置] [本地要儲存的位置]

#

當前本地的目錄就是登陸時的目錄

5、linux文字操作

1)linux三劍客-grep、sed、awk

awk、grep、sed請見[https://www.cnblogs.com/hoaprox/p/18269422]

6、其他常用命令

1)排序命令sort

在linux的使用過程中,總是避免不了排序問題。比如,topN問題。linux提供了sort排序命令,支援常用的排序功能。

sort命令支援很多引數,常用引數如下:

2)linux下打檔案分割命令split

split -b 1024M bkce_src-5.1.28.tar.gz bkce_

cat bkce_* >bkce_src-5.1.28.tar.gz

md5sum bkce_src-5.1.28.tar.gz

3)掛載命令mount

(1)查詢與自動掛載

#

查詢系統中已經掛載的裝置

mount

#

依據配置檔案/etc/fstab的內容,自動掛載

mount -a

#

檢視192.168.161.128掛載

showmount -e 192.168.161.128

(2)掛載命令格式

mount [-t 檔案系統] [-o 特殊選項] 裝置檔名 掛載點
-t 檔案系統:加入檔案系統型別來指定掛載的型別,可以ext3、ext4、iso9660等檔案系統

-o特殊選項:可以指定掛載的額外選項

(3)解除安裝命令

unmount 裝置檔名或掛載點

(4)centos安裝nfs-server

在CentOS上安裝NFS服務的步驟如下:
服務/客戶端安裝NFS軟體包:

sudo yum

install

nfs-utils

服務端啟動NFS服務並設定開機自啟:

sudo systemctl start rpcbind

sudo systemctl start nfs-server

sudo systemctl start nfs-lock

sudo systemctl start nfs-idmap

sudo systemctl

enable

rpcbind

sudo systemctl

enable

nfs-server

sudo systemctl

enable

nfs-lock

sudo systemctl

enable

nfs-idmap

服務端配置NFS共享,在/etc/exports新增如下內容(假設您想要共享的目錄是/data,並且允許所有主機訪問)

/nfs/

data

*(

rw

,

sync

,

no_root_squash

,

no_all_squash

)

服務端應用配置並重啟NFS服務:

sudo exportfs -rav

sudo systemctl restart nfs-server

# systemctl daemon-reload重新載入服務資源

服務端如果有防火牆執行,允許NFS透過防火牆

sudo firewall-cmd --permanent --zone=

public

--

add

-service=nfs

sudo firewall-cmd --permanent --zone=

public

--

add

-service=mountd

sudo firewall-cmd --permanent --zone=

public

--

add

-service=rpc-bind

sudo firewall-cmd --reload

現在NFS伺服器應該已經設定並運行了。客戶端可以透過showmount命令來檢視伺服器上的共享或者掛載共享目錄。
客戶端,使用以下命令來掛載NFS共享(臨時):

sudo mount <nfs-server-ip>

:/nfs/data

/nfs/data

# 替換<nfs-server-ip>為NFS伺服器的IP地址,/data是客戶端上用於掛載共享的目錄

客戶端的/etc/fstab新增如下內容來掛載NFS共享(永久):
192.168

.

44.132:/nfs/data

/nfs/data nfs defaults

00

(5)Ubuntu安裝nfs-server

在Ubuntu上安裝NFS伺服器的步驟如下:
更新軟體包列表:

sudo apt

update

安裝NFS核心伺服器包:
#建立要共享的目錄:

sudo

mkdir

-p /srv/nfs/share

授權網路中的計算機訪問共享目錄,sudo vi /etc/exports新增以下行到檔案中(將<client_IP>替換為客戶端IP地址或子網):

/srv/nfs/share <client_IP>(rw,

sync

,no_subtree_check)

應用配置更改:

sudo exportfs -

ra

啟動NFS服務:

sudo systemctl

start

nfs

-

kernel

-

server

使NFS服務開機自啟:

sudo systemctl

enable

nfs-kernel-server

在客戶端計算機上,您需要安裝NFS通用檔案系統客戶端:
sudo

apt install nfs-

common

然後,在客戶端您可以掛載伺服器上的共享目錄(臨時):
#替換 <nfs_server_ip> 為NFS伺服器的IP地址

sudo mount <nfs_server_ip>

:/srv/nfs/share

/mnt

客戶端的/etc/fstab新增如下內容來掛載NFS共享(永久):

192.168.44.132:/applications /applications/nfs nfs defaults 0 0

4)expect命令

expect是一個免費的程式設計工具,用來實現自動的互動式任務,而無需人為干預。說白了expect就是一套用來實現自動互動功能的軟體需要自行安裝。

yum install -y expect

  • expect基礎

    在使用expect時,基本上都是和以下四個命令打交道:
命令 作用

spawn 啟動新的程序

expect 從程序接收字串

send 用於向程序傳送字串

interact 允許使用者互動
#!/usr/bin/expect
# 啟動 ssh 程序,連線到遠端伺服器

# 期望伺服器傳送包含 "password" 的提示

expect

"password:"
# 傳送密碼

send

"mypassword\r"
# 期望看到命令列提示符

expect

"$ "
# 傳送命令

send

"ls -l\r"
# 期望命令執行結果

expect eof

spawn命令用來啟動新的程序,spawn後的expect和send命令都是和使用spawn啟動的新程序進行互動。

expect通常用來等待一個程序的反饋,我們根據程序的反饋,再使用send命令傳送對應的互動命令。

send命令接收一個字串引數,並將該引數傳送到程序。

interact命令用的其實不是很多,一般情況下使用spawn、expect和send和命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact命令的,interact命令主要用於退出自動化,進入人工互動。比如我們使用spawn、send和expect命令完成了ftp登陸主機,執行下載檔案任務,但是我們希望在檔案下載結束以後,仍然可以停留在ftp命令列狀態,以便手動的執行後續命令,此時使用interact命令就可以很好的完成這個任務。

[https://blog.csdn.net/givenchy_yzl/article/details/118079170]

5)openssl加解密

tar -zcf - host.conf | openssl des3 -salt -k ZYProduct@2022 | dd of=host.des dd if=host.des | openssl des3 -d -k "ZYProduct@2022" | tar zxf -

6)eval命令

eval是一個內建的Linux命令,用於將指定的引數作為shell命令執行。它將引數組合成一個字串,並將其作為輸入提供給shell,然後在當前的shell環境中執行生成的命令。
語法:eval [argument]

7)轉化引數命令xargs

extended arguments縮寫,可以將標準輸入轉化成引數,傳遞給後面的命令。
語法:(預設命令是echo)

xargs [引數] [命令]

(1)基礎
  • 引數:

    -n:指定一次傳遞多少個引數(預設根據空格或者換行拆分,進行一次傳遞)

    -d:指定拆分的字元

    -p:顯示要執行的命令,需要確認執行

    -t:顯示要執行的命令,直接執行

    -I:指定佔位符,通常為{}

    -r:如果傳遞引數為空,則不執行
  • 操作:

    多行處理成一行
(2)例項
  • 找出含有“password”的txt檔案
#find . -name "*.txt" -exec grep "password" {} \;
#find . -name "*.txt" |xargs grep "password"
  • 指定一次傳遞一個引數
# echo "hello world" |xargs -n 1
  • 根據“#”進行拆分
# echo "hello#world" |xargs -d "#"
  • 佔位符
#echo "hello#world" |xargs -I {} echo {}
#echo |xargs -r echo

8)echo輸出命令

echo [選項] [輸出內容]
選項:-e:支援反斜線控制字元轉換
  • 設定顯示顏色
#

\e[1開啟 、\e[0關閉

echo -e "\e[1;33m test \e[0m"

7、linux使用者管理

1)linux使用者型別

2)linux使用者

3)groupadd/useradd

用groupadd和useradd命令為系統新增mysql 組和使用者
語法如下:

groupadd mysql

useradd -u 544 -d /home/mysql -g mysql -m mysql

4)chown 改變使用者和所屬組命令

將test.php 檔案的所屬使用者設定成zhuo,所屬使用者組設定成zhuogroup

chown zhuo:zhuogroup test.php

將testfiel 及其內部檔案所屬使用者設定成zhuo,所屬使用者組設定成zhuoroup

chown -R zhuo:zhuogroup testfile

7、linux檔案管理

1)linux檔案型別

2)

9、其他常用功能

1)不知道分類,可以解決ssh遠端登入shell問題

ssh -tt [email protected] << EOF

sh $proddomaindir/stopappserver1.sh

sh $proddomaindir/startappserver1.sh

exit

EOF

OR

ssh [email protected] "rm -rf /tsys/applications/nginx/log/*"

2)伺服器上近一分鐘檔案變動監控

#!/bin/bashif [ -e "/tsys/applications//web" ];thenfor i in `find /tsys/applications//web -type f -cmin 1 ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz"`doecho `date +%F%t%T`" "$i >>/tsys/applications/showChangeFile.log;donefi

3)檔案防篡改監控

#!/bin/bashoriginal_publish_dir='/tsys/applications//web'current_publish_dir='/tsys/applications//web'original_MD5='original_MD5.txt'current_MD5='current_MD5.txt'if [ "$1" == "original" ];thencd /tsys/applications && rm -rf ./$original_MD5 find $original_publish_dir -type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" -exec md5sum {} \;| sort >/tsys/applications/$original_MD5fiif [ "$1" == "current" ];thencd /tpsys/applications && rm -rf ./$current_MD5 find $current_publish_dir -type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" -exec md5sum {} \;| sort >/tsys/applications/$current_MD5 backcode=`diff -q $original_MD5$current_MD5 | awk '{print $1}'`fiif [ "$backcode" != "" -a "$1" == "current" ];thenecho `date +%F%t%T`" " `diff $original_MD5$current_MD5 |awk '{print $3}'|xargs` >/tsys/applications/showDiffFile.logfi

4)讀取csv檔案,根據條件建立目錄並複製檔案

#!/bin/bashtr -d '\r' < "pensionmain.csv" > "output.csv"csv_file="./output.csv"while IFS=, read -r column1 column2do dir_name="$column1"if [ ! -d "$dir_name" ];thenecho"mkdir $dir_name" mkdir "$dir_name"echo"./$dir_name/ $column2" cp $column2 ./$dir_name/elseecho"./$dir_name/ $column2" cp $column2 ./$dir_name/fidone < "$csv_file"

10、使用semanage管理SELinux安全策略

semanage命令用於管理SELinux的策略,格式為“semanage [選項] [檔案]”。

SELinux服務極大地提升了Linux系統的安全性,將使用者許可權牢牢地鎖在籠子裡。semanage命令可以設定檔案、目錄的策略,還可以管理網路埠、訊息介面。

1)常用引數

port: 管理定義的網路埠型別

fcontext: 管理定義的檔案上下文

-l: 列出所有記錄

-a: 新增記錄

-m: 修改記錄

-d: 刪除記錄

-t: 新增的型別

-p: 指定新增的埠是tcp或udp協議的,port子命令下使用

-e: 目標路徑參考原路徑的上下文型別,fcontext子命令下使用

2)檢查semanage是否有安裝

如果沒有,需要安裝semanage

[root@localhost ~]# yum install policycoreutils-python -y

3)Selinux是否開啟

[root@localhost ~]# egrep -i selinux /etc/sysconfig/selinux | egrep -v "#"

SELINUX=enforcing

SELINUXTYPE=targeted

如selinux未開啟就需要進配置檔案把selinux設定為enforcing

[root@localhost ~]# vim /etc/sysconfig/selinux

SELINUX=enforcing

重啟使其生效

[root@localhost ~]# reboot

4)檢視服務使用埠號

檢視etc/httpd/conf/httpd裡看看埠號是多少

egrep -i listen /etc/httpd/conf/httpd.conf | egrep -v "#"

5)列出所有定義的埠

semanage port -l

6)列出指定的埠型別的埠

semanage port -l | grep -w http_port_t
semanage port -l | grep -w 443

7)建立、新增、刪除埠

#

add

semanage port -a -t http_port_t -p tcp 8081

#

del

semanage port -d -t http_port_t -p tcp 8081

連結:https://www.cnblogs.com/hoaprox/p/18246830
(版權歸原作者所有,侵刪)


相關文章