------------------------------------------------------ vi 使用
一般模式:標記、刪除、搬移、複製
一般模式:標記、刪除、搬移、複製
G:移到檔案最後。5G:移到檔案第5行。gg:移到檔案開頭
dd:刪除游標所在之行。5dd 表刪除自游標算起 5 行
yy:拷貝游標所在之行至緩衝區。5yy:拷貝游標所在之處以下 5 行至緩衝區。p:把緩衝區之資料貼上來
u:復原至上一動作。 ‧ : 重覆執行上個指令
編輯模式:
i (insert) 進入編輯模式、ESC離開編輯模式
i (insert) 進入編輯模式、ESC離開編輯模式
命令模式:
:wq ( 寫入並離開 vi )。:q! ( 強迫離開並放棄編輯的檔案 )
:set nu (列出行號) :set nonu (不列出行號)
/pattern (往下尋找pattern字串),按"n"找下一個符合字串 ,按"N"找上一個符合字串
?pattern (往上尋找pattern字串),按"n"找上一個符合字串 ,按"N"找下一個符合字串
------------------------------------------------------ 詳細使用手冊
# man man
MAN(1) Manual pager utils MAN(1)
NAME
man - an interface to the on-line reference manuals
SYNOPSIS //摘要
DESCRIPTION
...
【Space】往前捲一個頁面
【b】 往後捲一個頁面
【PageDown】往前捲半個頁面
【PageUp】 往後捲半個頁面
【Enter】往下移行一行
【方向鍵】上下左右
【/關鍵字】往後搜尋關鍵字,【n】同方向繼續搜尋,【N】反方向繼續搜尋
【?關鍵字】往前搜尋關鍵字,【N】同方向繼續搜尋,【n】反方向繼續搜尋
【q】離開
# man --help
# man -h
# info man
------------------------------------------------------ 檔案系統
檔案系統階層標準 Filesystem Hierarchy Standard FHS 說明檔案與目錄在 Linux 階層架構與擺放位置。
------------------------------------------------------查看内核kernel的版本
# cat /etc/redhat-release
CentOS Linux release 8.4.2105
# cat /proc/version
Linux version 4.18.0-305.3.1.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)) #1 SMP Tue Jun 1 16:14:33 UTC 2021
# uname -a
Linux centos.kk 4.18.0-305.3.1.el8.x86_64 #1 SMP Tue Jun 1 16:14:33 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
------------------------------------------------------network address
# man ip
# ip --help
# ip -help
# ip -h
//路由表複雜時比 ifconifg 效能較佳
# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:cc:33:0e brd ff:ff:ff:ff:ff:ff
inet 172.31.145.99/24 brd 172.31.145.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fecc:330e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# ip route
default via 172.31.145.254 dev ens33 proto static metric 100
172.31.145.0/24 dev ens33 proto kernel scope link src 172.31.145.99 metric 100
------------------------------------------------------行程
# man ps
NAME
ps - report a snapshot of the current processes.
...
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 251560 14000 ? Ss 13:54 0:01 /usr/lib/systemd/systemd --switched-root --system -
root 2 0.0 0.0 0 0 ? S 13:54 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 13:54 0:00 [rcu_gp]
...
# ls ..
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
/proc 是一種虛擬文件系統。儲存的是當前核心運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬體及當前正在運行進程的信息。
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
...
/run 程式或服務啟動後會將其 PID 放置於此,正在執行
# ls /run
...
cryptsetup fsck mount sshd.pid udev
# cat /run/sshd.pid
1006
------------------------------------------------------配合資教中心系統升級與補強
取得 CentOS
http://ftp.kh.edu.tw/Linux/Caosity/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso
# dnf -y install wget
# wget http://ftp.kh.edu.tw/APPL/dnf/CentOS8/fix-dnf_repo-CentOS8.sh
# ls -l
# chmod 755 fix-dnf_repo-CentOS8.sh
# ls -l
總計 8
-rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
-rwxr-xr-x. 1 root root 1943 11月 4 14:30 fix-dnf_repo-CentOS8.sh
//修正套件庫來源及增加 epel 套件庫來源
# ./fix-dnf_repo-CentOS8.sh
# dnf -y update
------------------------------------------------------讓設備自動定期更新套件
# dnf -y install dnf-automatic
# vi /etc/dnf/automatic.conf
...
apply_updates = yes
# systemctl start dnf-automatic.timer
# systemctl enable dnf-automatic.timer
Created symlink /etc/systemd/system/timers.target.wants/dnf-automatic.timer → /usr/lib/systemd/system/dnf-automatic.timer.
# systemctl status dnf-automatic.timer
● dnf-automatic.timer - dnf-automatic timer
Loaded: loaded (/usr/lib/systemd/system/dnf-automatic.timer; enabled; vendor>
Active: active (waiting) since Wed 2021-11-17 16:07:52 CST; 17s ago
Trigger: Thu 2021-11-18 06:23:10 CST; 14h left
------------------------------------------------------看更新紀錄,知道那些套件更新
# cat /var/log/dnf.rpm.log
...
2021-11-17T15:53:16+0800 INFO --- logging initialized ---
2021-11-17T16:03:28+0800 INFO --- logging initialized ---
2021-11-17T16:03:28+0800 SUBDEBUG Installed: dnf-automatic-4.7.0-4.el8.noarch
# tail /var/log/dnf.rpm.log
2021-11-17T15:52:22+0800 SUBDEBUG Upgraded: glibc-2.28-151.el8.x86_64
2021-11-17T15:52:22+0800 SUBDEBUG Upgraded: glibc-langpack-zh-2.28-151.el8.x86_64
2021-11-17T15:52:22+0800 SUBDEBUG Upgraded: glibc-common-2.28-151.el8.x86_64
2021-11-17T15:52:22+0800 SUBDEBUG Upgraded: tzdata-2021a-1.el8.noarch
2021-11-17T15:52:22+0800 SUBDEBUG Upgraded: filesystem-3.8-3.el8.x86_64
2021-11-17T15:52:23+0800 SUBDEBUG Upgraded: ncurses-base-6.1-7.20180224.el8.noarch
2021-11-17T15:52:23+0800 SUBDEBUG Upgraded: libgcc-8.4.1-1.el8.x86_64
2021-11-17T15:53:16+0800 INFO --- logging initialized ---
2021-11-17T16:03:28+0800 INFO --- logging initialized ---
2021-11-17T16:03:28+0800 SUBDEBUG Installed: dnf-automatic-4.7.0-4.el8.noarch
# tail -2 /var/log/dnf.rpm.log
2021-11-17T16:03:28+0800 INFO --- logging initialized ---
2021-11-17T16:03:28+0800 SUBDEBUG Installed: dnf-automatic-4.7.0-4.el8.noarch
# cat /var/log/dnf.rpm.log | more
# cat /var/log/dnf.rpm.log | grep Installed
------------------------------------------------------檔案目錄簡介
# ls -l /
總計 16
lrwxrwxrwx. 1 root root 7 6月 22 13:06 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 11月 18 09:25 boot
drwxr-xr-x. 20 root root 3120 11月 18 09:25 dev
drwxr-xr-x. 83 root root 8192 11月 18 09:30 etc
drwxr-xr-x. 3 root root 18 6月 22 13:06 home
lrwxrwxrwx. 1 root root 7 6月 22 13:06 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 22 13:06 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 22 13:06 media
drwxr-xr-x. 3 root root 18 6月 22 13:06 mnt
drwxr-xr-x. 2 root root 6 6月 22 13:06 opt
dr-xr-xr-x. 178 root root 0 11月 18 09:24 proc
dr-xr-x---. 2 root root 166 6月 22 13:06 root
drwxr-xr-x. 27 root root 760 11月 18 09:25 run
lrwxrwxrwx. 1 root root 8 6月 22 13:06 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 22 13:06 srv
dr-xr-xr-x. 13 root root 0 11月 18 09:25 sys
drwxrwxrwt. 11 root root 276 11月 18 09:30 tmp
drwxr-xr-x. 12 root root 144 11月 17 15:49 usr
drwxr-xr-x. 20 root root 278 11月 18 09:25 var
# dnf -y install tree
# tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
19 directories, 0 files
/proc 是一種虛擬文件系統。儲存的是當前核心運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬體及當前正在運行進程的信息。
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.2 175000 13524 ? Ss 09:24 0:01 /usr/lib/syst
root 2 0.0 0.0 0 0 ? S 09:24 0:00 [kthreadd]
...
# ls /proc/1
attr environ mountinfo personality statm
autogroup exe mounts projid_map status
...
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
...
/run 程式或服務啟動後會將其 PID 放置於此,正在執行
# ls /run
agetty.reload cron.reboot firewalld lvm setrans tuned
auditd.pid cryptsetup fsck mount sshd.pid udev
...
# cat /run/sshd.pid
1029
/opt 第3方程式放在此
# ls -al /sys
總計 0
dr-xr-xr-x. 13 root root 0 11月 18 09:25 .
dr-xr-xr-x. 17 root root 224 11月 17 15:49 ..
drwxr-xr-x. 2 root root 0 11月 18 09:24 block
drwxr-xr-x. 36 root root 0 11月 18 09:24 bus
...
Linux 根目錄 /
Windows 根目錄 \
------------------------------------------------------inode
一、 inode是什麼?
檔案儲存在硬碟上,硬碟的最小儲存單位叫做”扇區”(Sector)。每個扇區儲存512位元組(相當於0.5KB)。
作業系統讀取硬碟的時候,是一次性連續讀取多個扇區,即一次性讀取一個”塊”(block)。這種由多個扇區組成的”塊”,是檔案存取的最小單位。”塊”的大小,最常見的是4KB,即連續八個 sector組成一個 block。
檔案資料都儲存在”塊”中,那麼很顯然,我們還必須找到一個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為”索引節點”。
每一個檔案都有對應的inode,裡面包含了與該檔案有關的一些資訊。
二、inode的內容
inode包含檔案的元資訊,具體來說有以下內容:
- 檔案的位元組數
- 檔案擁有者的User ID
- 檔案的Group ID
- 檔案的讀、寫、執行許可權
- 檔案的時間戳,共有三個:
- ctime (status Change time) 指檔案的屬性或內容上次被修改的時間
- mtime (Modified time) 指檔案內容上一次變動的時間,
- atime (Access time) 指檔案上一次開啟、讀取的時間。
- 連結數,即有多少檔名指向這個inode
- 檔案資料block的位置
# ls
anaconda-ks.cfg
// stat - display file or file system status
# stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1167 Blocks: 8 IO Block: 4096 普通檔案
Device: fd00h/64768d Inode: 9406547 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2021-10-08 13:47:25.937036895 +0800
Modify: 2021-10-08 13:47:25.970035323 +0800
Change: 2021-10-08 13:47:25.970035323 +0800
Birth: 2021-10-08 13:47:25.937036895 +0800
三、inode的大小
inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統自動將硬碟分成兩個區域:
- 資料區,存放檔案資料;
- inode區(inode table),存放inode所包含的資訊。
每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設定一個inode,那麼inode table的大小就會達到128MB,佔整塊硬碟的12.8%。
//硬碟總KB數*每個inode大小(KB)=總inode table 大小(KB)
1000000*0.128=128000(KB)
//每個硬碟分割槽的inode總數和已經使用的數量
//df - report file system disk space usage
// -i, --inodes list inode information instead of block usage
# df -i
檔案系統 Inode I已用 I可用 I已用% 掛載點
devtmpfs 736104 394 735710 1% /dev
tmpfs 740808 1 740807 1% /dev/shm
由於每個檔案都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上建立新檔案。
四、inode號碼
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。
Unix/Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。
表面上,使用者通過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,通過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。
//看到檔名對應的inode號碼:
# ls -i anaconda-ks.cfg
9406547 anaconda-ks.cfg
五、目錄檔案
Unix/Linux系統中,目錄(directory)也是一種檔案。開啟目錄,實際上就是開啟目錄檔案。
目錄檔案的結構,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含檔案的檔名,以及該檔名對應的inode號碼。
# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
//列出整個目錄檔案,即檔名和inode號碼
// -i, --inode print the index number of each file
# ls -i /etc
4489148 adjtime 4732111 mke2fs.conf
4225576 aliases 12705687 modprobe.d
...
//列出檔案的詳細資訊
//-l use a long listing format
[root@centos ~]# ls -l /etc
總計 1060
-rw-r--r--. 1 root root 16 10月 8 13:46 adjtime
-rw-r--r--. 1 root root 1529 5月 15 2020 aliases
目錄檔案的讀許可權(r)和寫許可權(w),都是針對目錄檔案本身。由於目錄檔案內只有檔名和inode號碼,所以如果只有讀許可權,只能獲取檔名,無法獲取其他資訊,因為其他資訊都儲存在inode節點中,而讀取inode節點內的資訊需要目錄檔案的執行許可權(x)。
------------------------------------------------------Link
六、硬連結
一般情況下,檔名和inode號碼是”一一對應”關係,每個inode號碼對應一個檔名。但是,Unix/Linux系統允許,多個檔名指向同一個inode號碼。
這意味著,可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;但是,刪除一個檔名,不影響另一個檔名的訪問。這種情況就被稱為”硬連結”(hard link)。
# touch readme.txt
# ls -li
總計 8
9406547 -rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
8414221 -rw-r--r--. 1 root root 0 11月 19 11:12 readme.txt
//ln
# link readme.txt readme.txt.HardLink
# ls -li
總計 8
9406547 -rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
8414221 -rw-r--r--. 2 root root 0 11月 19 11:12 readme.txt
8414221 -rw-r--r--. 2 root root 0 11月 19 11:12 readme.txt.HardLink
原始檔與目標檔案的inode號碼相同,都指向同一個inode。inode資訊中有一項叫做”連結數”,記錄指向該inode的檔名總數,這時就會增加1。
反過來,刪除一個檔名,就會使得inode節點中的”連結數”減1。當這個值減到0,表明沒有檔名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。
# rm -f readme.txt
# ls -li
9406547 -rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
8414221 -rw-r--r--. 1 root root 0 11月 19 11:12 readme.txt.HardLink
# cat readme.txt.HardLink
七、軟連結
檔案A和檔案B的inode號碼雖然不一樣,但是檔案A的內容是檔案B的路徑。讀取檔案A時,系統會自動將訪問者導向檔案B。因此,無論開啟哪一個檔案,最終讀取的都是檔案B。這時,檔案A就稱為檔案B的”軟連結”(soft link)或者”符號連結(symbolic link)。
這意味著,檔案A依賴於檔案B而存在,如果刪除了檔案B,開啟檔案A就會報錯:”No such file or directory”。這是軟連結與硬連結最大的不同:檔案A指向檔案B的檔名,而不是檔案B的inode號碼,檔案B的inode”連結數”不會因此發生變化。
# ln -s readme.txt readme.txt.SoftLink
# ls -li
總計 8
9406547 -rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
8414221 -rw-r--r--. 1 root root 0 11月 19 11:21 readme.txt
8414222 lrwxrwxrwx. 1 root root 10 11月 19 11:23 readme.txt.SoftLink -> readme.txt
# rm -f readme.txt
# ls -li
總計 8
9406547 -rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
8414222 lrwxrwxrwx. 1 root root 10 11月 19 11:27 readme.txt.SoftLink -> readme.txt
//表示錯誤
# cat readme.txt.SoftLink
cat: readme.txt.SoftLink: 沒有此一檔案或目錄
八、inode的特殊作用
由於inode號碼與檔名分離,這種機制導致了一些Unix/Linux系統特有的現象。
- 有時,檔名包含特殊字元,無法正常刪除。這時,直接刪除inode節點,就能起到刪除檔案的作用。
- 移動檔案或重新命名檔案,只是改變檔名,不影響inode號碼。
- 開啟一個檔案以後,系統就以inode號碼來識別這個檔案,不再考慮檔名。因此,通常來說,系統無法從inode號碼得知檔名。這點使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重啟。因為系統通過inode號碼,識別執行中的檔案,不通過檔名。更新的時候,新版檔案以同樣的檔名,生成一個新的inode,不會影響到執行中的檔案。等到下一次執行這個軟體的時候,檔名就自動指向新版檔案,舊版檔案的inode則被回收。
------------------------------------------------------分割區使用狀況及掛載狀態
LVM 的全名是 Logical Volume Manager,邏輯捲軸管理員。之所以稱為『捲軸』可能是因為可以將 filesystem 像捲軸一樣伸長或縮短之故!LVM 的作法是將幾個實體的 partitions (或 disk) 透過軟體組合成為一塊看起來是獨立的大磁碟 (VG) , 然後將這塊大磁碟再經過分割成為可使用分割槽 (LV), 最終就能夠掛載使用了。
使用 LVM 可在分割磁區時不必一次分割大量空間給各個 Partition,等日後哪個磁區空間不足時再分配之前未分配的空間或新增一顆硬碟來配給使用。
Physical Volume, PV, 實體捲軸:
作為 LVM 最基礎的物理捲軸,可以是 partition 也可以是整顆 disk。
Volume Group, VG, 捲軸群組:
將許多的 PV 整合成為一個捲軸群組 (VG),這就是所謂的最大的主要大磁碟。 讀者應該知道磁碟的最小儲存單位為 sector,目前主流 sector 為 512bytes 或 4K。而 LVM 也有最小儲存單位, 那就是 Physical Extent (PE),所有的資料都是透過 PE 在 VG 當中進行交換的。
Physical Extent, PE, 實體範圍區塊:
PE 是整個 LVM 最小的儲存區塊,系統的檔案資料都是藉由寫入 PE 來處理的。 簡單的說,這個 PE 就有點像檔案系統裡面的 block 。PE 預設需要是 2 的次方量,且最小為 4M 才行。
Logical Volume, LV, 邏輯捲軸:
最終將 VG 再切割出類似 partition 的 LV 即是可使用的裝置了。 LV 是藉由『分配數個 PE 所組成的裝置』,因此 LV 的容量與 PE 的容量大小有關。
# fdisk -l //manipulate disk partition table
Disk /dev/sda: 10 GiB, 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
Disklabel type: dos
Disk identifier: 0x6ae82c81
所用裝置 可開機 Start 結束 磁區 Size Id 類型
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 20971519 18872320 9G 8e Linux LVM
Disk /dev/mapper/cl-root: 8 GiB, 8585740288 bytes, 16769024 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 /dev/mapper/cl-swap: 1 GiB, 1073741824 bytes, 2097152 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
# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
# df -Th // report file system disk space usage
檔案系統 類型 容量 已用 可用 已用% 掛載點
devtmpfs devtmpfs 2.9G 0 2.9G 0% /dev
tmpfs tmpfs 2.9G 0 2.9G 0% /dev/shm
tmpfs tmpfs 2.9G 9.0M 2.9G 1% /run
tmpfs tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 8.0G 1.8G 6.2G 23% /
/dev/sda1 xfs 1014M 282M 733M 28% /boot
tmpfs tmpfs 579M 0 579M 0% /run/user/0
# ls /root
anaconda-ks.cfg fix-dnf_repo-CentOS8.sh readme.txt.HardLink readme.txt.SoftLink
# du -h /root //estimate file space usage
32K /root
------------------------------------------------------檔案系統權限
Owner
Group
Other
r 100 4
w 010 2
x 001 1
每一個檔案均有一個 Owner,僅有 root 與 owner 可以更改檔案存取保護模式 --> chmod
只有 root 可以更改檔案的 Owner 與 Group -->chown
# ls -l /etc/shadow
----------. 1 root root 787 11月 17 14:36 /etc/shadow
// ---------- 全關,只有 root 可以改
# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33600 4月 7 2020 /usr/bin/passwd
密碼在系統檔中,本應只有 root 可以改
為了方便使用者可以自行設定密碼,所以改由使用者執行
即暫時將使用者身分提升至 root,完成工作後再自動降回使用者身分
但若故意將密碼設的太長造成溢位,無法完成設定密碼工作,就會一直在 root 身分
------------------------------------------------------打包、壓縮、解壓縮
# du /etc
...
24492 /etc
//tar - an archiving utility
//-c, --create Create a new archive.
//-x, --extract Extract files from an archive.
// -f, --file=ARCHIVE Use archive file or device ARCHIVE.
//-z, --gzip, --gunzip, --ungzip Filter the archive through gzip(1).
//c:打包 v:顯示運作過程 f:指定檔案名稱 z:壓縮
# tar cvfz test.tar.gz /etc
# ls -l
總計 5448
-rw-------. 1 root root 1167 10月 8 13:47 anaconda-ks.cfg
-rw-r--r--. 1 root root 5568963 11月 19 15:40 test.tar.gz
# mkdir etc_bk
# mv test.tar.gz etc_bk
# cd ./etc_bk
# ls
test.tar.gz
# tar xvfz test.tar.gz
# ls -l
總計 5452
drwxr-xr-x. 83 root root 8192 11月 19 13:49 etc
-rw-r--r--. 1 root root 5568963 11月 19 15:40 test.tar.gz
------------------------------------------------------ 網路
HostOS:
windows10 172.31.145.100 MAC Address 24-4B-FE-E8-E6-06
GuestOS:
CentOS8.2 172.31.145.99
//Windows10 ,無法 ping
Windows 系統 --> 控制台 --> Windows Defender 防火牆 --> 進階設定 --> 輸入規則 -->
檔案及印表機共用 (回應要求 - ICMPv4-In) - 私人 --> 右鍵 -->啟用規則
# ping 172.31.145.100
PING 172.31.145.100 (172.31.145.100) 56(84) bytes of data.
64 bytes from 172.31.145.100: icmp_seq=1 ttl=128 time=0.240 ms
...
^C
--- 172.31.145.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2031ms
rtt min/avg/max/mdev = 0.205/0.245/0.292/0.040 ms
------------------------------------------------------網卡
# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=faff608e-1af3-4d6d-a3f8-85123c116ffd
DEVICE=ens33
ONBOOT=yes
IPADDR=172.31.147.99
PREFIX=24
GATEWAY=172.31.147.254
DNS1=163.28.136.21
DOMAIN=168.95.1.1
IPV6_PRIVACY=no
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:a9:bc:b0 brd ff:ff:ff:ff:ff:ff
inet 172.31.147.99/24 brd 172.31.147.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 2001:288:8241:1::33f/128 scope global dynamic noprefixroute
valid_lft 604568sec preferred_lft 604568sec
inet6 2001:288:8241:1:20c:29ff:fea9:bcb0/64 scope global dynamic noprefixroute
valid_lft 2591925sec preferred_lft 604725sec
inet6 fe80::20c:29ff:fea9:bcb0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
//maddress - multicast address.
# ip maddr
1: lo
inet 224.0.0.1
inet6 ff02::1
inet6 ff01::1
2: ens33
link 01:00:5e:00:00:01
link 33:33:00:00:00:01
link 33:33:ff:a9:bc:b0
link 33:33:ff:00:02:76
inet 224.0.0.1
inet6 ff02::1:ff00:276
inet6 ff02::1:ffa9:bcb0 users 2
inet6 ff02::1
inet6 ff01::1
// -s, -stats, -statistics link - network device.
# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:a9:bc:b0 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
207086 1990 0 10 0 0
TX: bytes packets errors dropped carrier collsns
80785 448 0 0 0 0
//Bring up interface x.
# ip link set ens33 up //啟用網路介面卡 up:開 down:關
# ip route
default via 172.31.147.254 dev ens33 proto static metric 100
172.31.147.0/24 dev ens33 proto kernel scope link src 172.31.147.99 metric 100
//nmcli - command-line tool for controlling NetworkManager
# nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet 已連線 ens33
lo loopback 不受管理 --
//啟用網卡 停用網卡:disconnect
# nmcli device connect ens33
裝置「ens33」已成功以「faff608e-1af3-4d6d-a3f8-85123c116ffd」啟用。
// nmtui - Text User Interface for controlling NetworkManager
# nmtui
//先進行 PieTTY 設定:選項 --> 亞洲語系修正 --> Unicode 亞洲寬符號字元 (取消)
------------------------------------------------------路由
# ip route | column -t
default via 172.31.147.254 dev ens33 proto static metric 100
172.31.147.0/24 dev ens33 proto kernel scope link src 172.31.147.99 metric 100
# ip route | column -t>kkRouteTable.txt
# ls
anaconda-ks.cfg kkRouteTable.txt test.tar.gz
# cat kkRouteTable.txt
//IPv6 Route Table
# ip -6 route | column -t
::1 dev lo proto kernel metric 256 pref medium
2001:288:8241:1::276 dev ens33 proto kernel metric 100 pref medium
2001:288:8241:1::/64 dev ens33 proto ra metric 100 pref medium
fe80::/64 dev ens33 proto kernel metric 100 pref medium
default via fe80::ea1c:baff:fec9:968 dev ens33 proto ra metric 100 pref medium
//tracepath, tracepath6 - traces path to a network host discovering MTU along this path
//對應traceroute
# tracepath 168.95.1.1
1?: [LOCALHOST] pmtu 1500
1: _gateway 0.853ms
1: _gateway 0.924ms
2: 10.241.3.153 1.570ms
3: 192.192.69.248 7.018ms
4: 192.192.69.240 9.348ms
...
// ss - another utility to investigate sockets
//-a, --all Display both listening and non-listening (for TCP this means established
connections) sockets.
//-n, --numeric Do not try to resolve service names.
// -t, --tcp Display TCP sockets.
//-p, --processes Show process using socket.
//對應 netstat -antp
# ss -antp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=14945,fd=4))
ESTAB 0 52 172.31.147.99:22 172.31.147.21:52793 users:(("sshd",pid=1601,fd=5),("sshd",pid=1586,fd=5))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=14945,fd=6))
LISTEN 0 32 *:21 *:* users:(("vsftpd",pid=14015,fd=4))
TIME-WAIT 0 0 [2001:288:8241:1::276]:51080 [2001:e10:2000:240:e643:4bff:fee8:a63c]:80
...
# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 52 172.31.147.99:ssh 172.31.147.21:52793
------------------------------------------------------
//systemctl - Control the systemd system and service manager
//查詢目前所有已啟動的服務
# systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File>
sys-devices-pci0000:00-0000:00:07.1-ata2-host1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged VMware_ID>
...
# systemctl list-units | grep firewalld
firewalld.service loaded active running firewalld - dynamic firewall daemon
//查詢服務啟動或是關閉狀態,以檔名顯示
# systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
-.mount generated
boot.mount generated
dev-hugepages.mount static
# systemctl list-unit-files | grep firewalld
firewalld.service
# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enab>
Active: active (running) since Thu 2021-12-09 09:29:03 CST; 2h 19min ago
Docs: man:firewalld(1)
Main PID: 14781 (firewalld)
Tasks: 3 (limit: 34168)
Memory: 27.7M
CGroup: /system.slice/firewalld.service
└─14781 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
12月 09 09:29:03 centos.kk systemd[1]: firewalld.service: Succeeded.
...
# systemctl stop firewalld.service //立即停止xxx.service
# systemctl start firewalld.service //立即啟動xxx.service
# systemctl is-active firewalld.service
active
//設定開機不啟動xxx.service
# systemctl disable firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
//設定開機啟動xxx.service
# systemctl enable firewalld.service
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
# systemctl is-enabled firewalld.service
enabled
# chkconfig firewalld off //設定 firewalld 開機時不要啟動
# chkconfig firewalld on //設定 firewalld 開機時啟動,且不加.service
------------------------------------------------------SELINUX
# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
////關閉SELINUX
# vi /etc/sysconfig/selinux
# 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
#SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
查看由 systemd 所管理服務的日誌記錄
------------------------------------------------------日誌
# man journald.conf
//查看指定系統服務的日誌
# journalctl -u ssh.d
-- Logs begin at Mon 2021-12-13 07:50:40 CST, end at Mon 2021-12-13 07:51:31 CST. --
-- No entries --
////日誌檢視說明
# journalctl
-- Logs begin at Fri 2021-12-10 08:03:40 CST, end at Fri 2021-12-10 08:04:24 CST. --
12月 10 08:03:40 centos.kk kernel: Linux version 4.18.0-348.2.1.el8_5.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gc>
12月 10 08:03:40 centos.kk kernel: Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-348.2.1.el8_5.x86_64 root=/de>
12月 10 08:03:40 centos.kk kernel: Disabled fast string operations
...
//列出最後5行資料
# journalctl -n5
-- Logs begin at Mon 2021-12-13 07:50:40 CST, end at Mon 2021-12-13 08:06:44 CST. --
12月 13 08:06:43 centos.kk dnf[1700]: CentOS Linux 8 - BaseOS 6.6 >
12月 13 08:06:44 centos.kk dnf[1700]: CentOS Linux 8 - Extras 2.8 >
12月 13 08:06:44 centos.kk dnf[1700]: 已建立中介資料快取。
12月 13 08:06:44 centos.kk systemd[1]: dnf-makecache.service: Succeeded.
12月 13 08:06:44 centos.kk systemd[1]: Started dnf makecache.
//持續列出最後10行事件記錄
# journalctl --follow
-- Logs begin at Mon 2021-12-13 07:50:40 CST. --
12月 13 07:51:21 centos.kk systemd[1622]: Starting D-Bus User Message Bus Socket.
12月 13 07:51:21 centos.kk systemd[1622]: Listening on D-Bus User Message Bus Socket.
12月 13 07:51:21 centos.kk systemd[1622]: Reached target Sockets.
12月 13 07:51:21 centos.kk systemd[1622]: Reached target Basic System.
12月 13 07:51:21 centos.kk systemd[1622]: Reached target Default.
12月 13 07:51:21 centos.kk systemd[1622]: Startup finished in 150ms.
12月 13 07:51:21 centos.kk systemd[1]: Started User Manager for UID 0.
12月 13 07:51:21 centos.kk systemd[1]: Started Session 1 of user root.
12月 13 07:51:21 centos.kk sshd[1615]: pam_unix(sshd:session): session opened for user root by (uid=0)
12月 13 07:51:31 centos.kk systemd[1]: systemd-hostnamed.service: Succeeded.
...
^C
# tail -n 5 -f /var/log/messages
Dec 13 07:51:21 centos systemd[1]: Started Session 1 of user root.
Dec 13 07:51:31 centos systemd[1]: systemd-hostnamed.service: Succeeded.
Dec 13 08:05:59 centos systemd[1]: Starting Cleanup of Temporary Directories...
Dec 13 08:05:59 centos systemd[1]: systemd-tmpfiles-clean.service: Succeeded.
Dec 13 08:05:59 centos systemd[1]: Started Cleanup of Temporary Directories.
排程
------------------------------------------------------(一)使用者的設定
# man whereis
...
DESCRIPTION
whereis locates the binary, source and manual files for the specified command names.
...
# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
//crontab - maintains crontab files for individual users
//-e Edits the current crontab using the editor specified by the VISUAL or EDI‐
TOR environment variables. After you exit from the editor, the modified
crontab will be installed automatically.
# crontab -e
14 0 * * * root /usr/bin/ls
//-l Displays the current crontab on standard output.
# crontab -l
14 0 * * * root /usr/bin/ls
# cat /var/spool/cron/root
14 0 * * * root /usr/bin/ls
# journalctl -n 10
-- Logs begin at Mon 2021-12-13 13:43:53 CST, end at Mon 2021-12-13 14:05:37 CST. --
12月 13 14:01:01 centos.kk CROND[1793]: (root) CMD (run-parts /etc/cron.hourly)
12月 13 14:01:01 centos.kk run-parts[1796]: (/etc/cron.hourly) starting 0anacron
12月 13 14:01:01 centos.kk anacron[1802]: Anacron started on 2021-12-13
12月 13 14:01:01 centos.kk anacron[1802]: Will run job `cron.daily' in 31 min.
12月 13 14:01:01 centos.kk anacron[1802]: Jobs will be executed sequentially
12月 13 14:01:01 centos.kk run-parts[1804]: (/etc/cron.hourly) finished 0anacron
12月 13 14:03:36 centos.kk crontab[1809]: (root) BEGIN EDIT (root)
12月 13 14:04:22 centos.kk crontab[1811]: (root) BEGIN EDIT (root)
12月 13 14:04:37 centos.kk crontab[1811]: (root) END EDIT (root)
12月 13 14:05:37 centos.kk crontab[1815]: (root) LIST (root)
# cat /var/log/cron
Dec 13 14:04:22 centos crontab[1811]: (root) BEGIN EDIT (root)
Dec 13 14:04:37 centos crontab[1811]: (root) END EDIT (root)
Dec 13 14:05:37 centos crontab[1815]: (root) LIST (root)
# tail /var/log/cron
Dec 13 14:01:01 centos CROND[1793]: (root) CMD (run-parts /etc/cron.hourly)
Dec 13 14:01:01 centos run-parts[1793]: (/etc/cron.hourly) starting 0anacron
Dec 13 14:01:01 centos anacron[1802]: Anacron started on 2021-12-13
Dec 13 14:01:01 centos anacron[1802]: Will run job `cron.daily' in 31 min.
Dec 13 14:01:01 centos anacron[1802]: Jobs will be executed sequentially
Dec 13 14:01:01 centos run-parts[1793]: (/etc/cron.hourly) finished 0anacron
Dec 13 14:03:36 centos crontab[1809]: (root) BEGIN EDIT (root)
Dec 13 14:04:22 centos crontab[1811]: (root) BEGIN EDIT (root)
Dec 13 14:04:37 centos crontab[1811]: (root) END EDIT (root)
Dec 13 14:05:37 centos crontab[1815]: (root) LIST (root)
排程
------------------------------------------------------(二)系統的設定檔
# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
53 14 * * * root /usr/bin/ls
# systemctl list-units | grep cron
crond.service loaded active running Command Scheduler
# systemctl restart crond.service
# tail /var/log/cron
Dec 13 14:52:58 centos crond[1912]: (CRON) STARTUP (1.5.2)
Dec 13 14:52:58 centos crond[1912]: (CRON) INFO (Syslog will be used instead of sendmail.)
Dec 13 14:52:58 centos crond[1912]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 44% if used.)
Dec 13 14:52:58 centos crond[1912]: (CRON) INFO (running with inotify support)
Dec 13 14:52:58 centos crond[1912]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Dec 13 14:53:01 centos CROND[1914]: (root) CMD (/usr/bin/ls)
...
# journalctl -n 10
-- Logs begin at Mon 2021-12-13 13:43:53 CST, end at Mon 2021-12-13 14:53:01 CST. --
12月 13 14:52:58 centos.kk crond[1912]: (CRON) STARTUP (1.5.2)
12月 13 14:52:58 centos.kk crond[1912]: (CRON) INFO (Syslog will be used instead of sendma>
12月 13 14:52:58 centos.kk crond[1912]: (CRON) INFO (RANDOM_DELAY will be scaled with fact>
12月 13 14:52:58 centos.kk crond[1912]: (CRON) INFO (running with inotify support)
12月 13 14:52:58 centos.kk crond[1912]: (CRON) INFO (@reboot jobs will be run at computer'>
12月 13 14:53:01 centos.kk CROND[1914]: (root) CMD (/usr/bin/ls)
12月 13 14:53:01 centos.kk CROND[1913]: (root) CMDOUT (anaconda-ks.cfg)
12月 13 14:53:01 centos.kk CROND[1913]: (root) CMDOUT (kkRouteTable.txt)
12月 13 14:53:01 centos.kk CROND[1913]: (root) CMDOUT (locates the binary, source and manu>
12月 13 14:53:01 centos.kk CROND[1913]: (root) CMDOUT (test.tar.gz)
date
------------------------------------------------------
# date
一 12月 13 15:07:33 CST 2021
// 更改日期間: MMDDhhmmYYYY 月日時分年
# date 121315062021
一 12月 13 15:06:00 CST 2021
//查看 BIOS 時間
# hwclock -r
2021-12-13 15:08:52.769105+08:00
//將電腦日期時間寫入到 BIOS 時間
# hwclock -w
------------------------------------------------------
------------------------------------------------------
沒有留言:
張貼留言