Linux常用命令

fanhaixin發表於2024-12-05

Linux常用命令

目錄
  • Linux常用命令
      • 軟體安裝的方式
        • 1. 使用yum安裝
          • 1.1. yum解除安裝軟體
        • 2.使用rpm安裝
          • 2.1 語法格式
          • 2.2 檢視包是否成功安裝
      • path變數
        • 1. path變數
      • 檔案專題
        • 1. 檔案詳細屬性
        • 1.1 檢視檔案詳細屬性(訪問時間,修改日期等)
        • 2. 檔案許可權
        • 3. 硬連結和軟連線
          • 3.1 硬連結
          • 3.2 軟連結
        • 4. 壓縮與接壓縮
          • 4.1 tar
          • 4.2 zip
      • 四劍客專題
          • 1. find
            • 1.1 基礎語法
            • 1.2 find查詢到的檔案交給其他命令去處理
        • 2. grep
        • 3. sed
        • 4. awk
          • 4.1 語法結構
          • 4.3 awk的內建變數
          • 4.2 案例
      • 正規表示式
        • 1. 特殊符號
        • 2. 正規表示式
      • 使用者管理
        • 1. 使用者分類
        • 2. 使用者相關的配置檔案
        • 3. 與使用者相關的目錄
        • 4. 使用者相關的命令
        • 5. MD5指紋校驗
        • 6. sudu提權
      • 檔案許可權
        • 1. 檢視使用者對當前檔案的許可權
        • 2. rwx對應的數字
        • 3. 改變檔案許可權
        • 4. rwx對於檔案含義
        • 5. rwx 對於目錄的作用
        • 6. linux 系統預設許可權控制命令UMASK
        • 7. 檔案的隱藏許可權位
      • 定時任務
        • 1. 定時任務分類
      • 磁碟管理
        • 1. 磁碟分類
          • 1.1 磁碟介面
          • 1.2 機械磁碟轉速
        • 2. 磁碟raid
        • 3. 磁碟分割槽
        • 4. 磁碟相關案例
      • 任務管理
        • 1. 程序的概述
        • 2. 監視程序狀態
          • 2.1 案例
          • 2.2 使用top命令檢視當前的程序狀態 動態
        • 3. 管理程序狀態
        • 4. 程序後臺執行
  • 方式一
  • 方式二
      • 網路知識
          • 1. OSI7層模型
          • 2. 網路抓包
            • 2.1 Linux轉包工具tcpdump

軟體安裝的方式

1. 使用yum安裝

yum -y install 包的名稱
yum -y install package1   package2

# 檢視某個命令是哪個包的
1. 方式1
yum provides rz
# 檢視rz是屬於哪個包的
方式2
yum  search rz 

特點:

(1) 自動解決依賴

(2) 安裝的位置是固定的,無法修改

(3) 清空yum倉庫的快取,在嘗試安裝軟體

yum clean all

1.1. yum解除安裝軟體
yum -y remove  包名
# 一次性可解除安裝多個
# 類似覆蓋安裝,已經安裝過,但是有問題,再重新覆蓋安裝
yum -y reinstall 包名

2.使用rpm安裝

  1. 必須將軟體下載到本地才能安裝
  2. 不能自動解決依賴
  3. 在第三方官網上下載的是.rpm包
2.1 語法格式
rpm -ivh  包名
# 注意包名必須是.rpm結尾的
# 大多數依賴都存在與yum倉庫,如果網路正常,可以使用yum安裝的方式先解決依賴,在透過rpm方式安裝

# 引數
	-i  # install 安裝
	-v	# 顯示過程 verbose
	-h  # 顯示進度
	-qa # 是否安裝
	-ql # 列出安裝的軟體裝了哪些東西
	-qc # 列出指定包的配置檔案
	-e  # 解除安裝
	-U  # 升級,可以替代-i 
# 注意  不管使用rpm安裝還是yum安裝的方式,都能使用yum  -y remove進行解除安裝
2.2 檢視包是否成功安裝
--方式一:使用which
which  wget
# which  命令名稱
--方式二 檢視包是否安裝
rpm -qa  包名
# 直接回車,列出安裝的所有rpm包
--方式三:列出指定安裝的包裝了哪些東西
rpm -ql  包名
[root@sql ~]#rpm -ql  yum
/etc/logrotate.d/yum
/etc/yum
/etc/yum.conf
/etc/yum.repos.d
/etc/yum/fssnap.d
/etc/yum/pluginconf.d
/etc/yum/protected.d
/etc/yum/vars

--只顯示有關的配置吻技安
rpm -qc yum
[root@sql ~]#rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf

--rpm解除安裝
rpm -e 包名

--本地安裝所有的rpm檔案,能自動解決依賴(前提是所有依賴都下載到本地了)
yum  -y localinstall  *.rpm

path變數

作用:儲存著命令的路徑

(1):執行命令的流程

  • 使用者輸入命令
  • 系統會自動查詢PATH變數中的路徑是否存在這個命令
  • 如果存在則呼叫執行此命令
  • 如果不存在提示command not Found
  • 如果命令的路徑不存在PATH變數裡面,那麼執行該命令要使用絕對路徑或相對路徑

(2):

1. path變數

---1. path變數檢視
[root@sql ~]#echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

-- 2. 將指定命令路徑新增到PATH變數中,可以是大目錄,也可以是更具體的目錄
# 將/opt目錄新增到PATH變數中
[root@sql ~]#PATH="$PATH:/opt/"
[root@sql ~]#echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/
# 這樣的方式重啟失效,如果需要永久生效,需要放到vim /etc/profile 中
--在profile檔案中新增下面格式的內容即可
export PATH=/usr/local/mysql/bin:$PATH
# 在 PATH變數前後位置新增的效果是優先值,如果新增在前面需要在PATH變數前+ :  如果新增在後面,需要在PATH變數後+ :
export PATH=/usr/local/mysql/bin:$PATH:/opt

--重新載入 /etc/profile  檔案
# 方式一
source /etc/profile
# 方式2
. /etc/profile
# 方式3
重新連線客戶端或開啟新的客戶端


檔案專題

1. 檔案詳細屬性

--1. 檢視檔案詳細屬性
[root@sql ~]#ll -i  1.txt 
33574992 -rw-r--r-- 1 root root 4 9月  25 00:58 1.txt

# 第一列 33574992
   索引檔案->先找到檔案的索引才能找出具體裡面存放的內容
   索引->內容   存摺目標位置的指向指標
   檔案的inode號碼如果相同,說明兩個檔案互為硬連線
--2. 磁碟是否寫入需要檢查inode 和 block
inode: df -i   # 檢視是否有inode號
block: df -h   # 檢視是否佔用了空間

1.1 檢視檔案詳細屬性(訪問時間,修改日期等)

[root@sql ~]#stat a.txt
  檔案:"a.txt"
  大小:3               塊:8          	  IO 塊:4096   普通檔案
裝置:803h/2051d        Inode:33574979    硬連結:2
許可權:(0644/-rw-r--r--)  Uid:(0/root)   Gid:(0/root)
最近訪問:2024-09-28 00:07:41.420421323 +0800
最近更改:2024-09-28 00:07:56.573298870 +0800   
最近改動:2024-09-28 00:08:14.084398263 +0800
建立時間:-

[root@sql ~]#ll
總用量 8
-rw-r--r-- 2 root root 3 9月  28 00:07 a.txt
-rw-r--r-- 2 root root 3 9月  28 00:07 head_a.txt

# -rw-r--r-- 2 root root 3 9月  28 00:07 head_a.txt  這些資訊都是檔案屬性,其一變化則change會變化

image-20240928004811946

解釋:

  1. 訪問時間,修改後會變更一次,修改後的第一次檢視(cat等)會發生改變
  2. Modefy 修改時間,修改後時間會變化 重要
  3. change 修改後時間會變化

2. 檔案許可權

--1. 檔案許可權
# rw-r--r-- 
前三位:屬主位
中三位:屬組位
後三位:其他位

r->可讀->許可權數字  4
w->可寫->許可權數字  2
x->可執行->許可權數字 1
-  表示空,沒許可權
# 使用者組在Linux中沒有任何意義

3. 硬連結和軟連線

3.1 硬連結
[root@sql ~]#touch a.txt
[root@sql ~]#echo aa > a.txt 
[root@sql ~]#
[root@sql ~]#ln a.txt head_a.txt
[root@sql ~]#ll
總用量 8
-rw-r--r-- 2 root root 3 9月  28 00:07 a.txt
-rw-r--r-- 2 root root 3 9月  28 00:07 head_a.txt
[root@sql ~]#ll -i
總用量 8
33574979 -rw-r--r-- 2 root root 3 9月  28 00:07 a.txt
33574979 -rw-r--r-- 2 root root 3 9月  28 00:07 head_a.txt

# 第四列r--後面的2 硬連結的個數


# 建立方式
ln  原始檔  目標檔案

# 目錄預設是兩個硬連結
① . 表示當前目錄
② 表示他本身

硬連結的特點:

(1): 具有相同的inode號的檔案互為硬連結(a.txt和head_a.txt具有相同的inode號,因此他們互為硬連結)

(2): 硬連結類似於給超市開了多個門

(3): 相當於多張藏寶圖,但是指向相同的位置

(4): 目錄預設建立的硬連結的個數為兩個

(5):目錄不能建立硬連結

(6): 硬連結不能跨檔案系統

(7):刪除一個硬連結,不影響檔案

(8): 修改一個另外一個也會發生變化

硬連結的作用:

(1): 備份檔案,使用少

3.2 軟連結

特點

    1. 軟連結inode號不同,類似windows的快捷方式
    2. 軟連結中存放著原始檔的指標指向和詳細資訊,檔名稱是存在上級目錄的block中
    3. 軟連結預設的是一個
    4. 軟連結可以跨檔案系統
    5. 刪除原始檔會影響連結檔案,變為紅底白字,並一直閃爍
    6. 建立軟連結使用絕對路徑
-- 建立軟連結
ln -s  原始檔   目標檔案

軟連結和硬連結的區別:筆試題

  1. 硬連結的inode號相同,軟連結不同
  2. 建立方式不同
  3. 硬連結不能跨檔案系統,軟連結可以
  4. 目錄不能做硬連結,可以做軟連結,檔案兩個都能做
  5. 刪除硬連結不影響原始檔,刪除軟連線檔案不影響檔案
  6. inode 號為0,則檔案被刪除(沒有被程序呼叫),刪除原始檔影響軟連結檔案

4. 壓縮與接壓縮

4.1 tar
--tar命令
# 壓縮
tar -zcvf 壓縮包的名稱  檔案或目錄
	-z 必須的引數,使用gzip打包
	-c 建立檔案  create
	-v 顯示過程
	-f 指定檔案  
	-C 解壓到指定目錄

# 案例
--1. 打包當前的1.txt檔案為test.tar.gz
[root@sql ~]#echo aaa>  1.txt
[root@sql ~]#ll
總用量 4
-rw-r--r-- 1 root root 4 9月  28 01:01 1.txt
[root@sql ~]#cat 1.txt 
aaa
[root@sql ~]#tar -zcvf test.tar.gz 1.txt
1.txt
# tar zcvf test.tar.gz 1.txt  引數前不加-  也可以
[root@sql ~]#ll
總用量 8
-rw-r--r-- 1 root root   4 9月  28 01:01 1.txt
-rw-r--r-- 1 root root 118 9月  28 01:02 test.tar.gz

-- 檢視壓縮包的內容
tar  -tf test.tar.gz

-- 解壓

4.2 zip
--1.壓縮檔案
zip test.zip  file
--2. 解壓檔案
unzip test.zip
-d  解壓到指定目錄

# 案例
1. 壓縮檔案
zip  test.zip *.txt

2. 解壓
unzip test.zip   # 解壓到當前目錄

3. 解壓到指定目錄
unzip test.zip -d /opt/   # 解壓到/opt/目錄下

四劍客專題

1. find
1.1 基礎語法

禁止從/下直接查詢檔案

檔案型別

​ f 表示普通檔案

​ d 表示目錄

​ l 表示軟連結

​ b 表示塊裝置 硬體

​ c 表示位元組檔案

--按檔案型別查詢
### 查詢常規檔案
查詢所有的普通檔案:
find /path/to/search -type f

### 查詢目錄
查詢所有的目錄:
find /path/to/search -type d

### 查詢符號連結
查詢所有的符號連結:
find /path/to/search -type l

### 查詢塊裝置檔案
查詢所有的塊裝置檔案:
find /path/to/search -type b

### 查詢字元裝置檔案
查詢所有的字元裝置檔案:
find /path/to/search -type c

### 查詢套接字檔案
查詢所有的套接字檔案:
find /path/to/search -type s

### 查詢命名管道檔案
查詢所有的命名管道(FIFO)檔案:
find /path/to/search -type p

### 如果想在`/var/log`目錄中查詢所有的普通檔案,可以使用:
find /var/log -type f

--按檔名稱查詢
find /oldboy/ -name "1.txt"
find /oldboy/ -name "*.txt"

--不區分大小寫查詢
# + -i引數
find /oldboy/ -iname "*.txt"


--使用深度等級查詢(比如只查詢當前目錄下的一級目錄等)
[root@sql ~]#find ./ -maxdepth 1 -type f
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.bash_history
./.mysql_history
./.viminfo
./1.txt
./test.tar.gz
# -maxdepth 1 查詢當前目錄下一級目錄或檔案

-- 按照inode查詢檔案,當我們無法刪除檔案的時候,使用inode查詢輔助刪除
[root@sql ~]#ll -i
總用量 8
33574979 -rw-r--r-- 1 root root   4 9月  28 01:01 1.txt
33574987 -rw-r--r-- 1 root root 118 9月  28 01:02 test.tar.gz
[root@sql ~]#find ./ -inum 33574979
./1.txt

-- 根據檔案大小查詢
[root@sql /]#mkdir oldboy
[root@sql /]#cd oldboy/
[root@sql /oldboy]#dd if=/dev/zero of=1.txt bs=1M count=100
記錄了100+0 的讀入
記錄了100+0 的寫出
104857600位元組(105 MB)已複製,0.629038 秒,167 MB/秒
[root@sql /oldboy]#dd if=/dev/zero of=2.txt bs=1M count=10
記錄了10+0 的讀入
記錄了10+0 的寫出
10485760位元組(10 MB)已複製,0.123881 秒,84.6 MB/秒
[root@sql /oldboy]#dd if=/dev/zero of=3.txt bs=1M count=50
記錄了50+0 的讀入
記錄了50+0 的寫出
52428800位元組(52 MB)已複製,0.548066 秒,95.7 MB/秒
[root@sql /oldboy]#ll
總用量 163840
-rw-r--r-- 1 root root 104857600 9月  28 01:42 1.txt
-rw-r--r-- 1 root root  10485760 9月  28 01:42 2.txt
-rw-r--r-- 1 root root  52428800 9月  28 01:42 3.txt
[root@sql /oldboy]#ll -h
總用量 160M
-rw-r--r-- 1 root root 100M 9月  28 01:42 1.txt
-rw-r--r-- 1 root root  10M 9月  28 01:42 2.txt
-rw-r--r-- 1 root root  50M 9月  28 01:42 3.txt

# 1. 查詢檔案大於1M的檔案
[root@sql /oldboy]#find ./ -size +1M
./1.txt
./2.txt
./3.txt

# 2. 查詢檔案等於100M的檔案
find ./ -size 100M

# 3. 查詢檔案小於100M的檔案
find ./ -size -100M

# 4. 查詢大於1M並且小於100M的檔案
# -a 表示並且關係,可省略
find ./ -size +1M -size -100M
find ./ -size +1M -a -size -100M

# 5. 查詢檔案大於10M或者等於5M的檔案
# -o 表示 或
find ./ -size +10M -o -size 5M


--按照修改時間查詢
atime  訪問時間
mtime  修改時間
ctime  改變時間

# 1.查詢修改時間為10天前的檔案
find ./ -mtime +10

# 2. 查詢修改時間為2天內的
find ./ -mtime -2

1.2 find查詢到的檔案交給其他命令去處理

方法一:xargs

find 查詢檔案和使用xargs去掉換行符等的引數

find 命令中使用 -print0 引數,會在每個檔名的末尾附加一個空字元(null character,\0)而不是換行符來分隔檔名
此方法可以正確處理檔名中包含空格、換行符或其他特殊字元的情況,因為這些字元不會被視為檔名的分隔符。

xargs -0 
xargs 的 -0 引數告訴 xargs 以空字元(\0)而非空格或換行符為分隔符讀取輸入。
確保 xargs 能夠正確解析由 find -print0 生成的檔案列表,避免由於檔名中的空格或其他特殊字元導致的解析錯誤。


# 示例
find . -type f -name "*.jpg" -print0 | xargs -0 rm -f
# 刪除當前檔案下所有的jpg檔案  find 預設遞迴搜尋

xargs處理的內容預設會甩到命令的最後面去執行

但是使用 xargs -i {}

可以將xargs處理的內容查到指定位置執行

--1. find查詢到的內容進行刪除  交給rm處理
# xargs 後面的別名無效
find ./  -name "3.txt"|xargs rm

--2. 查詢到的內容交給ls檢視
find ./ -name "3.txt" |xargs ls -l

--3. 查詢到的檔案交給mv移動
find /opt/ -name "*.txt" |xargs -i mv {} /tmp/
find /opt/ -name "*.txt" |xargs -i cp {} /tmp/


方法二: exec

--1. find 查詢到的內容進行刪除,交給rm 處理
find ./ -name "1.txt" -exec rm {} \;
# \ 去掉;的特殊含義
# ;以分號結尾
--2. find結果交給cp
find ./ -name "1.txt" -exec cp {} /opt/ \;
--3. find結果交給mv
find ./ -name "1.txt" -exec mv {} /opt/ \;
--4. find結果交給ll
find ./ -name "1.txt" -exec ls -l {} \;

方法三: 優先執行

--1. 使用反引號優先執行的方式
``  $()
rm -rf `find ./ -name "1.txt"`
rm -rf $(find ./ -name "1.txt")
-- 2.find 交給 cp執行
cp `find ./ -name "1.txt"` /opt/

2. grep

模糊過濾查詢內容

# 語法結構
grep '查詢的內容' 檔案

引數:
	-r 遞迴過濾檔案內容
	-l 顯示包含匹配內容的檔名而不是具體的檔案內容
	-v 取反
	-w 精確匹配
	
	-i 不區分大小寫
	-n 顯示過濾到內容的行號
	-c 統計單詞次數
	-o 檢視匹配過程
	-E 擴充套件正則
	
	

3. sed

作用:

(1)內容查詢

(2)增加內容

(3)替換內容

(4)刪除內容

(5)格式化輸出

# 1. 查詢內容
語法結構:
	sed '/找誰/動作' file
	
	動作:
		-p: print 輸出查詢到的內容,模糊查詢
		-d: delete 刪除查詢到內容的行
	選項引數:
		-n:取消預設輸出--預設輸出所有內容

# 2. 替換--重點

語法:
	sed  's#替換誰#替換成誰#g'
	
	
# 3. 刪除,是臨時的不會修改原始檔。如果需要修改原始檔,新增 -i引數
sed '3d' file

案例1:刪除該檔案的第三行
[root@sql ~]#sed '3d' 1.txt    此時相當於預覽
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@sql ~]#sed -i  '3d' 1.txt 
[root@sql ~]#cat 1.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
		
案例2:指定區間刪除
sed '2,4' file
# 刪除第二行到第四行

案例3:過濾區間範圍進行統計,過濾時間日誌
比如:統計最近兩個小時的日誌或者過濾昨天一天的日誌

(1)日誌切割
mv  當前日誌並進行今日日期的命名即為日誌的切割,需要重啟服務

(2)取區間範圍統計,統計一個小時的日誌
sed -n '/2024:03:01/,/2024:04:01/p' acces.log



3. sed 增加/追加內容
語法:
	sed '3a 內容'  file  # 在第三行的後面追加內容
	sed '3a 內容'  file  # 在第三行處插入內容
	sed '3c 內容'  file  # 替換整行內容
	
4. 替換(想要修修改原始檔 。使用-i)
語法:
	sed 's#替換的內容#替換成誰#g' file
	### 可以是任意的字元
	sed 's///g' file
	sed 's@@@g' file
    引數:
		s 替換標誌
		g 全域性

案例1:替換內容
sed  's#root##g'  file    # 將root替換為空格

案例2:替換檔案中的特殊符號,替換:  為空格
sed 's#:# #g' file

案例3:替換多個字元為空格

sed 's#:/# #g' file  # 替換:和/為空格

4. awk

4.1 語法結構
awk 語法
	awk  '找誰' file
	查詢指定行:awk 'NR==3' 找出第三行
	模糊查詢:awk '/查詢內容/'   file
	區間模糊查詢:awk '//,//'    file
	比較表示式查詢:awk '$3==0'  file  第三列如果有等於0的行就輸出
				  awk '$1=="root"' file 第三列如果有root的行就輸出
				  
	awk '{動作}'  file
	# awk  找誰  幹啥
	awk '找誰{print  $1}'  file


awk 的內建變數
	(1): NR 儲存著每行的行號
	 NR==3  第三行
4.3 awk的內建變數

(1): NR 儲存著每行的行號

NR==3 取出第三行

NR!=3 ! = 取反

NR>3 找出大於3的行(第三行後面的行)

(2) : $0 儲存著每行的內容

,表示空格 awk '{print $0,NR}'

$1 表示第一列

$2 表示第二列

NF 儲存著最後與一列的列號

4.2 案例
案例1:awk按照行查詢
# 取出第三行
[root@sql ~]#cat 1.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@sql ~]#
[root@sql ~]#awk 'NR==3' 1.txt 
adm:x:3:4:adm:/var/adm:/sbin/nologin

# 案例2 :取出3-5行  並且 &&
[root@sql ~]#awk 'NR>2 && NR < 6' 1.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

# 案例3 取出第一行和大於第三行的內容  或者  ||

[root@sql ~]#awk 'NR==1 || NR>3' 1.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


# 案例4 輸出所有內容
awk '{print $0}' 1.txt   # 會輸出1.txt的所有內容

# awk 取列
awk '{print 列號}' file
列號  預設按照 tab 或者空格來分隔列數
$1 表示第一列
$2 表示第二列

案例1: 取出檔案中的第一列
awk '{print $1}'

案例2: 取出第一列和第二列
awk '{print $1"\t"$2}' file
awk '{print $2"\t"$1}' file
awk '{print $2,$1}' file


案例3 : 取出倒數第一列
awk '{print $NF}' file
案例4: 取出倒數第二列
awk '{print $(NF-1)}'


指定分隔符(預設分隔符是空格  和tab)
-F
# 以下愛兩種方式皆可
awk -F: '{print $1}' file  -F指定分隔符為:
# 下面這種方式 雙引號之內可以寫正則
awk -F ":" '{print $1}' file  -F指定分隔符為:

awk -F "[:/]" '{print $1}' file   以冒號或者/作為分隔符

awk運算
BEGIN 讀取檔案之前的操作

正規表示式

1. 特殊符號

(1)	; 命令的分隔符,不管前面的命令執行失敗或正確都會往後執行
[root@sql ~]#ll ; mkdir sc ;cd sc; pwd
總用量 8
-rw-r--r-- 1 root root   4 9月  28 01:01 1.txt
-rw-r--r-- 1 root root 118 9月  28 01:02 test.tar.gz
/root/sc

[root@sql ~/sc]#llll ; mkd scm ; pwd
-bash: llll: 未找到命令
-bash: mkd: 未找到命令
/root/sc

(2) && 命令分隔符,只有前面的命令執行成功,才會繼續向後執行,否則全部命令執行失敗
# 命令執行失敗 1. 命令錯誤  2. 執行結果錯誤,包括找不到等一切異常情況
mkdir nn && ll /opt

(3) || 前面的命令必須執行失敗,才執行管道後面的命令或內容
案例1:執行成功則不會執行後面的命令
[root@sql ~]#mkdir nn || ll
[root@sql ~]#ll
總用量 0
drwxr-xr-x 2 root root 6 9月  28 11:52 nn

案例2: 執行失敗執行後面的內容
# 如果進入oldboy目錄失敗則建立
[root@sql ~]#cd oldboy || mkdir oldboy
-bash: cd: oldboy: 沒有那個檔案或目錄
[root@sql ~]#ll
總用量 0
drwxr-xr-x 2 root root 6 9月  28 11:52 nn
drwxr-xr-x 2 root root 6 9月  28 11:53 oldboy

2. 正規表示式

  1. 正規表示式分類:
  • 基礎正則
  • 擴充套件正則
  1. ^word 以...開頭的行
grep '^o' oldboy.txt
# 只顯示以o開頭的行

# 取出以#開頭的所有行
[root@sql ~]#grep '^#' /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.

# 取出除了#開頭的所有行  grep  -v  grep取反
[root@sql ~]#grep  -v  '^#' /etc/selinux/config 

SELINUX=disabled
SELINUXTYPE=targeted 

  1. $ 以....結尾
# 1. 排查所有空行
[root@sql ~]#grep -v '^$' /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

# 2. 取出所有未被註釋的和非空行的行
[root@sql ~]#grep -v '^$' /etc/selinux/config  |grep -v '^#'
SELINUX=disabled
SELINUXTYPE=targeted

查詢檔案空行
grep ' ' oldboy.txt

檢視檔案內容行後面是否有空格

cat -A oldboy.txt

[root@sql ~]#cat -A oldboy.txt                                                                                                                                        
woshishi$                                                                                                                                                             
fndasnfna$                                                                                                                                                            
fadshfashf $           			 # 改行是以空格結尾                                                                                                                                             
fadsnbfjsanhfsjdplkaskas $       # 改行是以空格結尾                                                                                       	                                              
ghudasghfuhasdjihfasdjfokajfiq-fkemas$                                                                                                                                
dsamfasmodasfl]d;safdsa'kfa$                                                                                                                                          
$ 

# 檢視檔案內容是否存在tab鍵
[root@sql ~]#cat -A oldboy.txt 
woshishi$
fndasnfna$
fadshfashf $
fadsnbfjsanhfsjdplkaskas $
ghudasghfuhasdjihfasdjfokajfiq-fkemas$
dsamfasmodasfl]d;safdsa'kfa$
$
$
woshiole^Ibiy$   ^I 說明之間有一個tab鍵
-- 1. 如果使用 $ 獲取不到內容,一定要檢視檔案行是不是以空格結尾的

---2. 單引號 所見及所得  不會解析變數和特殊符號

---3. 雙引號 會解析變數和特殊符號

使用者管理

1. 使用者分類

預設的三類使用者
# 可以根據UID進行區別
1. 管理員  root   -> UID  0
2. 虛擬使用者       -> UID  1-999   在執行程式的時候必須使用一個使用者來執行,使用者不需要登入作業系統
3. 普通使用者	      -> UID  1000+ 包含1000  

我們自己建立的使用者可以指定任意的UID,如果不指定  預設從1000開始往後排

2. 使用者相關的配置檔案

(1) /etc/passwd 使用者檔案

[root@sql ~]#head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 以:為分隔  每一列的含義
root		表示使用者名稱稱
x			加密密碼檔案
0			UID
0			組ID
root		使用者的描述符(可以是空的)
/root		使用者的家目錄
/bin/bash	命令直譯器(表示使用者是普通使用者) /sbin/nologin  表示虛擬使用者,禁止登入			   作業系統


(2) /etc/shadow 密碼檔案

[root@sql ~]#cat /etc/shadow
root:$6$Qm7zquam$XjcgwIBJ05bu9yefuXZdVc5QMoSSP1N78oxpUcwYKw3N4qqczc1G0bCOuAKkPunODAnJ0Vt2gPpBj15jt5moJ/:19988:0:99999:7:::

root: 使用者
$6$Qm7zquam$XjcgwIBJ05bu9yefuXZdVc5QMoSSP1N78oxpUcwYKw3N4qqczc1G0bCOuAKkPunODAnJ0Vt2gPpBj15jt5moJ: 密碼(加密)


bin:*:18353:0:99999:7:::
# 使用者後面是*的表示虛擬使用者
bin:!!:18353:0:99999:7:::
# 兩個!! 表示普通使用者但沒有設定密碼
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::

(3) /etc/group 組檔案

[root@sql ~]#cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:

3. 與使用者相關的目錄

(1) /etc/skel

作用:建立使用者時,他是使用者家目錄的模板

第一步:使用命令建立使用者oldboy

第二步:系統在/home下建立目錄 /home/oldboy

第三步:系統將/etc/skel下的隱藏檔案複製到/home/oldboy目錄下,也設定為隱藏檔案

第四步:複製後將檔案的屬主陣列變更為oldboy

[root@sql ~]#ll /etc/skel/ -a
-rw-r--r--.  1 root root  193 4月   1 2020 .bash_profile
-rw-r--r--.  1 root root  231 4月   1 2020 .bashrc

1. 這兩個隱藏檔案存放的是環境變數
[root@sql ~] -> 此處如果變成-> -bash-4.2$  這種形式,就意味著使用者家目錄下可能缺失了上面的隱藏檔案

2. [root@sql ~] -> 此處如果變成-> -bash-4.2$
# 解決
(1) 複製/etc/skel/  .bash_profile  .bashrc 這兩個檔案到使用者的家目錄下
(2) 或者複製 /etc/skel下的所有隱藏檔案到使用者的家目錄下
(3) 複製後重新連線即可生效
	或者:使用 . 或者使用  source 會立刻讓 .bash_profile 執行一次
	..bash_profile   
	source .bash_profile
注意:可讀檔案即可複製->普通使用者只要使用者可讀許可權也能複製root使用者所屬的檔案

4. 使用者相關的命令

(1) 建立使用者

useradd

​ 引數選項:

​ -u 指定uid

​ -g 指定gid

​ -M 不建立家目錄(預設建立家目錄)建立虛擬使用者使用

​ -s 指定直譯器

​ /bin/bash 允許登入

​ /sbin/nologin 不允許登入 建立虛擬使用者使用

1. 預設建立使用者  不新增任何引數
useradd oldboy   建立olboy使用者

案例2:建立虛擬使用者test 不建立家目錄  不允許登入作業系統
[root@sql ~]#useradd -M -s /sbin/nologin test
[root@sql ~]#grep test /etc/passwd
test:x:1004:1004::/home/test:/sbin/nologin
# /home/test 此處只顯示家目錄  但是實際不存在


案例3:建立虛擬使用者test01 UID666 GID666 不建立家目錄  不允許登入作業系統
[root@sql ~]#useradd -u666 -g666 -M -s /sbin/nologin test01
useradd:“666”組不存在

# 如果指定GID,必須先建立,然後再建立指定的使用者的uid
# 如果指定UID  不指定GID  那麼小組會自動建立 GID會自動順延

正確步驟
(1). 建立組
[root@sql ~]#groupadd -g666 test01
(2). 再建立使用者
[root@sql ~]#useradd -u666 -g666 -M -s /sbin/nologin test01
[root@sql ~]#grep test01 /etc/passwd
test01:x:666:666::/home/test01:/sbin/nologin

(2) 修改使用者資訊

usermod
	-u  UID修改
	-g	GID修改
	-s	
	-G

(3) 刪除使用者

userdel -r 使用者名稱
-r 刪除使用者及其使用者的家目錄和郵件相關的所有檔案
	

(4) 建立和修改密碼

1. 互動式
		passwd	直接回車修改當前登入使用者的密碼
		passwd oldboy  修改/建立oldboy使用者的密碼

2. 非互動式
		echo 密碼|passwd --stdin 使用者名稱
# 修改oldboy使用者的密碼為1234
[root@sql ~]#useradd oldboy
[root@sql ~]#passwd oldboy
更改使用者 oldboy 的密碼 。
新的 密碼:
無效的密碼: 密碼是一個迴文
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@sql ~]#echo 1234|passwd --stdin oldboy
更改使用者 oldboy 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。

5. MD5指紋校驗

作用: 防止檔案被篡改

6. sudu提權

(1) 常用命令補充

1. id  使用者名稱
[root@sql ~]#id oldboy
uid=1005(oldboy) gid=1005(oldboy) 組=1005(oldboy)
2. w  顯示當前登入的使用者   from 列表示公網地址
[root@sql ~]#w
 23:23:51 up 0 min,  1 user,  load average: 0.21, 0.07, 0.03
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         23:23    7.00s  0.08s  0.00s w
3. 檢視出口的公網地址
[root@sql ~]#curl cip.cc
IP      : 116.178.186.47
地址    : 中國  新疆  烏魯木齊
運營商  : 聯通
資料二  : 中國新疆 | 聯通
資料三  : 中國新疆烏魯木齊市 | 聯通
URL     : http://www.cip.cc/116.178.186.47

4. last(顯示使用者什麼時候登入什麼時候退出) 
[root@sql ~]#last
root     pts/0        10.0.0.1         Thu Oct 10 23:23   still logged in 
reboot   system boot  3.10.0-1160.el7. Thu Oct 10 23:23 - 23:33  (00:10)   
root     pts/0        10.0.0.1         Wed Oct  9 23:47 - crash  (23:35)   
reboot   system boot  3.10.0-1160.el7. Wed Oct  9 23:47 - 23:33  (23:46)   
root     pts/0        10.0.0.1         Tue Oct  8 23:28 - down   (00:59)   
reboot   system boot  3.10.0-1160.el7. Tue Oct  8 23:28 - 00:28  (00:59)   
root     pts/0        10.0.0.1         Tue Oct  1 11:35 - crash (7+11:53)   

5.lastlog  顯示使用者最後一次登入的時間

(2) 切換使用者

su
語法:
	su - 使用者名稱稱
案例1:root使用者切換成普通使用者   --不需要密碼
su - oldboy
案例2:普通使用者切換root		  --需要密碼
su -
su - root

su 和  su -  的區別   su切換使用者會不載入環境變數
案例3:普通使用者切換普通使用者	    -- 需要密碼

(3) sudu 提權

給普通使用者授權

作用:

  1. 普通使用者提權
  2. 軟體的許可權提權,針對啟動軟體的使用者進行提權
1. 檢視當前普通使用者有無sudo許可權
sudo -l    # 然後輸入當前使用者的密碼檢視許可權
2. sudo 提權,在root中進行配置
# 如果要授予該使用者單獨的命令讓它有root的許可權執行該命令,則在第三列All下寫命令的絕對路徑
# 使用 which 命令名   檢視命令的絕對路徑
執行:visudo,會開啟檔案,在第100行後新增使用者即sudo許可權即可
 99 ## Allow root to run any commands anywhere
100 root    			ALL=(ALL)       ALL
	需要sudo的使用者名稱		不變			   寫命令的絕對路徑 
101	oldboy 				ALL=(ALL)		/usr/bin/cat

3. 儲存退出即可生效

4. 使用被授權的使用者進行測試

5. 使用被授權的普通使用者登入  sudo cat  /var/log/messasges


sudo 授權單個命令
oldboy 	ALL=(ALL)	/usr/bin/cat

sudo 授權多個命令  使用逗號分隔  命令都需要使用絕對路徑
oldboy 	ALL=(ALL)	/usr/bin/cat,/usr/bin/tailf

sudo 授權所有的命令	
oldboy 	ALL=(ALL)	All
# 使用sudo的時候不用輸入密碼
oldboy 	ALL=(ALL)	NOPASSWD: All

# 注意  普通使用者擁有sudu所有許可權後,為了避免執行命令每次輸入sudo
可以使用:sudo su - 會變為徹底的root使用者

sudo 授權所有的命令 取反(不能使用的命令)
oldboy 	ALL=(ALL)	All,!/usr/bin/rm, !/usr/bin/vim


檔案許可權

1. 檢視使用者對當前檔案的許可權

使用ll等檢視

2. rwx對應的數字

r	4	讀許可權
w	2	寫許可權
x	1	執行許可權
-	0	無許可權
命令或指令碼才有賦予執行許可權的意義,對於一個普通檔案來說,它的最高許可權應該是rw

3. 改變檔案許可權

每個位置的表示方式:
屬主:u	user
陣列:g	group
其他:o	other

chmod語法格式:
	chmod u+w  給屬主增加寫的許可權
	chmod u-w  給屬主取消寫的許可權

(1) 直接許可權賦值

案例1:給屬主位增加x許可權
[root@sql ~]#touch 1.txt
[root@sql ~]#ll
總用量 4
-rw-r--r-- 1 root root 345 10月 11 23:49 1.txt
[root@sql ~]#chmod u+x 1.txt
[root@sql ~]#ll
總用量 4
-rwxr--r-- 1 root root 345 10月 11 23:49 1.txt
案例2:給屬主位取消x許可權
chmod u-x 1.txt

案例3:給屬組怎加寫的許可權
chmod g+w 1.txt

案例4: 給其他人增加x的許可權
chmod o+x 1.txt
chmod o+wx 1.txt
chmod o+rwx 1.txt

案例5: 給所有位  u  g  o全部增加執行許可權
chmod +x  1.txt		--方式1
chmod a+x 1.txt		--方式2

案例6: 給所有位  u  g  o全部增加執行許可權
chmod -x  1.txt		--方式1
chmod a-x 1.txt		--方式2

案例7:先清空,在賦值  u=x
chmod u=x  1.txt   會把屬主的許可權先清空,在進行賦值x許可權

(2) 使用數字進行許可權賦值

chmod 644 file
6	rw
4	r
4	r

案例1:授權檔案 u 讀寫許可權  g 讀寫許可權  o 讀寫許可權
chmod 666 file

案例2:授權檔案的屬主可讀寫,其他位無許可權
chmod 600 file

(3) 遞迴授權

1. 授權目錄下所有的檔案許可權600
chmod -R 600 目錄
# 不建議使用,有可能更改目錄許可權

2. 實際場景中,我們只對檔案進行授權
find oldboy/ -type f |xargs chmod 600

4. rwx對於檔案含義

注意:當一個檔案屬於某個使用者,使用者及時沒有寫許可權,也可以使用強制寫入退出

檔案的rwx 表示檔案可讀 可寫 可執行 但是不能刪除

因為目錄的許可權決定檔案建立 刪除 移動 複製等

r 許可權對於檔案的作用
1): 只讀 可檢視檔案內容
2): 不能正常寫入,但是可以強制寫入:wq!
3): 不能執行,因為沒有x許可權

w 許可權對於檔案的作用
1) 啥都不能幹
2) 只能echo寫入  echo  hhh > 1.txt

x 許可權對於檔案的作用
1) 啥都不能幹

許可權組合才能正常使用
1) 許可權位置只有r是沒問題的表示檔案可讀
2) 如果檔案需要讀寫  必須  rw 一起
3) 想要執行檔案  必須  rx 一起
4) rwx  是對於指令碼的最高許可權
5) 對於檔案的最高許可權是rw(6)


5. rwx 對於目錄的作用

r 許可權的作用:啥都不能幹
w 許可權的作用:啥都不能幹
x 許可權的作用: 只能使用cd進入

總結:rwx 單個許可權對目錄的作用,啥都不能幹

1) 檢視目錄下的內容及該目錄下檔案的內容需要  r-x許可權
2) 在目錄下刪除  改名 建立檔案  需要 rwx 許可權   r 能看目錄下的內容,w 建立刪除改名等  x 進入該目錄

總結:

  1. 目錄預設的許可權是 755
  2. 檔案預設許可權是 644
  3. 指令碼的最高許可權 755

6. linux 系統預設許可權控制命令UMASK

作用:決定我們建立目錄和檔案的預設許可權

  1. 檔案的預設許可權
  • 由檔案的做高許可權減去umask的值 就是建立後的檔案預設許可權
  • 檔案的最高許可權:rw 666
  • 系統預設建立的檔案許可權是: 644
  1. 目錄的預設許可權
  • 由目錄的做高許可權減去umask的值 就是建立後的目錄預設許可權
  • 目錄的最高許可權 rwx 777
  • 系統預設目錄的檔案許可權是: 755

umask的預設值是:022

1. 檢視umask值
umask

2. 臨時修改
umask 044

7. 檔案的隱藏許可權位

作用:保護重要的系統檔案
i	啥都不能幹
a	只能追加寫入內容

檢視檔案隱藏許可權
lsattr 1.txt

設定隱藏許可權a  

定時任務

1. 定時任務分類

(1) 系統定時任務

/etc/crontab

系統定時任務編輯
vim /etc/crontab

系統定時任務書寫方式
*   *   *   *  *	root   command
分  時  日  月  周	 使用者
分鐘:0-59
小時:0-23
日:  1-31
月:  1-12
周:  0-6  or  1-7

root  那個使用者執行的  系統定時任務一般使用root

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed


* * * * * command_to_execute
- - - - -
| | | | |
| | | | +---- 一週中的星期幾 (0 - 7) (星期天為0或7)
| | | +------ 月份 (1 - 12)
| | +-------- 一個月中的哪一天 (1 - 31)
| +---------- 小時 (0 - 23)
+------------ 分鐘 (0 - 59)

(2) 使用者定時任務

定時任務的配置檔案最好進行備份

root 是配置檔案,哪個使用者登入,顯示的就是以哪個使用者名稱命名的檔案

/var/spool/cron/root

使用者定時任務編輯
crontab -e  實際是編輯了(如果是root使用者)  vim /var/spool/cron/root  檔案

crontab -e  帶有語法檢測的功能

檢視日誌
tailf  /var/log/cron

(3) 案例:

案例1:每5分鐘做一次時間同步

*/5 * * * *  root  ntpdate ntp1.aliyun.com

(4) 使用者定時任務和系統定時任務的區別

最好養成習慣定義定時任務時新增PATH變數

1. 使用者定時任務預設的PATH變數只識別
<PATH=/usr/bin:/bin>
# 在使用者的定時任務中增加PATH變數 

[root@sql ~]#echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt:/root/bin

[root@sql ~]#crontab -l
PATH=/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt:/root/bin

#1. sync time by lidao996 at 20230101
3 * * * * /sbin/ntpdate ntp.aliyun.com &>/dev/null



3 * * * * /sbin/ntpdate ntp.aliyun.com &>/dev/null &>/dev/null

磁碟管理

image-20241028233737924

1. 磁碟分類

1.1 磁碟介面
1. IDE  淘汰
2. SCSI 淘汰
3. STAT 常見(家用)
4. SAS  企業伺服器標配
1.2 機械磁碟轉速
家用:STAT  5400  7200 10000/分鐘
企業:STAT or  SAS 7200  10000      儲存或測試

2. 磁碟raid

又叫:磁碟整列 raid卡/陣列卡

為什麼要做raid

​ : 1. 獲取更大容量: 將多塊磁碟在邏輯上合成一個磁碟

​ :2. 獲得更高的效能

​ :3. 獲得更好的安全性

image-20241029000029911

image-20241029001425182

image-20241029002330962

3. 磁碟分割槽

fdisk 對小於2T的磁碟進行分割槽

parted 對大於2T的磁碟進行分割槽

  1. 小於2T的磁碟格式是MBR,使用fdisk進行分割槽
  • 第一步:插入一塊磁碟1T
  • 第二步:物理機不需要重啟
  • 檢視磁碟列表資訊
  • 第三步,磁碟分割槽
  1. MBR 只能有4個主分割槽(對小於2T的硬碟)
  2. GPT 無限制(主分割槽)
檢視磁碟列表資訊
fdisk -l

# 磁碟分割槽  fdisk  磁碟名稱
第三步:磁碟分割槽(類似給房間打隔斷)
[root@oldboy ~]#  fdisk /dev/sdb
  d   delete a partition         # 刪除一個分割槽
  l   list known partition types # 列出分割槽型別
  m   print this menu			  # 列印幫助
  n   add a new partition		  # 建立分割槽
  p   print the partition table  # 輸出分割槽表
  q   quit without saving changes # 退出不儲存
  w   write table to disk and exit# 儲存並退出
Command (m for help): n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p
Partition number (1-4, default 1): 1  直接回車即可
First sector (2048-20971519, default 2048): 2048   直接回車即可
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcf1f945d

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

刪除一個分割槽:
Command (m for help): d
Partition number (1-4, default 4): 4

分完區檢視:
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcf1f945d

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    20971519     7339008    5  Extended
/dev/sdb5         6295552    10489855     2097152   83  Linux
/dev/sdb6        10491904    20971519     5239808   83  Linux


第四步: 格式化分割槽(裝修風格、清理房間)
[root@oldboy ~]# mkfs.xfs /dev/sdb1
make  file system  製作檔案系統
預設使用xfs即可

第五步: 掛載使用
建立一個入口檔案,空的目錄
[root@oldboy ~]# mount /dev/sdb1 /mnt
[root@oldboy ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.5M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda3        18G  2.3G   16G  13% /
/dev/sr0        4.5G  4.5G     0 100% /data
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb1      1014M   33M  982M   4% /mnt

解除安裝磁碟:
[root@oldboy ~]# umount /mnt

第六步: 寫入開機自動掛載
[root@oldboy ~]# tail -1 /etc/fstab
/dev/sdb1				 /mnt 			xfs defaults 0 0

[root@oldboy ~]# mount -a 執行一次/etc/fstab中的配置

企業常用磁碟掛載方式:
1.插入新的磁碟900G
2.格式化分割槽
# 直接使用下面的命令相當與windows  硬碟格式化  會自動分割槽
[root@oldboy ~]# mkfs.xfs -f /dev/sdb
3.掛載使用
[root@oldboy ~]# mount /dev/sdb /mnt
[root@oldboy ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.5M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda3        18G  2.3G   16G  13% /
/dev/sr0        4.5G  4.5G     0 100% /data
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb         10G   33M   10G   1% /mnt



大於2T磁碟分割槽: parted  配置好後分割槽直接生效
第一步: 插入3個T磁碟
第二步: 分割槽
help    檢視幫助資訊
mklabel 建立新的磁碟標籤
mkpart  建立分割槽
print   檢視分割槽
quit    退出
rm      刪除分割槽

第一步:parted /dev/sdc
# 修改為gpt格式
第二步:
(parted) mklabel gpt
第三步:
(parted) mkpart   # 開始分割槽
第四步:
Partition name?  []? test1  # 主分割槽的名稱
第五步:
File system type?  [ext2]? xfs    # 檔案系統型別    
第六步:
Start? 0         	# 開始                                                       第七步:
End? 500G		    # 結束大小
第八步
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I  		# 輸入I 忽略     
第九步:
(parted) print      # 列印分割槽表     
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name   Flags
1      17.4kB  500GB  500GB               test1
(parted) mkpart
Partition name?  []? test2                                                
File system type?  [ext2]? xfs                                            
Start? 500G                                                               
End? 1000G                                                                
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name   Flags
1      17.4kB  500GB   500GB               test1
2      500GB   1000GB  500GB               test2

刪除分割槽:
(parted) rm
Partition number? 2 

支援非互動式分割槽:
(parted) mkpart test2 xfs 500G 1000G	
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name   Flags
1      17.4kB  500GB   500GB               test1
2      500GB   1000GB  500GB               test2

在shell命令列直接分割槽:
[root@oldboy ~]# parted /dev/sdc mkpart test3 xfs 1000G 2000G
檢視分割槽:
[root@oldboy ~]# parted /dev/sdc print
刪除分割槽:
[root@oldboy ~]# parted /dev/sdc rm 3

第三步: 格式化分割槽
[root@oldboy ~]# mkfs.xfs /dev/sdc1

第四步: 掛載使用
[root@oldboy ~]# mount /dev/sdc1 /mnt
You have new mail in /var/spool/mail/root
[root@oldboy ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.5M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda3        18G  2.3G   16G  13% /
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdc1       466G   33M  466G   1% /mnt

4. 磁碟相關案例

案例1.伺服器記憶體滿會殺死佔用記憶體最高的程序,oom記憶體溢位
導致記憶體溢位的原因:
1)訪問量大,增加記憶體
2)由於程序程式導致記憶體飆升java,查詢程式的原因
3)由於業務的網路波動原因
4)內部伺服器 記憶體不夠用的時候臨時使用swap解決
swap分割槽: 是磁碟的分割槽不是記憶體 速度非常慢
swap建議分配記憶體的1-1.5倍 如果記憶體大於8G 則swap給8G即可
建立swap方式: 
兩種
第一種安裝作業系統進行分割槽
第二種安裝完作業系統建立swap
1)建立一個塊檔案
[root@oldboy ~]# dd if=/dev/zero of=/tmp/1g bs=1M count=1000
2)格式化為swap型別
[root@oldboy ~]# mkswap /tmp/1g 
3)掛載swap分割槽
[root@oldboy ~]# swapon /tmp/1g 
swapon: /tmp/1g: insecure permissions 0644, 0600 suggested.
You have new mail in /var/spool/mail/root
[root@oldboy ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        120M        734M        9.5M        1.1G        1.7G
Swap:          3.0G          0B        3.0G
4)檢視swap分割槽的組成
[root@oldboy ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda2                              	partition	2097148	0	-2
/tmp/1g                                	file	1023996	0	-3

5)解除安裝swap檔案
[root@oldboy ~]# swapoff /tmp/1g

系統分割槽: 
/boot
/


案例2.磁碟無法寫入怎麼解決
1.inode號滿
  df -i
2.block滿
  df -h

如何查詢小檔案多的目錄
find / -type d -size +1M
如何查詢大檔案
find / -type f -size +1G
檢視整個目錄及下面所有內容的大小
du -sh 

案例3.刪除檔案不釋放磁碟空間
因為程序被呼叫的原因導致無法釋放
模擬程序被呼叫:
1.生成1個大檔案
dd if=/dev/zero of=/tmp/1g bs=1M count=1000
2.呼叫檔案
[root@oldboy ~]# tailf /tmp/1g 
3.刪除檔案發現磁碟空間沒有釋放
4.檢視檔案被哪個程序所有呼叫lsof
安裝命令
[root@oldboy ~]# yum -y  install lsof

[root@oldboy ~]# lsof |grep 1g
vim       2488         root    3r      REG                8,3 1048576000   17573898 /tmp/1g (deleted)
vim       2488         root    4u      REG                8,3       4096   17573899 /tmp/.1g.swp
You have new mail in /var/spool/mail/root
[root@oldboy ~]# kill -9 2488

****案例4.解決磁碟不夠用
第一塊磁碟不夠用: 由於日誌檔案佔用磁碟空間過大
/var/log/nginx/access.log  # 預設第一塊磁碟空間100G
上面路徑不變,解決磁碟不夠用!
第一步: 增加一塊磁碟 2T
第二步: 掛載磁碟
mkdir /data
mount /dev/sdb /data
第三步: 將access.log移動到新的磁碟(禁止使用者上傳或者寫入資料)
第四步: 做軟連結
ln -s /data/access.log /var/log/nginx/access.log




		

任務管理

1. 程序的概述

1.什麼是程序

​ 當我們執行一個程式,那麼我們將執行的程式叫程序

​ PS1:當程式執行為程序後,系統會為該程序分配記憶體,以及程序執行的身份和許可權

​ PS2:在程序執行的過程中,伺服器上會有各種狀態來表示當前程序的指標資訊

2.程式和程序的區別

​ 程式是資料和指令的集合,是一個靜態的概念,比如/bin/ls /bin/cp 等二進位制文 件,同時程式可以長期存在系統中

​ 程序是程式執行的過程,是一個動態的概念,程序是存在生命週期概念的,也就是說程序 隨著程式的終止而銷燬,不會永久存在系統中

3.程式的生命週期

一個物件從無到有、從有到無過程稱為生命週期

2. 監視程序狀態

程式在執行後,我們需要了解程序的執行狀態,檢視程序的狀態分為:靜態和動態兩種方式
1.使用ps命令檢視當前的程序狀態(靜態)
ps –auxf常用組合方式檢視程序、PID、佔用cpu百分比,佔用記憶體百分比,狀態、執行的命令等
	-a顯示所有終端機下執行的程序,除了階段作業領導者之外
	-u以使用者為主的格式來顯示程序狀況
	-x顯示所有程序,不以終端機來區分
    -f用ASCII字元顯示樹狀結構,表達程序間的相互關係

image-20241030005211284

image-20241030005240006

image-20241030005309901

image-20241030005344405

2.1 案例
1. 案例1
1)在終端1上執行vim
[root@lzy ~]# vim test
2)在終端2上執行ps命令檢視狀態
[root@lzy ~]# ps axu|grep test  #S表示睡眠模式 +表示前臺執行
root     14240  0.1  0.5 151868  5676 pts/1    S+   10:48   0:00 vim test
root     14271  0.0  0.0 112660   968 pts/2    R+   10:48   0:00 grep --color=auto test
3)在終端1上掛起vim命令按下: ctrl+z
4) 回到終端2再次執行ps命令檢視狀態
root@lzy ~]# ps axu|grep test   # T表示停止狀態	  
root     14240  0.0  0.5 151868  5676 pts/1    T    10:48   0:00 vim test
root     14279  0.0  0.0 112660   964 pts/2    R+   10:51   0:00 grep --color=auto test


2. 案例2
PS命令檢視不可中斷狀態程序
使用tar打包檔案時,可以透過中斷不斷檢視狀態,由S+,R+變為D+
[root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.6  0.1 124268  1888 pts/2    S+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.7  0.2 124380  2240 pts/2    R+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
 [root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.9  0.2 124916  2724 pts/2    D+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var

2.2 使用top命令檢視當前的程序狀態 動態

image-20241030005622116

image-20241030005635752

image-20241030005710493

3. 管理程序狀態

當程式執行為程序後,如果希望停止程序,怎麼辦呢?那麼此時我們可以使用linux的kill命令對程序傳送關閉訊號,當然除了kill 還有killall pkill

1) 使用kill –l列出當前系統所支援的訊號

image-20241030005809894

雖然Linux訊號很多,但是我們僅僅使用最常用的3個訊號

1) SIGHUP 重新載入配置檔案 1

2) SIGKILL 強制殺死程序 9

3) SIGTERM 平滑終止程序,預設kill使用該訊號(將記憶體中的資料會持續寫入到磁碟) 15

[root@lzy ~]# ps axu|grep nginx    
root     15688  0.0  0.1  87384  1132 ?        Ss   12:19   0:00 nginx: master process /usr/sbin/nginx
nginx    15689  0.0  0.3  89096  3176 ?        S    12:19   0:00 nginx: worker process
root     15691  0.0  0.0 112660   968 pts/3    R+   12:19   0:00 grep --color=auto nginx
# 傳送重新載入訊號 nginx配置檔案發生改變,可用此重新載入
[root@lzy ~]# kill -1 15688
[root@lzy ~]# ps axu|grep nginx
nginx    15692  0.0  0.3  89376  3648 ?        S    12:19   0:00 nginx: worker process
root     15722  0.0  0.0 112660   968 pts/3    R+   12:20   0:00 grep --color=auto nginx
傳送停止訊號 kill pid
root@lzy ~]# kill 15692
強制終止服務
kill -9 15692

  1. Linux系統中killall,pkill命令用於殺死指定名字的程序,我們可以使用kill命令殺死指定程序的PID的程序,killall和pkill直接殺程序而不需要查pid
[root@oldboy ~]# yum -y install psmisc  # killall需要安裝
[root@lzy ~]# killall nginx
[root@lzy ~]# pkill nginx
使用pkill踢出從遠端登入到本機的使用者,終止pts1上所有程序,使用者強制退出
[root@lzy ~]# pkill -9 -t pts/1

4. 程序後臺執行

方式一

nohuo 命令 & 將程式放在後臺執行

# 方式一  nohuo 命令  &
# 1. 程式在後臺執行
sleep 3000 &   # 在命令末尾新增  &

# 2. 程式在後臺執行並且 將輸出定義到空
ping -c1 -W1 www.baidu.com &>/dev/null

# 3. 為了避免關閉當前視窗,使用`&`後臺執行的程式也會終止,使用nohup
nohup sleep 3000 &

注:& 將程式放在後臺執行,當 當前視窗結束時,程序也會隨之結束

使用nohup配合&將程式放到後臺執行

  1. nohup執行的後臺程式,它如果有輸出的話,會將輸出結果儲存到當前目錄下的nohup.out檔案中,容易將磁碟搞滿
  2. nohup 配合 & 能將程式持續在後臺執行而不退出

方式二

screen 將程式放在後臺執行

1. 安裝
yum -y install screen
2. 建立一個新的會話
screen -S  會話名稱
3. `ctrl a  d`  離開當前會話,但該screen 會話仍在執行
4. 檢視screen會話  screen -ls  or  screen -list
5. 重新進入該screen會話 screen -r 會話名稱or程序號
6. 在screen 會話中執行 exit   or  ctrl  d   退出(終止)screen 會話

網路知識

1. OSI7層模型
2. 網路抓包
2.1 Linux轉包工具tcpdump
1. yum -y install tcpdump

	tcpdump是一個用於擷取網路分組,並輸出分組內容的工具。憑藉強大的功能和靈活的擷取策略,使其成為類UNIX系統下用於網路分析和問題排查的首選工具
	tcpdump 支援針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的資訊
	
#常用選項
[root@oldboyedu ~]#yum -y install tcpdump

-i       #監聽哪一個網路卡 
-n  	 #不把ip解析成主機名
-nn 	 #不把埠解析成應用層協議
-c  	 #指定抓包的數量
-S  	 #不把隨機序列和確認序列解析成絕對值
-w       #將流量儲存到檔案中,檔案中的資訊是無法直接檢視的
-r       #讀取檔案中的內容
-v 		 #輸出一個稍微詳細的資訊,例如在ip包中可以包括ttl和服務型別的資訊。 
-vv 	 #輸出詳細的報文資訊。
-nnvvi eth0

#例項

1、預設啟動

tcpdump -vv		#普通情況下,直接啟動tcpdump將監視第一個網路介面上所有流過的資料包。

2、過濾主機

tcpdump -i eth1 host 192.168.1.1		#抓取所有經過eth1,目的或源地址是192.168.1.1的網路資料

tcpdump -i eth1 src host 192.168.1.1	#指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1	#指定目的地址,192.168.1.1

3、過濾埠

tcpdump -i eth1 port 80			#抓取所有經過eth1,目的或源埠是80的網路資料

tcpdump -i eth1 src port 80		#指定源埠

tcpdump -i eth1 dst port 80		#指定目的埠

4、協議過濾

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某埠的資料包

tcpdump -i eth0 tcp port 21 -nn

5、常用表示式

非 : ! or "not" (去掉雙引號) 

且 : && or "and" 

或 : || or "or"

#抓取所有經過eth1,目的地址是192.168.1.254或192.168.1.200埠是80的TCP數

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

#抓取所有經過eth1,目標MAC地址是00:01:02:03:04:05的ICMP資料

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

#抓取所有經過eth1,目的網路是192.168,但目的主機不是192.168.1.200的TCP資料

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

相關文章