Linux的文件系統、系統管理類命令、bash基礎特性
根文件系統(rootfs) root fileysystem
LSB,FHS(Filesystem Heirache Standard)文件系統層級結構標準,如:/etc、/usr、/var、/root、/home、/dev /boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)都存放於此目錄; /bin:供所有用戶使用的基本命令;不能關聯至獨立分區,OS啟動即會用到的程序; /sbin:管理類的基本命令;不能關聯至獨立分區,OS啟動即會用到的程序; /lib:基本共享庫文件,以及內核模塊文件(/lib/moudules); /lib64:專用於x86_64系統上的輔助共享庫文件; /etc:配置文件目錄(純文本文件); /home/username:普通用戶家目錄 /root:管理員的家目錄; /media:便攜式移動設備掛載點;(cdrom、usb) /mnt:臨時文件系統掛載點; /dev:設備文件及特殊文件存儲位置; b:block device 隨機訪問設備 c:character device 線性訪問設備 /opt:第三方應用程序的安裝位置; /srv:系統上運行的服務用到的數據; /tmp:臨時文件存儲位置 /usr:universal shared,read-only data bin:保證系統擁有完整功能而提供的應用程序; sbin: lib: lib64: include:C程序的頭文件(header files); share:結構化獨立的數據,例如:man,doc等 local:第三方應用程序的安裝位置; bin、sbin、lib、lib64、etc、share /var:variable data files 可變數據文件 cache:應用程序緩存數據目錄; lib:應用程序狀態信息數據; local:專用於為/usr/local下的應用程序存儲可變數據; lock:鎖文件 log:日誌目錄及文件 opt:專用於為/opt下的應用程序存儲可變數據; run:運行中的進程相關的數據;通常用戶存儲進程的pid文件 spool:應用程序數據池 tmp:保存系統兩次重啟之間產生的臨時數據 /proc:用於輸出內核與進程信息相關的虛擬文件系統; /sys:用於輸出當前系統上硬件設備相關信息的虛擬文件系統 /selinux:security enhanced linux,selinux相關的安全策略等信息的存儲位置
Linux上的應用程序的組成部分:
二進制程序:/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin
庫文件:/lib、/lib64、/usr/lib、/usr/lib64、/usr/local/lib、/usr/loacl/lib64
配置文件:/etc、/etc/directory、/usr/local/etc
幫助文件:/usr/share/man、/usr/share/doc、/usr/local/share/man、/usr/loacl/share/doc
Linux的文件類型
-(f):普通文件;
d:目錄文件
b:塊設備
c:字符設備
l:符號鏈接文件,僅表示軟鏈接;
p:管道文件
s:套接字文件、socket;
系統管理類命令:
halt、poweroff 關機
reboot 重啟
選項:-f:強制,不調用shutdown;-p:切斷電源 shutdown shutdown [option]... time [message] 選項:-r:reboot 重啟;-h:halt 關機 ;-c:cancel 取消關機或重啟 time時間表示法: now:立刻,0亦可表示現在 +m:相對時間表示法,從命令提交開始多久之後,例如:+3; hh:mm:絕對時間表示法,指明具體時間,24小時制; 用戶登錄信息查看命令: whoami:顯示當前登錄有效用戶 [root@localhost ~]# whoami root who:系統當前所有的登錄會話: [root@localhost ~]# who root pts/1 2018-03-21 11:25 (192.168.152.1) root pts/2 2018-03-21 14:15 (192.168.152.1) w:系統當前所有的登錄會話及所做的操作 [root@localhost ~]# w 14:18:12 up 2:57, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/1 192.168.152.1 11:25 2:53m 0.02s 0.02s -bash root pts/2 192.168.152.1 14:15 0.00s 0.01s 0.00s w
bash的基礎特性:
(1)命令歷史
history
環境變量:
HISTSIZE:命令歷史記錄的條數;
[root@localhost ~]# echo $HISTSIZE
1000
HISTFILE:命令歷史文件
[root@localhost ~]# echo $HISTFILE
/root/.bash_history
HISTFILESIZE:命令歷史文件記錄歷史的條數
[root@localhost ~]# echo $HISTFILESIZE
1000
history -d #:刪除命令歷史中第#條命令
[root@localhost ~]# history
1 history
2 ls
3 cd
4 history
[root@localhost ~]# history -d 2
[root@localhost ~]# history
1 history
2 cd
3 history
4 history -d 2
5 history
history -c:清空命令歷史;
history #:顯示命令歷史中最近的#條命令
[root@localhost ~]# history
1 history
2 ls
3 cd
4 history
[root@localhost ~]# history 2
4 history
5 history 2
history -a:手動追加當前會話緩沖區的命令歷史到命令歷史文件中;
調用歷史中的命令:
!#:重復執行第#條命令
[root@localhost ~]# history
1 history
2 ls
3 cd
4 history
[root@localhost ~]# !2
ls
anaconda-ks.cfg Desktop install.log install.log.syslog scsrun.log
!!:重復執行上一條命令
[root@localhost ~]# history
1 history
[root@localhost ~]# !!
history
1 history
2 history
!string:重復執行以string開頭的命令
[root@localhost ~]# history
1 history
2 ls
3 cd
4 history
[root@localhost ~]# !l
ls
anaconda-ks.cfg Desktop install.log install.log.syslog scsrun.log
調用上一條命令的最後一個參數:
!$
ESC,.
alt+.
控制命令歷史的記錄方式:
環境變量:HISTCONTROL
ignoredups 忽略重復的命令;連續且相同方為重復;
ignorespace:忽略所有以空白開頭的命令;
ignoreboth:兼容以上兩者的特性
(2)命令補全
bash執行命令:bash根據PATH環境變量定義的路徑,自左而右在每個路徑搜尋以給定命令名命名的文件,第一次找到即為要執行的命令;
直接補全:Tab,用戶給定的字符串只有一條唯一對應的命令;
以用戶給定的字符串為開頭對應的命令不唯一,則再次Tab會給出列表;
(3)路徑補全
把用戶給出的字符串當做路徑開頭,並在其指定上級目錄下搜索以指定的字符串開頭的文件名
如果唯一,則直接補全
否則,則再次Tab,給出列表;
(4)命令行展開
~:展開為用戶的主目錄
~username:展開為指定用戶的主目錄
{}:可承載一個逗號分隔的列表,並將其展開為多個路徑
示例如下:
/tmp/{a,b}=/tmp/a,/tmp/b
/tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi
(5)命令的執行狀態結果
成功;失敗
bash使用特殊變量$?保存最近一條命令的執行狀態結果
0:成功
1-255:失敗
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
Kernel \r on an \m
[root@localhost ~]# echo $?
0
[root@localhost ~]# catt /etc/issue
-bash: catt: command not found
[root@localhost ~]# echo $?
127
[root@localhost ~]# cat /etc/issuee
cat: /etc/issuee: No such file or directory
[root@localhost ~]# echo $?
1
程序執行有兩類結果:
程序的返回值;
程序的執行狀態結果;
目錄管理類命令:
cd,pwd,ls
mkdir,rmdir
mkdir [options] /path/to/somewhere
-p:存在時不報錯,且可自動創建所需的各目錄,按層級遞歸創建
[root@localhost tmp]# ls -l
total 16
drwx------ 2 root root 4096 Mar 15 19:49 gconfd-root
srwxr-xr-x 1 root root 0 Mar 15 19:04 mapping-root
-rw-r--r-- 1 root root 1580 Mar 20 22:01 passwd
drwxr-xr-x 2 root root 4096 Mar 21 14:57 tom
[root@localhost tmp]# mkdir -p tom
[root@localhost tmp]# mkdir -p x/y/z
[root@localhost tmp]# tree x
x
`-- y
`-- z
-v:顯示詳細信息
[root@localhost tmp]# mkdir -v mary
mkdir: created directory `mary‘
-m MODE:創建目錄時直接指定權限
[root@localhost tmp]# mkdir -m 755 abc
[root@localhost tmp]# ls -dl abc
drwxr-xr-x 2 root root 4096 Mar 21 15:02 abc
tree:查看目錄的層級結構
-d:只顯示目錄,文件不予顯示
[root@localhost tmp]# tree -d /tmp
/tmp
|-- abc
|-- gconfd-root
|-- mary
|-- tom
`-- x
`-- y
`-- z
-L level:指定顯示的層級數目
[root@localhost tmp]# tree -L 2 /tmp
/tmp
|-- abc
|-- gconfd-root
|-- mapping-root
|-- mary
|-- passwd
|-- tom
`-- x
`-- y
-P pattern:只顯示有指定pattern匹配到的路徑
rmdir:刪除空目錄
rmdir [option]... directory...
-v:顯示詳細信息
[root@localhost tmp]# rmdir -v mary
rmdir: removing directory, mary
-p:遞歸刪除空目錄
練習:
1、如何創建/tmp/x/y1、/tmp/x/y2、/tmp/x/y1/a、/tmp/x/y1/b、/tmp/x/y2/a、/tmp/x/y2/b
[root@localhost ~]# mkdir -pv /tmp/x/{y1,y2}/{a,b}
mkdir: created directory `/tmp/x‘
mkdir: created directory `/tmp/x/y1‘
mkdir: created directory `/tmp/x/y1/a‘
mkdir: created directory `/tmp/x/y1/b‘
mkdir: created directory `/tmp/x/y2‘
mkdir: created directory `/tmp/x/y2/a‘
mkdir: created directory `/tmp/x/y2/b‘
2、如何創建x_m、y_m、x_n、y_n
[root@localhost ~]# mkdir -v /tmp/{x,y}_{m,n}
mkdir: created directory `/tmp/x_m‘
mkdir: created directory `/tmp/x_n‘
mkdir: created directory `/tmp/y_m‘
mkdir: created directory `/tmp/y_n‘
3、如何創建/tmp/bin、/tmp/sbin、/tmp/usr、/tmp/usr/bin、/tmp/usr/sbin
[root@localhost ~]# mkdir -pv /tmp/{bin,sbin,usr/{bin,sbin}}
mkdir: created directory `/tmp/bin‘
mkdir: created directory `/tmp/sbin‘
mkdir: created directory `/tmp/usr‘
mkdir: created directory `/tmp/usr/bin‘
mkdir: created directory `/tmp/usr/sbin‘
文本文件查看類命令:
cat、tac
more、less、tail、head
more
more [option...] [file...]
-d:顯示翻頁及退出提示
+#:定位在第#行開始顯示
less
less [option...] [file...]
head
head [option...] [file...]
-c #:指定獲取前#字節
[root@localhost ~]# head -c 5 /tmp/passwd
root:
-n #:指定獲取前#行
[root@localhost ~]# head -n 3 /tmp/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
-#:指定獲取前#行
[root@localhost ~]# head -3 /tmp/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
tail
tail [option...] [file...]
-c #:指定獲取後#字節
[root@localhost ~]# tail -c 5 /tmp/passwd
tom.
-n #:指定獲取前#行
[root@localhost ~]# tail -n 3 /tmp/passwd
I am tom.
I am tom.
I am tom.
-#:指定獲取前#行
[root@localhost ~]# tail -3 /tmp/passwd
I am tom.
I am tom.
I am tom.
-f:跟蹤顯示文件新追加的內容;
文件的時間戳管理工具
touch
文件:metadata元數據,data數據
查看文件狀態:stat
[root@localhost ~]# stat /tmp/passwd
File: `/tmp/passwd‘
Size: 1580 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1336933 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-21 15:35:58.000000000 +0800
Modify: 2018-03-20 22:01:10.000000000 +0800
Change: 2018-03-20 21:58:31.000000000 +0800
三個時間戳:
access time:訪問時間,atime 讀取文件內容
modify time:修改時間,mtime 改變文件內容
changetime:改變時間,ctime 元數據發生改變
touch命令:
touch [option...] [file...]
-a:only atime
-m:only mtime
-t 具體時間 [[CC]YY]MMDDhhmm.ss
[root@localhost ~]# touch -a -t 201803211540.10 /tmp/passwd
[root@localhost ~]# touch -m -t 201803211541.10 /tmp/passwd
[root@localhost ~]# stat /tmp/passwd
File: `/tmp/passwd‘
Size: 1580 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1336933 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-21 15:40:10.000000000 +0800
Modify: 2018-03-21 15:41:10.000000000 +0800
Change: 2018-03-21 15:45:00.000000000 +0800
-c:如果文件不存在,則不予創建
Linux的文件系統、系統管理類命令、bash基礎特性