Linux操作系統應用
- 一、用戶與用戶組管理
- 1.1 管理用戶
- 1.1.1 與用戶賬號相關的文件
- 1.1.2 用戶管理命令
- 1.1.3 任務實施
- 1.2 管理用戶組
- 1.2.1 用戶組
- 1.2.2 用戶組管理命令
- 1.3 查看用戶和用戶組狀態
- 1.3.1 用戶查看命令 id、who、whoami
- 1.3.2 用戶身份切換命令 su、sudo
- 二、文件管理
- 2.1 管理文件
- 2.1.1 目錄操作命令
- mkdir(-p:多級目錄)
- rmdir(-p:遞歸刪除空目錄)
- cd、pwd、ls
- 2.1.2 文件操作命令
- touch
- fiel:查看文件類型
- cp(-r:遞歸復制、-f:強制覆蓋)、mv(移動)、rm
- find、which:查找命令的絕對路徑
- ln:為文件創建鏈接(默認軟鏈接-s:硬鏈接)不能對目錄創建
- 2.1.3 文件內容操作命令
- cat
- more/less
- head/tail
- wc
- grep
- 2.2 壓縮文件
- gzip(-d:解壓縮,-r:遞歸,-v:顯示過程)
- tar(-c:創.tar,-x:解.tar,-f:目標文件名,-v:顯示過程,-z:gzip,-j:bzip2)
- 2.3 設置文件權限屬性
- chmod 更改文件訪問權限(u、g、o — r、w、x)
- chown 更改文件所屬者和所屬組
- chgrp 更改文件所屬組
- 三、磁盤與文件系統管理
- 3.1 創建磁盤分區
- 1. 分區管理(fdisk)
- 2. 格式化(mkfs)
- 3. 掛載(mount)
- df:查看文件系統掛載狀態和磁盤使用情況(-h:易讀方式查看)
- 3.2 設置磁盤配額 quota
- 3.3 管理邏輯卷
- 四、軟件包與進程管理
- 4.1 管理軟件包
- rpm 安裝
- yum 安裝(先搭建倉庫)
- 源碼包安裝
- 4.2 管理進程(進程號:PID)
- 五、服務管理與任務制定
- 5.1 管理 Linux 服務
- 5.2 管理計劃任務
- 一次性計劃任務 at
- 周期性計劃任務 crontab
- 六、shell簡易編程
- 6.1 重定向
- 6.2 shell 命令與 vim 編輯器
- 七、網絡基本配置
- 7.1 網絡配置
- 顯示網卡的配置信息 ifconfig
- 配置網卡 nmcli
- 修改 IP nmcli connection modify 網卡(method、IP、gateway、dns、connection.autoconnect)
- 修改網卡
- 7.2 網絡調試
- 測試網絡連通性 ping
- 顯示網絡相關信息 netstat
- 顯示數據包到達主機所經過的路由信息 tracepath
- 顯示域名和 IP 地址的對應關系 nslookup
- 八、遠程連接 OenpSSH
- 8.1 配置與啟動OpenSSH
- 8.2 遠程控制服務
- 遠程連接主機 ssh
- 遠程傳輸命令 scp
- 九、網絡服務器
- 9.1 web服務器
- 9.2 Apache
- 9.3 Nginx
- 十、
- 十一、NFS
一、用戶與用戶組管理
1.1 管理用戶
用戶類型 | UID | 描述 |
---|---|---|
超級用戶 | 0 | root用戶、系統管理員或根用戶 |
系統用戶 | 1~999 | 方便系統管理 |
普通用戶 | 1000~60 000 | 又超級用戶創建,用于用戶的日常工作 |
1.1.1 與用戶賬號相關的文件
/etc/passwd:系統識別用戶的文件,保存用戶賬號的基本信息
username:password:UID:GID:comment:home directory:shell
字段 | 含義 |
---|---|
username | 用戶名,必須唯一 |
password | 用戶密碼,x填充,真正密碼以MD5加密方式保存在shadow文件中 |
UID | 用戶ID,如果多個用戶名對應一個UID,系統內部回將它們視為同一個用戶 |
GID | 組ID,區分不同組 |
comment | 備注信息 |
home directory | 用戶主目錄 |
shell | 命令解釋器,默認bash |
/etc/shadow
1.1.2 用戶管理命令
-
添加用戶賬號 useradd
- -d:指定用戶主目錄,默認為 /home/用戶名
- -g:指定用戶所屬的基本組或 GID,-G:指定用戶所屬的附加組,各組之間逗號相隔,-u:指定用戶的 UID,且必須唯一
- -e:指定用戶賬號的失效時間
- -s:指定用戶的登錄 shell,默認為 /bin/bash
-
管理用戶密碼 passwd
- -d:刪除用戶密碼,將其設置為空,使之無需密碼即可登錄
- -l:鎖定用戶賬號,可暫時禁止該用戶登錄系統,-u:解鎖用戶賬號
- -S:查詢用戶賬號的狀態“(是否鎖定)
-
修改用戶賬號 usermod
- -l:更改用戶名,該賬號的主目錄、UID 及 GID 保持不變,
- -L:鎖定用戶賬號,-U:解鎖
-
刪除用戶賬號 userdel
- -userdel -r 用戶名
UUID:
-
創建一個新的 UUID 值 uuidgen
-
識別磁盤設備和其他硬件設備,并顯示它們的 UUID 和元數據 blkid
- 修改成新的:
- blkid /dev/sda -o set_uuid=”8CCB6C99-6C68-475C-9056-77460848426F”
- tune2fs /dev/sda -U"8CCB6C99-6C68-475C-9056-77460848426F"
- 修改成新的:
1.1.3 任務實施
任務說明:
小李為研發部門和運維部門的4位成員分別添加個人賬號,并設置初始密碼均為kd*123
用戶名:Lina,UID:1005
用戶名:xuxi,不允許登錄
用戶名:suxi
用戶名:junji
[root@host ~]# useradd -u 1005 Lina #-u:指定用戶的UID,且必須唯一
[root@host ~]# passwd Lina #設置初始密碼
Changing password for user Lina.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.[root@host ~]# useradd -s /sbin/nologin xuxi #不允許用戶登錄[root@host ~]# useradd suxi
[root@host ~]# passwd suxi
Changing password for user suxi.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.[root@host ~]# useradd junji
[root@host ~]# passwd junji
Changing password for user junji.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.[root@host ~]# cat /etc/passwd
Lina:x:1005:1005::/home/Lina:/bin/bash
xuxi:x:1006:1006::/home/xuxi:/sbin/nologin
suxi:x:1007:1007::/home/suxi:/bin/bash
junji:x:1008:1008::/home/junji:/bin/bash[root@host ~]# cat /etc/shadow
Lina:$6$mknKGRqdHSh.DGdR$svPbl0F0ToHsIu3z/uhAay7CQ1xSazSgWOFYqkXGmDGbpK9jknIavkh0qI0hidcsAk8QGdXq7gA6585zZA9RL.:20146:0:99999:7:::
xuxi:!!:20146:0:99999:7:::
suxi:$6$kyHAU/4Cj70JnMVA$ShPGjE7OZYNUa.jDzwjPvQ/M1TC8AlGLXoFGkySqk.QTLu/iPh1Ewd1eclFXHsqCxwPnxjVZ666ozqGVCwF8O0:20146:0:99999:7:::
junji:$6$7TYi0jPnE5queNh/$UvfTDQtH28ljuOf5xyXgkK55oJlv/688zFECmGUirdosGtkJ8zNASEKGu3mKw0otw/LO3f/PVuLy7QU1utXeV1:20146:0:99999:7:::
1.2 管理用戶組
1.2.1 用戶組
/etc/group:保存著用戶名、用戶組名等基本信息
groupname:password:GID:user_list
字段 | 含義 |
---|---|
groupname | 用戶組名 |
password | 用戶組密碼,x填充,真正密碼以MD5加密方式保存在gshadow文件中 |
GID | 組 ID |
user_list | 用戶組成員列表 |
/etc/gshadow:
groupname:encypted password:admin:user_list
字段 | 含義 |
---|---|
groupname | 用戶組名 |
encypted password | 加密后的用戶組密碼 |
admin | 用戶組管理員 |
user_list | 用戶組成員列表 |
1.2.2 用戶組管理命令
- 添加用戶組賬號 groupadd
- groupadd -g GID 用戶組名,如果不指定 GID ,則由系統自動分配
- 管理用戶組密碼 gpasswd [選項] [用戶名] 用戶組名
- -a:為用戶組添加組成員
- -d:從用戶組移除組成員
- 修改用戶組屬性 groupmod
- -n:更改用戶組名,GID 保持不變,
- -g 新 GID:修改 GID
- 刪除用戶組賬號 groupdel
- groupdel 用戶組名
1.3 查看用戶和用戶組狀態
1.3.1 用戶查看命令 id、who、whoami
UUID:
-
創建一個新的 UUID 值 uuidgen
-
識別磁盤設備和其他硬件設備,并顯示它們的 UUID 和元數據 blkid
- 修改成新的:
- blkid /dev/sda -o set_uuid=”8CCB6C99-6C68-475C-9056-77460848426F”
- tune2fs /dev/sda -U"8CCB6C99-6C68-475C-9056-77460848426F"
- 修改成新的:
1.3.2 用戶身份切換命令 su、sudo
su 命令格式中,”-“表示完全切換到新的用戶,即環境變量信息也變為新用戶的相關信息
普通用戶可使用 sudo 命令臨時或的root用戶的權限執行操作(前提:root 用戶必須使用 visudo 命令打開并編輯 sudoers 配置文件/etc/sudoers)
- sudo常用選項:
- -b:在后臺執行指定命令
- -u 用戶名/UID:以指定的用戶身份執行命令
- -l:顯示出執行 sudo 命令的使用者的權限
二、文件管理
2.1 管理文件
2.1.1 目錄操作命令
mkdir(-p:多級目錄)
多個同級目錄:
mkidr {a,b,c} 或 mkdir a b c
rmdir(-p:遞歸刪除空目錄)
執行刪除命令時,需要對父目錄有寫權限
cd、pwd、ls
2.1.2 文件操作命令
- -:普通文件
- d:目錄文件
- l:鏈接文件
- c、b:設備文件
- p:管道文件
touch
fiel:查看文件類型
cp(-r:遞歸復制、-f:強制覆蓋)、mv(移動)、rm
# 把本主機的/etc/yum.repos.d/dnf.repo,復制到主機192.168.72.136中的/etc/yum.repos.d/下
scp /etc/yum.repos.d/dnf.repo root@192.168.72.136:/etc/yum.repos.d/
find、which:查找命令的絕對路徑
ln:為文件創建鏈接(默認軟鏈接-s:硬鏈接)不能對目錄創建
默認軟鏈接-符號鏈接->快捷方式,-s:硬鏈接->與原始文件互相影響,不能對目錄創建
2.1.3 文件內容操作命令
cat
more/less
head/tail
wc
grep
2.2 壓縮文件
gzip(-d:解壓縮,-r:遞歸,-v:顯示過程)
tar(-c:創.tar,-x:解.tar,-f:目標文件名,-v:顯示過程,-z:gzip,-j:bzip2)
2.3 設置文件權限屬性
chmod 更改文件訪問權限(u、g、o — r、w、x)
r | w | x |
---|---|---|
4 | 2 | 0 |
chown 更改文件所屬者和所屬組
chgrp 更改文件所屬組
三、磁盤與文件系統管理
3.1 創建磁盤分區
1. 分區管理(fdisk)
2. 格式化(mkfs)
磁盤分區后不能直接使用,須創建分區的文件系統(格式化 mkfs)才能使用
mkfs | mkfs.xfs | mkfs.ext4 [選項] 分區的設備名
eg.
mkfs.ext4 /dev/sda3 /mkfs -t ext4 /dev/sda3
[root@bogon ~]# mkfs -t xfs /dev/sda2
...
3. 掛載(mount)
磁盤創建文件系統后,須將該文件系統掛載(mount)到某個目錄(掛載點,必須是空目錄)才能使用
命令行模式:手動掛載
系統啟動時自動掛載(/etc/fstab) 設備文件 掛載點 文件系統類型 權限選項 是否備份 是否自檢
#自動掛載配置:設備文件 掛載點 文件系統類型 權限選項 是否備份 是否自檢
df:查看文件系統掛載狀態和磁盤使用情況(-h:易讀方式查看)
3.2 設置磁盤配額 quota
磁盤配額信息:wfs_quota (-x、-c)
指定用戶或用戶組磁盤配額信息:edquota
開啟或關閉:quotaon、quotaoff
查看指定用戶或用戶組的磁盤配額信:quota
查看文件系統的磁盤配額信:requota
3.3 管理邏輯卷
創建邏輯卷流程:
- 創建物理卷
- 創建卷組
- 創建邏輯卷
- 創建文件系統
- 掛載文件系統
擴展邏輯卷流程:
- 卸載文件系統
- 擴展邏輯卷容量
- 擴展文件系統
縮小邏輯卷流程:
- 卸載邏輯卷
- 檢查文件系統的完整性
- 縮小文件系統
- 縮小邏輯卷
- 重新掛載文件系統
四、軟件包與進程管理
4.1 管理軟件包
rpm 安裝
- 安裝 rpm [選項] 軟件名
- -U:升級(若沒有該安裝包則安裝)
- -F:升級(若沒有該安裝包則取消安裝)
- 卸載 rpm -e 軟件名(-evh:顯示卸載過程))
- 查詢 rpm [選項] 軟件名
- -qa:查詢已安裝
- -qf:查詢文件或目錄屬于哪個RPM軟件包的格式
- -qp:查詢未安裝的軟件包
- -ql:查詢文件安裝路徑
yum 安裝(先搭建倉庫)
[BaseOS] --- YUM軟件倉庫名稱,具有唯一性
name= YUM軟件倉庫的描述,用于說明軟件倉庫的用處
baseurl= YUM軟件倉庫的位址 FTP/HTTP地址/本地地址
enabled= 是否啟動該YUM軟件倉庫,1:啟動,0:禁用
gpgcheck= 是否校驗RPM文件內的數字簽名
[AppStream]
name= YUM軟件倉庫的描述,用于說明軟件倉庫的用處
baseurl= YUM軟件倉庫的位址 FTP/HTTP地址/本地地址
enabled= 是否啟動該YUM軟件倉庫,1:啟動,0:禁用
gpgcheck= 是否校驗RPM文件內的數字簽名
源碼包安裝
- 下載及解壓縮源碼包文件
- 配置
- 編譯
- 安裝
4.2 管理進程(進程號:PID)
優先級:-20~19(取值越小,優先級越高)
五、服務管理與任務制定
5.1 管理 Linux 服務
systemctl is-enable #查看服務是否為開機自啟動
5.2 管理計劃任務
一次性計劃任務 at
at -l = atq # 顯示待執行的任務
at -d = atrm # 刪除任務
ctrl + d # 提交任務
周期性計劃任務 crontab
在配置時,所有命令使用 絕對路徑
- -e:創建并編輯
- -l:查看當前任務
- -r:刪除某條任務
- -u:指定用戶名稱(root用戶下)
配置格式:
#分鐘字段必須有數值,日期與星期不可同時使用
分鐘 小時 日期 月份 星期 命令
0~59 0~23 1~31 1~12 0~7(0、7都為周天)0 17 * * 1-5 #周一到周五每天17:00
30 8 * * 1,3,5 #每周一、三、五的8:30
0 8-18/2 * * * #8:00到18:00之間每隔2小時
0 * */3 * * #每隔3天
- 周期性計劃任務配置中的符號:
- *:該范圍的任意時間
- ,:間隔的多個不連續時間點
- -:一段連續的時間范圍
- /:執行任務的間隔時間
六、shell簡易編程
6.1 重定向
符號 | 命令格式 | 作用 |
---|---|---|
< | 命令 < 文件 | 將文件作為命令標準輸入 |
< < | 命令 < < 分界符 | 從標準輸入中讀入,知道遇到分界符才停止 |
> | 命令 > 文件 | 將標準輸出重定向到一個文件中(清空原有文件的數據) |
>> | 命令 >> 文件 | 將標準輸出重定向到一個文件中(追加到原有內容的后面) |
:2> | 命令 2> 文件 | 將錯誤輸出重定向到一個文件中(清空原有文件的數據) |
2>> | 命令 2>>文件 | 將錯誤輸出重定向到一個文件中(追加到原有內容的后面) |
需求:在 /etc/yum.repos.d/ 中通過重定向配置一個本地倉庫,倉庫名為 ymrepo.repo,然后將倉庫中的內容反序重定向到 /root/myfile 文件中。
# 利用重定向將內容寫到文件中
[root@host ~]# cat > /etc/yum.repos.d/ymrepo.repo << EFO
> [OS]
> name=BaseOS
> baseurl=/mnt/BaseOS
> gpgcheck=0
> enable=1
> [AppStream]
> name=AppStream
> baseurl=/mnt/AppStream
> gpgcheck=0
> enable=1
> EFO
[root@host ~]# cat /etc/yum.repos.d/ymrepo.repo
[OS]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
enable=1
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
enable=1
[root@host ~]# tac /etc/yum.repos.d/ymrepo.repo >> /root/myfile
[root@host ~]# cat /root/myfile
enable=1
gpgcheck=0
baseurl=/mnt/AppStream
name=AppStream
[AppStream]
enable=1
gpgcheck=0
baseurl=/mnt/BaseOS
name=BaseOS
[OS]
[root@server ~]# cat /etc/yum.repos.d/dnf.repo | sort -r
name=BaseOS
name=AppStream
gpgcheck=0
gpgcheck=0
enabled=1
baseurl=/mnt/BaseOS
baseurl=/mnt/AppStream
[BaseOS]
[AppStream]
[root@server ~]# cat /etc/yum.repos.d/dnf.repo -n | sort -r9 gpgcheck=08 baseurl=/mnt/AppStream7 name=AppStream6 [AppStream]5 enabled=14 gpgcheck=03 baseurl=/mnt/BaseOS2 name=BaseOS1 [BaseOS]
[root@server ~]# cat /etc/yum.repos.d/dnf.repo -n | sort -rn9 gpgcheck=08 baseurl=/mnt/AppStream7 name=AppStream6 [AppStream]5 enabled=14 gpgcheck=03 baseurl=/mnt/BaseOS2 name=BaseOS1 [BaseOS]
管道 pip “ | ” :連接多個命令
echo:在終端輸出 字符串/變量 提取后的值
6.2 shell 命令與 vim 編輯器
vim編輯:
七、網絡基本配置
7.1 網絡配置
socket相關知識: 什么是Socket?
顯示網卡的配置信息 ifconfig
配置網卡 nmcli
修改 IP nmcli connection modify 網卡(method、IP、gateway、dns、connection.autoconnect)
修改 IP(ipv4.addresses ip/掩碼,ipv4.dns,ipv4.gateway,authentic )
TCP/UDP:四層協議(傳輸層),都在 53 端口
TCP協議 提供可靠的連接服務,連接是通過 三次握手 進行初始化的。TCP是全雙工模式,所以需要 四次揮手 關閉連接. TCP使用三次握手和四次揮手來建立和終止連接
(強連接-安全),以確保可靠的連接建立和終止,在網絡通信中保護數據的完整性和可靠性.
UDP協議 僅保證發送信息,不保證接受(優點:快,缺點:容易丟失數據,安全系數不高)
nmcli connection modify 網卡(ensxxx) ipv4.method manual ipv4.addresses ip/掩碼 ipv4.dns,ipv4.gateway,connection.autoconnect yes
[root@client ~]# nmcli connection modify ens33 ipv4.addresses 192.168.88.7/24 ipv4.dns 192.168.88.2 ipv4.gateway 192.168.88.2 ipv4.method manual connection.autoconnect yes
修改網卡
nmcli c modify ens160 ipv4.dns 192.168.88.136
或者
vi /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.88.144
- 查看 dns
nmcli d show | grep DNS
7.2 網絡調試
測試網絡連通性 ping
執行 ping 命令時,系統會使用 ICMP(Internet控制報文協議)向遠程主機發出要求回應的信息
顯示網絡相關信息 netstat
顯示數據包到達主機所經過的路由信息 tracepath
顯示域名和 IP 地址的對應關系 nslookup
八、遠程連接 OenpSSH
8.1 配置與啟動OpenSSH
OpenSSH 基于 SSH(secure shell)協議開發的免費開源軟件,可在網絡上由一臺計算機遠程連接另外一臺計算機
SSH 是建立在 應用層 基礎上的安全協議,sshd 是基于 SSH 協議 開發的 遠程管理服務,提供兩種安全驗證方法:
- 基于密碼的驗證
- 基于密鑰的驗證
配置文件:/etc/ssh/sshd_config
[root@host ~]# cat /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.# To modify the system-wide sshd configuration, create a *.conf file under
# /etc/ssh/sshd_config.d/ which will be automatically included below
Include /etc/ssh/sshd_config.d/*.conf# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22 sshd服務端口,默認為22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
....
8.2 遠程控制服務
遠程連接主機 ssh
首次連接主機時,需要輸入yes(Are you sure you want to continue connecting)
ssh [選項] [遠程用戶名@]遠程IP地址 或 域名
- -l:指定遠程登錄用戶名
- -v:追蹤調試建立的 SSH 連接情況
- -p:指定遠程主機的 sshd 端口
- -b:指定源 IP 地址
- -C:所有通過 SSH 發送或接收的數據將會被壓縮,并且都是加密的
- -F:指定配置文件
遠程傳輸命令 scp
使用 scp 命令將文件從本地復制到遠程主機
:
scp [選項] 本地文件 [遠程主機名@]遠程IP地址 或 域名:遠程目錄
使用 scp 命令將遠程主機的文件下載到本地
:
scp [選項] [遠程主機名@]遠程IP地址 或 域名:遠程文件 本地文件
- 選項:
- -r:遞歸復制整個目錄
- -v:顯示詳細的連接進度
- -p:指定遠程主機的 sshd 端口
# 把本主機的/etc/yum.repos.d/dnf.repo,復制到主機192.168.72.136中的/etc/yum.repos.d/下
scp /etc/yum.repos.d/dnf.repo root@192.168.72.136:/etc/yum.repos.d/
[root@server ~]# scp /etc/yum.repos.d/dnf.repo root@192.168.88.142:/etc/yum.repos.d/
The authenticity of host '192.168.88.142 (192.168.88.142)' can't be established.
ED25519 key fingerprint is SHA256:I3/lsrnTEnXOE3LFvTLRUXAJ+AhSVrIEWtqTnleRz9w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.88.142' (ED25519) to the list of known hosts.
root@192.168.88.142's password:
dnf.repo
[root@client ~]# ll /etc/yum.repos.d/
total 4
-rw-r--r--. 1 root root 358 Mar 14 13:32 redhat.repo
[root@client ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r--. 1 root root 113 Mar 14 14:10 dnf.repo
-rw-r--r--. 1 root root 358 Mar 14 13:32 redhat.repo
九、網絡服務器
9.1 web服務器
9.2 Apache
9.3 Nginx
Nginx 是高性能的 Web 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。
在高連接并發的情況下,Nginx是Apache服務器不錯的替代品
十、
十一、NFS
在Linux系統中,有一些文件共享協議用于跨網絡共享存儲和文件,NFS(Network File System,網絡文件系統),它允許網絡中的計算機(不同的計算機、不同的操作系統)之間通過 TCP/IP 網絡共享資源
在 NFS 的應用中,本地 NFS 的客戶端應用 可以 透明地讀寫 位于 遠端 NFS 服務器上的文件 ,就像訪問本地文件一樣
- 創建兩臺主機,配置倉庫,安裝基本軟件,安裝 NFS 軟件
- 啟動服務(查看服務狀態),放行防火墻,關閉SELinux,設置開機自啟動
- 配置 NFS ,服務端創建一個需要共享的文件,這個文件的內容會被共享到目的客戶端
- 服務端:編輯/etc/exports文件,配置文件和目的網段(IP、主機),設置權限
- 重啟服務
- 然后暴露共享服務,服務器查看nfs共享狀態
- 客戶端創建掛載目錄,將創建的目錄掛載到服務端的共享目錄
練習1
要設置NFS共享,需要至少兩臺 Linux/Unix 機器。下面使用兩臺服務器來演示 NFS 安裝、配置及使用。
角色 | IP | 主機名 | 系統 |
---|---|---|---|
服務器 | 192.168.88.136 | nfs-server | RHEL 9 |
客戶端 | 192.168.88.142 | nfs-client | RHEL 9 |
1.創建兩臺主機,配置倉庫,安裝基本軟件,安裝 NFS 軟件
- client:
#配置倉庫
[root@client yum.repos.d]# vi dnf.repo
[root@client yum.repos.d]# cat dnf.repo
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
[root@client yum.repos.d]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@client yum.repos.d]# ls /mnt
AppStream EULA images RPM-GPG-KEY-redhat-beta
BaseOS extra_files.json isolinux RPM-GPG-KEY-redhat-release
EFI GPL media.repo# 把本主機(客戶端)的/etc/yum.repos.d/dnf.repo,復制到主機(服務端)192.168.72.136中的/etc/yum.repos.d/下
[root@client yum.repos.d]# scp /etc/yum.repos.d/dnf.repo root@192.168.88.136:/etc/yum.repos.d/
The authenticity of host '192.168.88.136 (192.168.88.136)' can't be established.
ED25519 key fingerprint is SHA256:I3/lsrnTEnXOE3LFvTLRUXAJ+AhSVrIEWtqTnleRz9w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.88.136' (ED25519) to the list of known hosts.
root@192.168.88.136's password:
dnf.repo 100% 114 215.5KB/s 00:00
- server:
[root@server yum.repos.d]# ls
dnf.repo EFo EFO EFP redhat.repo
[root@server yum.repos.d]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
- 安裝基本軟件(需要先配置倉庫和掛載后才能成功執行此命令):
# 安裝基本軟件,bash-completion 用于tab補全
[root@client yum.repos.d]# dnf install net-tools wget curl bash-completion vim -y
[root@client yum.repos.d]# dnf install nfs-utils -y
#設置主機名命令:
hostnamectl hostname nfs-server#設置IP命令:
nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.88.136/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.88.2 connection.autoconnect yes
# IP:固定前綴nmcli connection modify 網卡
1.ipv4.method:manual
2.ipv4.addresses(注意寫子網掩碼)
3.ipv4.dns
4.ipv4.gateway
5.connection.autoconnect:yes
nmcli c up ens160 #啟動
需要重新連接才能改變IP#開機自啟動
2. 放行防火墻,關閉SELinux,啟動服務(查看服務狀態)
- 同時執行兩個會話的命令
# 啟動服務
systemctl enable --now nfs-server
或者
systemctl start nfs-server# 放行防火墻
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
firewall-cmd --list-all(驗證是否放行成功)
# 永久關閉
[root@server ~]# sed -i "s/^SELINUX=enforcing$/SELINUX=permissive/g" /etc/selinux/config# 關閉SELinux
setenforce 0
- 查看網絡相關命令:
[root@server ~]# netstat -lntup | grep 2049tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
[root@server ~]# netstat -lntup | grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp6 0 0 :::111 :::* 1/systemd
[root@server ~]# ss -lntup | grep 111 #(ss=netstat)
udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=13602,fd=5),("systemd",pid=1,fd=88))
udp UNCONN 0 0 [::]:111 [::]:* users:(("rpcbind",pid=13602,fd=7),("systemd",pid=1,fd=90))
tcp LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=13602,fd=4),("systemd",pid=1,fd=87))
tcp LISTEN 0 4096 [::]:111 [::]:* users:(("rpcbind",pid=13602,fd=6),("systemd",pid=1,fd=89))
[root@server ~]# ps -ef | grep nfs
root 13607 1 0 13:01 ? 00:00:00 /usr/sbin/nfsdcld
root 13621 2 0 13:01 ? 00:00:00 [nfsd]
root 13622 2 0 13:01 ? 00:00:00 [nfsd]
root 13623 2 0 13:01 ? 00:00:00 [nfsd]
root 13624 2 0 13:01 ? 00:00:00 [nfsd]
root 13625 2 0 13:01 ? 00:00:00 [nfsd]
root 13626 2 0 13:01 ? 00:00:00 [nfsd]
root 13627 2 0 13:01 ? 00:00:00 [nfsd]
root 13628 2 0 13:01 ? 00:00:00 [nfsd]
- 查看服務狀態:
[root@client ~]# systemctl status nfs-server
● nfs-server.service - NFS server and >Loaded: loaded (/usr/lib/systemd/>Active: active (exited) since Fri>Docs: man:rpc.nfsd(8)man:exportfs(8)
3. 配置 NFS ,服務端創建一個需要共享的文件,這個文件的內容會被共享到目的客戶端
服務端:創建一個用于存儲文件目錄,編輯/etc/exports文件,配置文件和目的網段(IP、主機),設置權限
# 創建一個用于存儲文件目錄
[root@server ~]# mkdir /nfs/server -p# 配置文件和目的網段(IP、主機),設置權限,將此目錄共享給客戶端
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
# we will share file | other PC's ip(notice limits of authority:read and write)
/nfs/server 192.168.88.142(rw) (客戶端IP)
服務端 server IP:192.168.88.136
客戶端 client IP:192.168.88.142
4. 重啟服務
[root@server ~]# systemctl restart nfs-server
5. 然后暴露共享服務,服務器查看nfs共享狀態
[root@server ~]# showmount -e 192.168.88.136(本機,服務端IP)
Export list for 192.168.88.136:
/nfs/server 192.168.88.142 //此時服務端創建文件
[root@server ~]# touch /nfs/file/one.txt
touch: cannot touch '/nfs/file/one.txt': No such file or directory
[root@server ~]# touch /nfs/server/one.txt
[root@server ~]# vim /nfs/server/one.txt
[root@server ~]# cat /nfs/server/one.txt
a file of share from server to client:
content:this is nfs service//客戶端還沒能同步到文件,需要在客戶端創建目錄,再掛載到服務端的共享目錄
[root@client ~]# ll /nfs
ls: cannot access '/nfs': No such file or directory
服務端 server IP:192.168.88.136
客戶端 client IP:192.168.88.142
6. 客戶端創建掛載目錄,將創建的目錄掛載到服務端的共享目錄
# 1. 創建掛載目錄
[root@client ~]# mkdir -p /nfs/client# 2. 將創建的目錄掛載到服務端的共享目錄
[root@client ~]# mount -t nfs 192.168.88.136:/nfs/server /nfs/client# 3. 查看是否掛載成功
[root@client ~]# df /nfs/client
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.88.136:/nfs/server 46587904 1756160 44831744 4% /nfs/client# 掛載成功后即可查看到 服務端想要共享的文件
[root@client nfs]# cd /nfs/client/
[root@client client]# ll
total 4
-rw-r--r--. 1 root root 69 Mar 14 14:34 one.txt
# 有讀的權限
[root@client client]# cat one.txt
a file of share from server to client:
content:this is nfs service
服務端 server IP:192.168.88.136
客戶端 client IP:192.168.88.142
7. 功能測試
測試服務端讀寫
- 服務端已創建 one.txt 文件
[root@server ~]# cat /nfs/server/one.txt
a file of share from server to client:
content:this is nfs service
[root@server ~]# echo add second text >> /nfs/server/one.txt
[root@server ~]# cat /nfs/server/one.txt
a file of share from server to client:
content:this is nfs service
add second text
服務端對于要共享的文件,可讀可寫
測試客戶端讀寫
- 客戶端查看此文件
[root@client ~]# ls /nfs/client/
one.txt
[root@client nfs]# cd /nfs/client
[root@client client]# cat one.txt
a file of share from server to client:
content:this is nfs service
add second text#沒有寫的權限
[root@client client]# vim one.txt
[root@client client]# echo add third text > one.txt
-bash: one.txt: Permission denied
讀文件能執行成功,不能寫
- 服務端查看權限
#服務端查看權限
[root@server ~]# ll -d /nfs
drwxr-xr-x. 3 root root 20 Mar 14 14:27 /nfs
root(rwx) root的主(r-x) 其他用戶(r-x)
u g o
[root@server server]# chmod o+rw /nfs
[root@server server]# ll -d /nfs/
drwxr-xrwx. 3 root root 20 Mar 14 14:27 /nfs/[root@server server]# vim /etc/exports
[root@server server]# cat /etc/exports
# we will share file | other PC's ip(notice limits of authority:read and write)
/nfs/server 192.168.88.142(rw,no_root_squash)#客戶端可讀寫
[root@client ~]# ll -d /nfs/
drwxr-x--x. 3 root root 20 Mar 14 14:35 /nfs/
[root@client client]# systemctl restart nfs-server
[root@client client]# echo a new file > two.txt
[root@client client]# ls
one.txt two.txt# 服務端已同步客戶端的讀寫操作
[root@server server]# ls
one.txt two.txt
-
用戶對目錄的權限受兩方面約束:NFS認證權限、Posix權限;
-
NFS權限:
- NFS服務器器中exports中配置額讀寫、只讀權限
-
Posix權限:
- 發現exports目錄權限中,參數 no_root_squash 的其作用是:NFS客戶端使用共享目錄的用戶,如果是root 的話,所有的操作均在服務器端映射為root用戶,擁有共享目錄的root權限!
-
默認情況使用的是相反參數root_squash:在登入 NFS 主機 export 目錄的使用者如果當root時,那么這個使用者的權限將被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody 那個身份。
因為客戶端是使用root登錄的,自然權限被壓縮為nobody了,難怪無法寫入。
將配置信息改為:
/nfs/server 192.168.88.142(rw,no_root_squash)
據說有點不安全,但問題是解決了。
練習2
配置 NFS服務器 作為 ngxin 服務的存儲目錄,并在目錄中創建 index.html 文件,當訪問 http://你的IP地址時,可以成功顯示 index.html 文件的內容。
角色 | 軟件 | IP | 主機名 | 系統 |
---|---|---|---|---|
NFS服務器 | nfs-utils | 192.168.88.7 | server | RHEL 9 |
WEB服務 | nfs-utils, nginx | 192.168.88.8 | web | openEuler |
1. 環境初始化
配置倉庫,掛載,對應主機安裝基本軟件,安裝 NFS 軟件及nginx軟件等
配置倉庫、掛載
基本軟件安裝
bash-completion 用于tab補全
net-tools wget curl bash-completion vim nfs-utils
nginx 安裝
- 安裝 nginx( ngin官方倉庫安裝 )
# 配置nginx官方倉庫
[root@web ~]# vim /etc/yum.repos.d/nginx.repo
[root@web ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@web ~]# dnf install nginx -y
- 查找 nginx 的啟動服務文件:
[root@web ~]# find / -name nginx.service
/usr/lib/systemd/system/nginx.service# 查看這個文件的內容:
[root@web ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
#ExecStop=/usr/sbin/nginx -s stop | quit
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true[Install]
WantedBy=multi-user.target
- 查看nginx.conf配置文件
[root@web ~]# vim /etc/nginx/nginx.conf
2. 放行防火墻,關閉SELinux,啟動服務
# 啟動 nfs 服務
[root@server ~]# systemctl enable --now nfs-server
或者
systemctl start nfs-server
# 啟動 nginx
[root@web ~]# systemctl start nginx
[root@web ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: disabled)Active: active (running) since Sun 2025-03-09 23:58:02 CST; 3s agoProcess: 14937 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)Process: 14940 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)Process: 14944 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)Main PID: 14945 (nginx)Tasks: 5 (limit: 21357)Memory: 11.1M ()CGroup: /system.slice/nginx.service├─14945 "nginx: master process /usr/sbin/nginx"├─14946 "nginx: worker process"├─14947 "nginx: worker process"├─14948 "nginx: worker process"└─14949 "nginx: worker process"Mar 09 23:58:02 web systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 09 23:58:02 web nginx[14940]: nginx: the configuration file /etc/nginx/nginx.conf syntax >
Mar 09 23:58:02 web nginx[14940]: nginx: configuration file /etc/nginx/nginx.conf test is suc>
Mar 09 23:58:02 web systemd[1]: Started The nginx HTTP and reverse proxy server.
- 放行防火墻,關閉SELinux
# 放行防火墻
[root@server ~]# firewall-cmd --permanent --add-service=nfs
[root@server ~]# firewall-cmd --reload
firewall-cmd --list-all(驗證是否放行成功)
# 永久關閉
sed -i "s/^SELINUX=enforcing$/SELINUX=permissive/g"/etc/selinux/config# 關閉SELinux
[root@server ~]# setenforce 0
3. 配置 Web 服務,放行80端口
# 配置一個web服務
[root@web ~]# vim /etc/nginx/conf.d/nfs.conf
[root@web ~]# cat /etc/nginx/conf.d/nfs.conf
server {access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;server_name 192.168.72.8;root /var/nginx/;
}# 驗證配置文件是否有效
[root@web ~]# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful# 重啟 nginx 服務
[root@web ~]# systemctl restart nginx
[root@web ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@web ~]# firewall-cmd --reload
success
[root@web ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens33sources:services: dhcpv6-client mdns nfs sshports: 80/tcpprotocols:forward: yesmasquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
4. 搭建 nginx 服務
5. 瀏覽
打開瀏覽器,輸入 http://192.168.72.8 來訪問: