第02周作業
-
Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
- 答:常見的文件管理類命令有cp、mv、rm、install、mktemp等,其中:
- cp:用於複製文件或目錄,有單源複製、多源複製兩種工作方式:
- 單源複製
- 命令語法:
[root@localhost ~]# cp [OPTION]... [-T] SOURCE DEST
- 工作機制:
- 如果DEST不存在,則先創建此文件並複製SOURCE的內容到DEST中。
- 如果DEST存在:
- DEST是非目錄文件,則覆蓋DEST(非管理員狀態下默認是不提示是否覆蓋的)
- DEST是目錄文件,則先在DEST目錄下創建一個與SOURCE同名的文件,並複製其內容。如果DEST目錄下已有與SOURCE同名的文件,則覆蓋(非管理員狀態下默認不提示是否覆蓋)
- 默認狀態下,如果SOURCE爲目錄,則略過
- 使用示例:
## 示例 1:目標爲文件,且不存在,直接複製 [root@localhost ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# [root@localhost ~]# ls [root@localhost ~]# [root@localhost ~]# cp /etc/centos-release ./centos-release [root@localhost ~]# [root@localhost ~]# ls centos-release [root@localhost ~]# cat centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]#
## 示例 2:目錄爲文件,且存在,覆蓋 [root@localhost ~]# cat /etc/hostname localhost [root@localhost ~]# ls centos-release [root@localhost ~]# cat centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# [root@localhost ~]# cp /etc/hostname ./centos-release cp: overwrite ‘./centos-release’? y [root@localhost ~]# [root@localhost ~]# ls centos-release [root@localhost ~]# cat centos-release localhost [root@localhost ~]#
## 示例 3:目標爲目錄,則將源文件複製到目標目錄下(如存在則覆蓋) [root@localhost ~]# mkdir test [root@localhost ~]# ls test [root@localhost ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# [root@localhost ~]# cp /etc/centos-release ./test [root@localhost ~]# [root@localhost ~]# ls test [root@localhost ~]# ls ./test centos-release [root@localhost ~]# cat ./test/centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]#
## 示例 4:如果源文件爲目錄,則默認情況下不復制 [root@localhost ~]# ll -d /etc/yum drwxr-xr-x. 6 root root 100 Dec 19 18:40 /etc/yum [root@localhost ~]# [root@localhost ~]# cp /etc/yum ./ cp: omitting directory ‘/etc/yum’ [root@localhost ~]# [root@localhost ~]# ls [root@localhost ~]#
- 命令語法:
- 多源複製
- 命令語法:
[root@localhost ~]# cp [OPTION]... SOURCE... DEST_DIRECTORY [root@localhost ~]# cp [OPTION]... -t DEST_DIRECTORY SOURCE...
- 工作機制:
- 如果DEST_DIRECTORY不存在,則報錯
- 如果DEST_DIRECTORY存在且不是目錄,則報錯
- 如果DEST_DIRECTORY存在且爲目錄,則分別複製每個SOURCE至DEST_DIRECTORY中,並保持原名
- 使用示例:
## 示例 1:DEST_DIRECTORY不存在,報錯 [root@localhost ~]# ls [root@localhost ~]# [root@localhost ~]# cp /etc/hostname /etc/centos-release ./test cp: target ‘./test’ is not a directory [root@localhost ~]#
## 示例 2:DEST_DIRECTORY存在,但不是目錄,報錯 [root@localhost ~]# ll total 0 -rw-r--r--. 1 root root 0 Jun 3 16:06 test [root@localhost ~]# [root@localhost ~]# cp /etc/centos-release /etc/hostname ./test cp: target ‘./test’ is not a directory [root@localhost ~]#
## 示例 3:DEST_DIRECTORY存在,但是目錄,則將源文件分別複製到目標目錄,並保持原文件名 [root@localhost ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# [root@localhost ~]# cat /etc/hostname localhost [root@localhost ~]# [root@localhost ~]# ll total 0 drwxr-xr-x. 2 root root 6 Jun 3 16:09 test [root@localhost ~]# [root@localhost ~]# ls ./test [root@localhost ~]# [root@localhost ~]# cp /etc/centos-release /etc/hostname ./test [root@localhost ~]# [root@localhost ~]# ls ./test centos-release hostname [root@localhost ~]# [root@localhost ~]# cat ./test/centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# cat ./test/hostname localhost [root@localhost ~]#
- 命令語法:
- 單源複製
-
mv:移動(重命名)文件或目錄,有單源移動和多源移動兩種工作方式:
-
單源移動:
- 命令語法:
[root@localhost ~]# mv [OPTION]... [-T] SOURCE DEST
-
工作機制:
- 如果DEST不存在,則將源文件(目錄)移動(重命名)爲目標文件(目錄)
## 示例 1:源文件爲普通文件 [root@localhost ~]# ls hostname [root@localhost ~]# [root@localhost ~]# mv hostname hostname1 [root@localhost ~]# [root@localhost ~]# ls hostname1 [root@localhost ~]#
## 示例 2:源文件爲目錄 [root@localhost ~]# ll total 0 drwxr-xr-x. 2 root root 28 Jun 3 16:28 test [root@localhost ~]# [root@localhost ~]# mv test test1 [root@localhost ~]# [root@localhost ~]# ll total 0 drwxr-xr-x. 2 root root 22 Jun 3 16:26 test1 [root@localhost ~]#
-
如果DEST存在:
-
如果DEST爲目錄,則將源文件(目錄)移動到目標目錄下並保持原名不變
示例 1:源文件爲普通文件 [root@localhost ~]# ll total 4 -rw-r--r--. 1 root root 11 Jun 3 16:46 hostname drwxr-xr-x. 2 root root 22 Jun 3 16:26 test [root@localhost ~]# ls test [root@localhost ~]# [root@localhost ~]# mv hostname test [root@localhost ~]# [root@localhost ~]# ll total 0 drwxr-xr-x. 2 root root 22 Jun 3 16:48 test [root@localhost ~]# ll test total 4 -rw-r--r--. 1 root root 11 Jun 3 16:46 hostname [root@localhost ~]#
## 示例 2:源文件爲目錄文件 [root@localhost ~]# tree . ├── test1 │ └── hostname └── test2 └── centos-release 2 directories, 2 files [root@localhost ~]# [root@localhost ~]# mv test2 test1 [root@localhost ~]# [root@localhost ~]# tree . └── test1 ├── hostname └── test2 └── centos-release 2 directories, 2 files [root@localhost ~]#
-
如果DEST爲普通文件:
- 如果源文件爲普通文件,則將源文件移動並覆蓋目標文件
## 示例: [root@localhost ~]# ll total 8 -rw-r--r--. 1 root root 38 Jun 3 17:12 centos-release -rw-r--r--. 1 root root 11 Jun 3 17:12 hostname [root@localhost ~]# cat centos-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# cat hostname localhost [root@localhost ~]# [root@localhost ~]# mv hostname centos-release mv: overwrite ‘centos-release’? y [root@localhost ~]# [root@localhost ~]# cat centos-release localhost [root@localhost ~]#
-
如果源文件爲目錄文件,則報錯
## 示例: [root@localhost ~]# tree . ├── centos-release └── test └── hostname 1 directory, 2 files [root@localhost ~]# [root@localhost ~]# mv test centos-release mv: overwrite ‘centos-release’? y mv: cannot overwrite non-directory ‘centos-release’ with directory ‘test’ [root@localhost ~]#
- 如果源文件爲普通文件,則將源文件移動並覆蓋目標文件
-
- 如果DEST不存在,則將源文件(目錄)移動(重命名)爲目標文件(目錄)
- 命令語法:
-
多源移動:
- 命令格式:
[root@localhost ~]# mv [OPTION]... SOURCE... DIRECTORY [root@localhost ~]# mv [OPTION]... -t DIRECTORY SOURCE...
-
工作機制:
-
如果DIRECTORY不存在,則報錯
## 示例 [root@localhost ~]# tree . ├── centos-release ├── test │ ├── centos-release │ ├── hostname │ └── test2 │ └── hosts ├── test1 │ └── hostname └── test2 └── hosts 4 directories, 6 files [root@localhost ~]# [root@localhost ~]# mv centos-release test test3 mv: target ‘test3’ is not a directory [root@localhost ~]#
-
如果DIRECTORY存在,但不是目錄,則報錯
## 示例 [root@localhost ~]# tree . ├── centos-release ├── test │ ├── centos-release │ ├── hostname │ └── test2 │ └── hosts ├── test1 │ └── hostname └── test2 └── hosts 4 directories, 6 files [root@localhost ~]# [root@localhost ~]# mv test1 test2 centos-release mv: target ‘centos-release’ is not a directory [root@localhost ~]#
-
如果DIRECTORY存在,且爲目錄,則將源文件(目錄)分別移動到DIRECTORY下
## 示例 [root@localhost ~]# tree . ├── centos-release ├── test │ └── hostname ├── test1 │ └── hostname └── test2 └── hosts 4 directories, 6 files [root@localhost ~]# [root@localhost ~]# mv centos-release test1 test2 test [root@localhost ~]# [root@localhost ~]# tree . └── test ├── centos-release ├── hostname ├── test1 │ └── hostname └── test2 └── hosts 3 directories, 4 files [root@localhost ~]#
-
- 命令格式:
-
-
rm:刪除文件(目錄):
- 命令格式:
[root@localhost ~]# rm [OPTION]... FILE...
-
常見用法:
-
刪除文件:-i選項用於交互式刪除,即針對每一個要刪除的文件提示是否確認刪除(默認情況下非管理員用戶刪除文件時無確認提示);-f選項用於強制刪除,即刪除文件時不再顯示刪除確認提示(默認情況下管理員用戶刪除文件時每個要刪除的文件都有會確認提示),默認情況下,rm命令不會刪除目錄及其內的文件及子目錄
## 示例 1:管理員用戶刪除文件(默認情況) [root@localhost ~]# tree . ├── centos-release ├── hostname ├── hosts └── test └── fstab 1 directory, 4 files [root@localhost ~]# [root@localhost ~]# rm * rm: remove regular file ‘centos-release’? y rm: remove regular file ‘hostname’? y rm: remove regular file ‘hosts’? y rm: cannot remove ‘test’: Is a directory [root@localhost ~]# [root@localhost ~]# tree . └── test └── fstab 1 directory, 1 file [root@localhost ~]#
## 示例 2:管理員用戶刪除文件(使用-f選項) [root@localhost ~]# tree . ├── centos-release ├── hostname ├── hosts └── test └── fstab 1 directory, 4 files [root@localhost ~]# [root@localhost ~]# rm -f * rm: cannot remove ‘test’: Is a directory [root@localhost ~]# [root@localhost ~]# tree . └── test └── fstab 1 directory, 1 file [root@localhost ~]#
## 示例 3:非管理員用戶刪除文件(默認情況) [myusr@localhost ~]$ tree . ├── centos-release ├── hostname ├── hosts └── test └── fstab 1 directory, 4 files [myusr@localhost ~]$ [myusr@localhost ~]$ rm * rm: cannot remove ‘test’: Is a directory [myusr@localhost ~]$ [myusr@localhost ~]$ tree . └── test └── fstab 1 directory, 1 file [myusr@localhost ~]$
示例 4:非管理員用戶刪除文件(使用-i選項) [myusr@localhost ~]$ tree . ├── centos-release ├── hostname ├── hosts └── test └── fstab 1 directory, 4 files [myusr@localhost ~]$ [myusr@localhost ~]$ rm -i * rm: remove regular file ‘centos-release’? y rm: remove regular file ‘hostname’? y rm: remove regular file ‘hosts’? y rm: cannot remove ‘test’: Is a directory [myusr@localhost ~]$ [myusr@localhost ~]$ tree . └── test └── fstab 1 directory, 1 file [myusr@localhost ~]$
- 刪除目錄:使用-r選項,遞歸刪除目錄及其下的所有文件及子目錄,-i、-f的用法及作用同刪除文件
## 示例: [root@localhost ~]# tree . └── test ├── centos-release ├── hostname ├── test1 │ └── hostname └── test2 └── hosts
3 directories, 4 files
[root@localhost ~]#
[root@localhost ~]# rm -rf test
[root@localhost ~]#
[root@localhost ~]# ls
[root@localhost ~]# -
- 命令格式:
- install:複製文件並設置其屬性,或創建新的目錄
- 單源複製文件:
- 命令格式:
[root@localhost ~]# install [OPTION]... [-T] SOURCE DEST
- 用法示例:
## 示例 1:默認狀態下,所複製的目標文件權限爲:rwxr-xr-x [root@localhost ~]# ll /usr/bin/lsfile ls: cannot access /usr/bin/lsfile: No such file or directory [root@localhost ~]# ll total 4 -r-xr-xr-x. 1 root root 17 Jun 4 14:45 lsfile [root@localhost ~]# [root@localhost ~]# install lsfile /bin [root@localhost ~]# [root@localhost ~]# ll /usr/bin/lsfile -rwxr-xr-x. 1 root root 17 Jun 4 14:49 /usr/bin/lsfile [root@localhost ~]#
## 示例 2:可使用-m,--mode=MODE選項設置目標文件的權限 [root@localhost ~]# ll /usr/bin/lsfile ls: cannot access /usr/bin/lsfile: No such file or directory [root@localhost ~]# ll total 4 -rwxr-xr-x. 1 root root 17 Jun 4 14:45 lsfile [root@localhost ~]# [root@localhost ~]# install -m 555 lsfile /bin [root@localhost ~]# [root@localhost ~]# ll /usr/bin/lsfile -r-xr-xr-x. 1 root root 17 Jun 4 14:49 /usr/bin/lsfile [root@localhost ~]#
## 示例 3:可使用-o,--owner=OWNER選項設置目標文件的屬主,可使用-g,--group=GROUP選項設置目標文件的屬組,這兩個選項僅管理員可用 [root@localhost ~]# ll /usr/bin/lsfile ls: cannot access /usr/bin/lsfile: No such file or directory [root@localhost ~]# ll total 4 -r-xr-xr-x. 1 root root 17 Jun 4 14:45 lsfile [root@localhost ~]# [root@localhost ~]# install -o myusr -g myusr lsfile /bin [root@localhost ~]# [root@localhost ~]# ll /usr/bin/lsfile -r-xr-xr-x. 1 myusr myusr 17 Jun 4 14:49 /usr/bin/lsfile [root@localhost ~]#
示例 4:可使用-D選項自動逐級創建不存在的目標文件所屬目錄(此種情況下必須給出目標文件名,而不能只給出目標路徑) [root@localhost ~]# ll -d /usr/bin/mycmd ls: cannot access /usr/bin/mycmd: No such file or directory [root@localhost ~]# ll total 4 -r-xr-xr-x. 1 root root 17 Jun 4 14:45 lsfile [root@localhost ~]# [root@localhost ~]# install -D lsfile /usr/bin/mycmd/lsfile [root@localhost ~]# [root@localhost ~]# ll -d /usr/bin/mycmd drwxr-xr-x. 2 root root 20 Jun 4 15:10 /usr/bin/mycmd [root@localhost ~]# ll /usr/bin/mycmd total 4 -r-xr-xr-x. 1 root root 17 Jun 4 15:10 lsfile [root@localhost ~]#
- 命令格式:
- 多源複製文件:
- 命令格式:
## 格式 1: [root@localhost ~]# install [OPTION]... SOURCE... DIRECTORY
## 格式 2: [root@localhost ~]# install [OPTION]... -t DIRECTORY SOURCE...
- 用法示例:
### 示例 1:格式1的示例,可選項與單源複製類似,不重複演示 [root@localhost ~]# ll /usr/bin/lsfile /usr/bin/lshome ls: cannot access /usr/bin/lsfile: No such file or directory ls: cannot access /usr/bin/lshome: No such file or directory [root@localhost ~]# ll total 8 -r-xr-xr-x. 1 root root 17 Jun 4 14:45 lsfile -r-xr-xr-x. 1 root root 23 Jun 4 15:14 lshome [root@localhost ~]# [root@localhost ~]# install lsfile lshome /usr/bin [root@localhost ~]# [root@localhost ~]# ll /usr/bin/lsfile /usr/bin/lshome -rwxr-xr-x. 1 root root 17 Jun 4 15:20 /usr/bin/lsfile -rwxr-xr-x. 1 root root 23 Jun 4 15:20 /usr/bin/lshome [root@localhost ~]#
### 示例 2:格式2的示例,可選項與單源複製類似,不重複演示 [root@localhost ~]# ll /usr/bin/lsfile /usr/bin/lshome ls: cannot access /usr/bin/lsfile: No such file or directory ls: cannot access /usr/bin/lshome: No such file or directory [root@localhost ~]# ll total 8 -r-xr-xr-x. 1 root root 17 Jun 4 14:45 lsfile -r-xr-xr-x. 1 root root 23 Jun 4 15:14 lshome [root@localhost ~]# [root@localhost ~]# install -t /usr/bin lsfile lshome [root@localhost ~]# [root@localhost ~]# ll /usr/bin/lsfile /usr/bin/lshome -rwxr-xr-x. 1 root root 17 Jun 4 15:20 /usr/bin/lsfile -rwxr-xr-x. 1 root root 23 Jun 4 15:20 /usr/bin/lshome [root@localhost ~]#
- 命令格式:
- 創建新的目錄:
- 命令格式:
[root@localhost ~]# install [OPTION]... -d DIRECTORY...
- 用法示例:
[root@localhost ~]# ll -d /usr/bin/mycmd ls: cannot access /usr/bin/mycmd: No such file or directory [root@localhost ~]# [root@localhost ~]# install -d /usr/bin/mycmd [root@localhost ~]# [root@localhost ~]# ll -d /usr/bin/mycmd drwxr-xr-x. 2 root root 6 Jun 4 15:25 /usr/bin/mycmd [root@localhost ~]#
- 命令格式:
- 單源複製文件:
-
mktemp:創建臨時文件或臨時目錄
- 命令格式:
[root@localhost ~]# mktemp [OPTION]... [TEMPLATE]
-
用法示例:
## 示例 1:使用給定的名稱模板(以三個以上連續‘X’做爲結尾的字符串)創建臨時文件,名稱模板最後的連續‘X’將被替換爲同等數量的隨機字符,創建的臨時文件權限爲u+rw [root@localhost ~]# ll total 0 [root@localhost ~]# [root@localhost ~]# mktemp tempfile.XXXX tempfile.EDNF [root@localhost ~]# [root@localhost ~]# ll total 0 -rw-------. 1 root root 0 Jun 4 15:40 tempfile.EDNF [root@localhost ~]#
## 示例 2:不給定名稱模板,且在Shell會話中已經定義了$TMPDIR的情況下,使用tmp.XXXXXXXXXX做爲名稱模板,在$TMPDIR目錄下創建臨時文件 [root@localhost ~]# ll total 0 drwxr-xr-x. 2 root root 70 Jun 4 15:56 test [root@localhost ~]# echo $TMPDIR /root/test [root@localhost ~]# [root@localhost ~]# mktemp /root/test/tmp.XgL7SnUDSo [root@localhost ~]# [root@localhost ~]# ll test total 0 -rw-------. 1 root root 0 Jun 4 15:56 tmp.XgL7SnUDSo [root@localhost ~]#
## 示例 3:不給定名稱模板,且在Shell會話中未定義$TMPDIR的情況下,使用tmp.XXXXXXXXXX做爲名稱模板,在/tmp目錄下創建臨時文件 [root@localhost ~]# echo $TMPDIR [root@localhost ~]# ll /tmp total 0 drwx------. 3 root root 17 Jun 4 14:30 systemd-private-7a49d165f7244d33892b2b1898ae2f9b-chronyd.service-h9OJJM drwx------. 2 root root 6 Jun 4 14:30 vmware-root_5835-1950100230 [root@localhost ~]# [root@localhost ~]# mktemp /tmp/tmp.K8ix4KTqRO [root@localhost ~]# [root@localhost ~]# [root@MageStudy3 ~]# ll /tmp total 0 drwx------. 3 root root 17 Jun 4 14:30 systemd-private-7a49d165f7244d33892b2b1898ae2f9b-chronyd.service-h9OJJM -rw-------. 1 root root 0 Jun 4 16:09 tmp.K8ix4KTqRO drwx------. 2 root root 6 Jun 4 14:30 vmware-root_5835-1950100230 [root@localhost ~]#
## 示例 4:使用-u,--dry-run選項,只返回臨時文件的路徑和文件名,而不真正創建臨時文件(不安全,此操作不會驗證文件是否可以創建成功,所以返回的文件名或路徑不一定可用),通常用於功能測試 [root@localhost ~]# [root@localhost ~]# ll total 0 [root@localhost ~]# [root@localhost ~]# mktemp -u temp.XXXX temp.dy5z [root@localhost ~]# [root@localhost ~]# ll total 0 [root@localhost ~]#
## 示例 5:使用-d,--directory選項創建臨時目錄,此時名稱模板及-u選項的相關使用與創建臨時文件類似 [root@localhost ~]# ll total 0 [root@localhost ~]# [root@localhost ~]# mktemp -d temp.XXXX temp.xDkV [root@localhost ~]# [root@localhost ~]# ll total 0 drwx------. 2 root root 6 Jun 4 16:26 temp.xDkV [root@localhost ~]#
## 示例 6:在腳本中,可將mktemp的返回值保存起來,以便使用 #!/bin/bash TMPFILE=$(mktemp) echo TMPFILE ... unset TMPFILE
- 命令格式:
-
使用命令行展開功能,創建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目錄下創建目錄:x_y, x_z, q_y, q_z
- 答:
[root@localhost ~]# mkdir -p /tmp/{a{1/{a,b},2},{x,q}_{y,z}} [root@localhost ~]# [root@localhost ~]# tree /tmp /tmp ├── a1 │ ├── a │ └── b ├── a2 ├── q_y ├── q_z ├── systemd-private-7a49d165f7244d33892b2b1898ae2f9b-chronyd.service-h9OJJM │ └── tmp ├── vmware-root_5835-1950100230 ├── x_y └── x_z
11 directories, 0 files
[root@localhost ~]# - 答:
-
文件的元數據信息有哪些,分別表示什麼含義,如何查看?如何修改文件的時間戳信息。
- 答:
-
可使用stat命令查看文件的元數據信息,以/etc/fstab文件爲例,輸出信息如下:
[root@localhost ~]# stat /etc/fstab File: ‘/etc/fstab’ Size: 465 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 16777282 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:etc_t:s0 Access: 2019-06-04 16:50:48.593186614 +0800 Modify: 2018-12-19 18:40:07.324107621 +0800 Change: 2018-12-19 18:43:14.540024710 +0800 Birth: -
具體信息含義:
- File:文件名
- Size:文件大小
- Blocks:佔用磁盤塊數
- IO Block:磁盤塊大小
- regular file:文件類型,此處爲普通文件,還有可能爲目錄文件、塊設備文件、字符設備文件、鏈接文件、管道文件、套接字文件等。
- Device:文件所在的設備
- Inode:Inode節點號
- Links:鏈接次數
- Access(第一個):文件權限標誌
- Uid:UID號/屬主
- Gid:GID號/屬組
- Context:SELinux標誌
- Access(第二個):最近一次訪問時間
- Modify:文件的內容修改時間
- Change:文件的元數據改變時間
- Birth:文件的創建時間,因常用文件系統並不保存文件的創建時間,所以此處通常爲空
- 可以使用touch命令修改文件的Access時間和Modify時間信息,不能手動信息文件的Change時間信息,默認狀態下同時修改文件的Access和Modify時間戳到系統的當前時間,也可單獨指定修改哪一個時間,也可以手動指定要修改到的時間,具體用法爲:
[root@localhost ~]# touch [OPTION...] FILE...
- 常用選項:
- -a:只修改文件的Access時間
- -m:只修改文件的Modify時間
- -t STAMP:手動指定時間戳而不使用系統的當前時間,時間戳的格式爲:
[[CC]YY]MMDDhhmm[.ss]
- 常用選項:
- 在/tmp目錄下創建以tfile開頭,後跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
- 答:
[root@localhost ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S) [root@localhost ~]# [root@localhost ~]# ll /tmp total 0 drwx------. 3 root root 17 Jun 4 14:30 systemd-private-7a49d165f7244d33892b2b1898ae2f9b-chronyd.service-h9OJJM -rw-r--r--. 1 root root 0 Jun 4 17:50 tfile-2019-06-04-17-50-46 drwx------. 2 root root 6 Jun 3 14:57 vmware-root_5934-1002483909 [root@localhost ~]#
- 答:
- 複製/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
- 答:
[root@localhost ~]# mkdir /tmp/mytest1 [root@localhost ~]# [root@localhost ~]# cp -r /etc/p*[^0-9] /tmp/mytest1 [root@localhost ~]#
- 答:
- 創建用戶tom,指定UID爲5001,指定家目錄爲/tmp/tom, 指定shell爲/bin/zsh, 指定基本組爲tom,附加組爲jack
- 答:
[root@localhost ~]# groupadd tom [root@localhost ~]# groupadd jack [root@localhost ~]# useradd -u 5001 -g tom -G jack -d /tmp/tom -s /bin/zsh tom [root@localhost ~]#
- 答:
-
常用的用戶以及文件管理命令有哪些,並演示命令以及用法。
- 答:常用的用戶管理命令有useradd、usermod、userdel、passwd、chage、id、su、pwck、grpck、whoami、finger、chfn、chsh等,具體用法如下:
- useradd:創建一個新用戶或更新默認新用戶信息
- 用法一:創建一個新用戶:
## 命令格式 [root@localhost ~]# useradd [options] LOGIN
- 常用選項:
- -u,--uid UID:在創建用戶時指定用戶的UID
- -g,--gid GROUP:指定用戶主組的組名或GID,此組需已經存在
- -G,--groups GROUP1[,GROUP2,...[,GROUPN]]]:指定用戶所屬的附加組,多個組之間用逗號分隔,所有的組需事先存在
- -c, --comment COMMENT:指定用戶的註釋信息,常用於保存用戶的全名
- -d,--home-dir HOME_DIR:指定用戶的家目錄,如果不指定,用戶的家目錄則爲BASE_DIR/LOGIN模式,此目錄可以不存在,如果不存在則會自動創建(通過複製/etc/skel目錄並重命名來實現,而非創建一個空目錄),如果此目錄已存在,則不會爲用戶複製環境配置文件,所在此目標目錄最好不要存在
- -s,--shell SHELL:指定用戶的默認Shell,可用的所有Shell列表存儲於/etc/shells文件,如果指定的Shell不在此列表中,創建命令可以正常執行,但是創建的用戶將不能正常登錄
- -r,--system:創建系統用戶
- -M,--no-create-home:不創建用戶的家目錄
- -f,--inactive INACTIVE:指定用戶密碼被徹底禁用之前的寬限期天數,0表示立即禁用,-1表示禁用此功能
## 示例: [root@localhost ~]# useradd -u 5001 -g tom -G jack -d /home/tom -s /bin/bash tom
- 常用選項:
- 用法二:顯示用戶創建時的默認配置屬性,只顯示很少的一部分配置屬性,更多的配置屬性見/etc/login.defs配置文件
[root@localhost ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes [root@localhost ~]# 或 [root@localhost ~]# useradd --defaults GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes [root@localhost ~]#
- 字段含義:
- GROUP:同時創建一個與用戶同名的私有組
- HOME:創建用戶時自動創建的用戶家目錄的起始目錄,也就是創建的家目錄位於此路徑下
- INACTIVE:創建的用戶的密碼寬限期天數,-1表示禁用此功能
- EXPIRE:用戶賬戶的過期期限,爲空表示永不過期,表現在/etc/shadow文件中爲99999天
- SHELL:新用戶的默認登錄Shell
- SKEL:新用戶家目錄的骨架信息的來源位置
- CREATE_MAIL_SPOOL:是否爲用戶創建郵件緩衝隊列
- 字段含義:
- 用法三:修改用戶創建時的默認配置屬性,只可以修改常用的一部分配置屬性,更多配置屬性見/etc/login.defs配置文件,修改的結果保存於/etc/default/useradd文件中,所以此命令用法所能實現的功能也可以直接修改此文件實現
[root@localhost ~]# useradd -D [options]
- 常用選項:
- -b,--base-dir BASE_DIR:修改默認的新建用戶家目錄的前綴
- -e,--expiredate EXPIRE_DATE:修改默認的新建用戶的過期時間
- -f,--inactive INACTIVE:修改默認的新建用戶的密碼過期寬限時間
- -g,--gid GROUP:修改默認的新建用戶的用戶組(只在創建用戶時使用了-N/--no-user-group選項或/etc/login.defs文件中USERGROUPS_ENAB選項設定爲no時生效),指定的用戶組必須存在
- -s,--shell SHELL:修改默認的新建用戶的默認登錄Shell
- 用法示例:
## 示例 [root@localhost ~]# useradd -D -b /tmp/home -s /bin/bash
- 常用選項:
- 用法一:創建一個新用戶:
- usermod:修改一個用戶賬戶的屬性
[root@localhost ~]# usermod [options] LOGIN
- 常用選項:
- -u,--uid UID:修改用戶的UID,在不使用-o選項的情況下,新的UID必須爲唯一的。用戶的郵箱及家目錄中所有由此用戶持有的文件的用戶ID屬性會被自動修改,家目錄以外的文件需要手動修改。如果用戶家目錄的屬主不是正在修改的用戶,其內的文件不會被自動修改其用戶ID屬性
- -g,--gid GROUP:修改用戶所屬的基本組,用戶家目錄中所有屬於用戶前一基本組的文件會被自動修改爲屬於用戶的新基本組,用戶家目錄以外的文件需要手動修改。如果用戶家目錄的屬主不是正在修改的用戶,其內的文件不會被自動修改其屬組屬性
- -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用戶的附加組,默認情況下,新指定的附加組列表會覆蓋原有的附加組列表,如果要添加新的附加組而保留原附加組列表,則需與-a/--append選項結合使用。
- -a,--append:與-G/--groups一同使用,用於爲用戶追加附加組
- -c,--comment COMMENT:修改用戶的註釋信息
- -d,--home HOME_DIR:修改用戶的家目錄,默認情況下新的家目錄如果不存在,則只使用/etc/skel初始化一個新的家目錄,用戶原有家目錄中的文件不會被轉移。如果要轉移原有家目錄中的文件,則需與-m/--move-home選項結合使用
- -m,--move-home:與-d/--home選項一同使用,用於將原家目錄移動(更名)爲新的家目錄
- -l,--login NEW_LOGIN:修改用戶名
- -s,--shell SHELL:修改用戶的默認Shell
- -L,--lock:鎖定用戶密碼,即在用戶原來的密碼字符串前添加“!”
- -U,--unlock:解鎖用戶密碼,即移除被鎖定用戶的密碼字符串前的“!”
- 用法示例:
## 示例 [root@localhost ~]# usermod -G mygrp,wheel -d /tmp/home -m -s /bin/zsh myusr
- 常用選項:
- userdel:刪除用戶
[root@localhost ~]# userdel [options] LOGIN
- 常用選項:
- -r,--remove:刪除用戶時一併刪除用戶的家目錄及郵箱
- 用法示例:
## 示例 [root@localhost ~]# userdel -r myusr
- 常用選項:
- passwd:修改用戶的密碼
- 用法一:修改用戶自己的密碼,需要知道原密碼
[root@localhost ~]# passwd
- 用法示例:
## 示例 [root@localhost ~]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]#
- 用法示例:
- 用法二:修改指定用戶的密碼,但默認情況下僅root有此權限,且操作者不需知道此用戶的原密碼
[root@localhost ~]# passwd USERNAME
- 用法示例:
## 示例 [root@localhost ~]# passwd myusr Changing password for user myusr. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]#
- 用法示例:
- 用法三:
[root@localhost ~]# passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
- 常用選項:
- -l,--lock:鎖定用戶的密碼,即在用戶原來的密碼字符串前添加“!”,只有root有此權限
- -u,--unlock:解除對用戶密碼的鎖定,即移除被鎖定用戶的密碼字符串前的“!”,只有root有此權限
- -d,--delete:刪除用戶的密碼,只有root有此權限
- -e,--expire:使用戶密碼處於過期狀態,用戶下次登錄時必須修改密碼,只有root有此權限
- -n,--minimum DAYS:設定用戶密碼的最小使用期限,單位爲天,只有root有此權限
- -x,--maximum DAYS:設定用戶密碼的最大使用期限,單位爲天,只有root有此權限
- -w,--warning DAYS:設定用戶密碼的警告期限,單位爲天,只有root有此權限
- -i,--inactive DAYS:設定用戶密碼的寬限期(非活動期限),單位爲天,只有root有此權限
- --stdin:在修改密碼時從標準輸入讀入新的密碼,以便可以使用管道進行操作或方便腳本操作,如:
- 用法示例:
## 示例 1:解除對用戶密碼的鎖定 [root@localhost ~]# passwd -u myusr
## 示例 2:修改密碼時從標準輸入讀入新的密碼 [root@localhost ~]# echo "magedu" | passwd --stdin docker Changing password for user docker. passwd: all authentication tokens updated successfully.
- 常用選項:
- 用法一:修改用戶自己的密碼,需要知道原密碼
- chage:修改用戶密碼的過期時間
[root@localhost ~]# chage [options] LOGIN
- 常用選項:
- -d,--lastday LAST_DAY:設置用戶的最後密碼修改時間爲自1970年1月1日開始的天數,或YYYY-MM-DD形式的具體日期,如果設置爲0,則用戶下次登錄時將被強制要求修改密碼
- -E,--expiredate EXPIRE_DATE:設置用戶密碼的過期時間爲自1970年1月1日開始的天數,或YYYY-MM-DD形式的具體日期,如果設置爲-1,則會移除用戶密碼的過期時間
- -m,--mindays MIN_DAYS:修改用戶密碼的最小生存時間,如果設置爲0,則用戶可以隨時修改密碼
- -M,--maxdays MAX_DAYS:修改用戶密碼的最大生存時間,如果MAX_DAYS加上LAST_DAY小於當前日期,則用戶會被強制要求修改密碼
- -W,--warndays WARN_DAYS:修改用戶密碼的過期警告時間
- 用法示例:
## 示例 1:強制要求用戶在下次登錄時修改密碼 [root@localhost ~]# chage -d 0 myusr [root@localhost ~]#
## 示例 2:移除用戶的密碼過期時間 [root@localhost ~]# chage -E -1 myusr [root@localhost ~]#
- 常用選項:
- id:顯示用戶和組的真實和有效ID
[root@localhost ~]# id [OPTION]... [USER]
- 常用選項:
- -u,--user:僅顯示用戶的有效UID
- -g,--group:僅顯示用戶的有效GID,即當前基本組的GID
- -G,--groups:僅顯示用戶包括基本組和附加組的所有組的GID
- -n,--name:與u、g、G選項共用時,顯示名稱而非ID
- -r,--real:與u、g、G選項共用時,顯示真實ID而非有效ID
- 用法示例:
## 示例 1:顯示當前用戶、組的ID信息 [root@localhost ~]$ id uid=1001(myusr) gid=1001(myusr) groups=1001(myusr),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@localhost ~]$
## 示例 2:顯示指定用戶的用戶、組的ID信息 [root@localhost ~]# id myusr uid=1001(myusr) gid=1001(myusr) groups=1001(myusr),10(wheel) [root@localhost ~]#
- 常用選項:
- su:切換用戶
- 登錄式切換(完全切換):通過讀取目標用戶配置文件來重新初始化用戶環境
[root@localhost ~]# su - USERNAME
或
[root@localhost ~]# su -l/--login USERNAME
- 用法示例:
## 示例: [root@localhost ~]# su - myusr Last login: Mon Jun 10 15:07:06 CST 2019 on pts/0 [root@localhost ~]$
- 用法示例:
- 非登錄式切換(部分切換):不會讀取目標用戶的配置文件進行用戶環境初始化
[root@localhost ~]# su USERNAME
- 用法示例:
## 示例: [root@localhost ~]# su myusr [root@localhost root]$
- 用法示例:
- 常用選項:
- -c command,--command=command:僅以指定用戶的身份運行此處指定的命令
- 用法示例:
## 示例 1:僅以指定用戶的身份運行指定的命令,登錄式切換 [root@localhost ~]# su -l -c pwd myusr /home/myusr [root@localhost ~]#
## 示例 2:僅以指定用戶的身份運行指定的命令,非登錄式切換 [root@localhost ~]# su -c pwd myusr /root [root@localhost ~]#
- 登錄式切換(完全切換):通過讀取目標用戶配置文件來重新初始化用戶環境
- pwck:檢查用戶數據庫是否有問題
- 用法示例:
## 示例: [root@localhost ~]# pwck user 'ftp': directory '/var/ftp' does not exist user 'tom': directory '/tmp/tom' does not exist user 'tom': program '/bin/zsh' does not exist pwck: no changes [root@localhost ~]#
- 用法示例:
- grpck:檢查組數據庫是否有問題
- 用法示例:
## 示例: [root@localhost ~]# grpck [root@localhost ~]#
- 用法示例:
- whoami:顯示當前用戶的登錄名
- 用法示例:
## 示例: [root@localhost ~]# whoami root [root@localhost ~]#
- 用法示例:
- finger:查詢用戶的相關信息
- 用法示例:
## 示例: [root@localhost ~]# finger Login Name Tty Idle Login Time Office Office Phone Host root root pts/0 2 Jun 10 14:34 (192.168.43.192) root root pts/1 Jun 10 14:42 (192.168.43.192) [root@localhost ~]#
- 用法示例:
-
chfn:修改用戶的相關信息
-
用法示例:
## 示例: [root@localhost ~]# chfn Changing finger information for root. Name [root]: Office []: Office Phone []: Home Phone []: Finger information not changed. [root@localhost ~]#
-
- chsh:修改用戶的默認登錄Shell
- 用法一:修改當前用戶的默認登錄Shell,Shell路徑手動輸入
[root@localhost ~]# chsh Changing shell for root. New shell [/bin/bash]: [root@localhost ~]#
- 用法二:修改指定用戶的默認登錄Shell,Shell路徑手動輸入
[root@localhost ~]# chsh myusr Changing shell for myusr. New shell [/bin/bash]: [root@localhost ~]#
- 用法三:列出所有可用的Shell(/etc/shells)並退出
[root@localhost ~]# chsh -l /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash [root@localhost ~]#
- 用法四:修改當前用戶或指定用戶的默認登錄Shell,Shell路徑直接輸入
[root@localhost ~]# chsh -s /bin/sh Changing shell for root. Shell changed. [root@localhost ~]#
或
[root@localhost ~]# chsh -s /bin/sh myusr Changing shell for myusr. Shell changed. [root@localhost ~]#
- 用法一:修改當前用戶的默認登錄Shell,Shell路徑手動輸入
- 文件管理相關命令已在第一題中解答,此處不再重複