linux文件系统及bash基础特性
linux文件系統
? ? 一、根文件系統
linux被識別的第一個被稱為根之間關聯的文件系統叫做根文件系統(rootfs),其他分區要想被讀到,需要掛載到根目錄的某個掛載點(根的子目錄)上。根文件系統至關重要,整個文件系統統一訪問入口。
Linux引導啟動時,默認使用的文件系統是根文件系統。其中一般都包括這樣一些子目錄:
/boot 系統引導文件存放目錄
/bin 供所有用戶使用的命令(不能關聯到獨立分支)不能關聯到獨立分區,os啟動即會用到的程序。
/sbin 管理員使用特權命令。root-only使用的命令。不能關聯到獨立分區,os啟動即會用到的程序。
/lib 基本共享庫文件(啟動就需要的庫文件),以及內核模塊文件。
/lib64 專用于64位系統上的輔助庫文件
/etc 配置文件目錄(大多純文本文件)
? ? (1)/etc/opt 為opt啟動文件存放配置目錄
? ? (2)/etc/sgml?/etc/xml兩種標記語言。
/home用戶主目錄約定俗成在/home/username(普通用戶)管理員家目錄就是/root
/media 掛載光盤u盤等設備
/mnt ?掛載臨時文件系統
/dev 設備文件目錄(特殊文件)
? ? b block device(可隨機訪問設備,三個電影,想看那個隨機點那個都可以) ?c character device(縣信訪設備,按順序訪問)
/opt 附件,第三方應用程序安裝目錄系統安裝完,額外安裝的其他程序
/srv 當前系統某些服務程序運行時,使用的中間數據。
/tmp 臨時文件存放位置
注:除了/boot和/home是不能關聯到獨立分區的,必須在根上
/usr 獨立分區上的目錄(全局共享只讀數據)注:這可不是user的簡寫呦(擁有獨立的文件系統結構)
(1)/usr/bin 所有程序可使用
? ? (2)/usr/sbin 管理員使用
?
? ? ? 他的配置文件還是在/etc下
? ? ? ?include,c語言頭文件的標準庫(頭文件是描述庫文件打開調用接口方式的)
? ? (3)/usr/share只讀的 ,結構化獨立數據
? ? (4)/usr/local第三方應用程序安裝位置
/var 通常獨立分區,可變數據文件
其中cache:應用程序緩存數據目錄
lib 可變狀態信息數據 local:專用于為/usr/local下應用程序存儲可變數據 lock 鎖文件 log 日志目錄及文件 opt?專用于為/opt下應用程序存儲可變數據 run 運行中進程的相關數據,通常用于存儲進程中的pid spool應用程序緩沖池 tmp 系統重啟過程中的臨時文件 /proc 用于輸出內核,進程相關的虛擬文件系統, /sys 輸出當前系統上硬件設備相關信息的虛擬文件系統 /selinux selinux相關安全策略等信息的存儲位置 二、linux下的文件類型 -(f)普通文件 d目錄文件(存放的是路徑信息,找到目錄下的信息的路徑信息,文件名到文件的路徑信息) b塊設備文件,l軟連接文件,c字符設備,p管道文件,s套接字文件(訪問現有系統的一個專用接口) 三、系統管理類命令 關機或重啟命令: (1)halt,halt調用shutdown來關機,-f選項就是不調用shutdown強制關機,不建議使用 (2)shutdown,shutdown ?[option...] ?time ?[message...] -r 重啟;-h關閉并清電源;-c取消關機選項; time:now:立刻 +m:相對時間表示法,從命令提交后開始計算。 hh:mm:給定具體時間。 (3)power off,關機。 (4)init 0:關機;init6 重啟。 (5)reboot;重啟。 用戶登錄信息查看命令: (1)whoami:顯示當前登錄的用戶; (2)who:當前所有登錄會話; (3)w:系統當前所有登錄會話和操作。常用管理命令
1.使用pwd和cd命令來確定和切換目錄
[root@localhost ~]# pwd /root [root@localhost ~]# cd / [root@localhost /]# pwd / [root@localhost /]# pwd / [root@localhost /]# cd [root@localhost ~]# cd2.使用ls命令列出目錄中的內容
-a 顯示所有的文件,包括隱藏文件,.開頭的為隱藏文件
-all 顯示所有文件的詳細信息,
-l 顯示文件詳細信息,不包括隱藏文件
[root@localhost ~]# ls -a . anaconda-ks.cfg .bash_logout .bashrc .lesshst Python-3.6.1 .tcshrc .. .bash_history .bash_profile .cshrc .pki Python-3.6.1.tgz .viminfo [root@localhost ~]# ls -all total 22084 dr-xr-x---. 4 root root 223 Aug 28 03:04 . dr-xr-xr-x. 22 root root 4096 Jul 23 06:59 .. -rw-------. 1 root root 1669 May 13 10:16 anaconda-ks.cfg -rw-------. 1 root root 19956 Jul 24 11:01 .bash_history -rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout -rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile -rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc -rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc -rw-------. 1 root root 35 May 15 10:53 .lesshst drwxr----- 3 root root 19 May 25 09:38 .pki drwxr-xr-x 18 501 501 4096 Jun 12 09:15 Python-3.6.1 -rw-r--r-- 1 root root 22540566 May 23 11:21 Python-3.6.1.tgz -rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc -rw------- 1 root root 9062 Aug 28 03:04 .viminfo [root@localhost ~]# ls -l total 22024 -rw-------. 1 root root 1669 May 13 10:16 anaconda-ks.cfg drwxr-xr-x 18 501 501 4096 Jun 12 09:15 Python-3.6.1 -rw-r--r-- 1 root root 22540566 May 23 11:21 Python-3.6.1.tgz3.使用cp命令復制文件和目錄
cp -r 遞歸復制
cp -p 保留原文件的用戶權限
[root@localhost /]# cp a.txt /tmp/ [root@localhost /]# ls /tmp/ a.txt etc.conf etc.test maxusers.txt test.txt [root@localhost /]# cp -r /dj /tmp/ [root@localhost /]# ls /tmp/ a.txt dj etc.conf etc.test maxusers.txt test.txt [root@localhost /]# cp -rpf /dj /tmp/ [root@localhost /]# ls /tmp/ a.txt dj etc.conf etc.test maxusers.txt test.txt4.使用mv命令移動及修改文件和目錄名?
[root@localhost /]# mv a.txt b.t [root@localhost /]# ls bin b.t dj home lib64 mnt oo Packages root sbin sys tt var boot dev etc lib media mylinux opt proc run srv tmp usr [root@localhost /]# mv b.t /tmp/ [root@localhost /]# ls /tmp/ a.txt b.t dj etc.conf etc.test maxusers.txt test.txt5.使用mkdir命令創建目錄?
[root@localhost /]# mkdir -p /a/b/c/d [root@localhost /]# ls /a/b/c/ d? ? [root@localhost /]# mkdir -p /tmp/a/b/c/d
? ? [root@localhost /]# ls /tmp/
? ? a a.txt b.t dj etc.conf etc.test maxusers.txt test.txt
6.使用touch命令創建文件
[root@localhost /]# touch a.txt [root@localhost /]# ls a bin dev etc lib media mylinux opt proc run srv tmp usr a.txt boot dj home lib64 mnt oo Packages root sbin sys tt var7.使用rm命令刪除文件
[root@localhost /]# rm -rf a.txt?
bash的基礎特性:
一、命令歷史
history;history的環境變量:
(1)HISTSIZE:命令歷史的條數;
[root@localhost ~]# echo $HISTSIZE 1000(2)HISTFILE:持久保存命令歷史的文件,當退出登錄的時候,此次的命令歷史才會被寫入到HISTFILE中
[root@localhost ~]# echo $HISTFILE /root/.bash_history命令歷史存在~/.bash_history里。
(3)HISTFILESIZE:命令歷史文件記錄的歷史條數。
[root@localhost ~]# echo $HISTFILESIZE 1000二、history常用命令用法 ?
-c:清空命令歷史 ?
-d offset:刪除指定命令歷史,offset為指定的行數 ?
-r:從文件讀取命令歷史至歷史列表中 ?
-w:把歷史列表中的命令追加至歷史文件中 ?
history #:顯示最近的#條命令
-a:手動追加當前會話緩沖區的命令歷史至歷史文件中
調用命令歷史列表中的命令:
!#:再次執行歷史列表中第#條命令
!!:再一次執行上一條命令
!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令
調用上一條最后一個參數方法:!$;ESC,.;ALT+.。
控制命令歷史的記錄方式:環境變量:HISTCONTROL;
ignoredups:忽略重復命令,連續且相同才算重復。
ignorespace:忽略以空白開頭的命令。
ignoreboth:以上兩者皆忽略。
修改環境變量值得方式為export 變量名=‘值’;變量賦值就是把賦值符號后面的數據存儲于變量名指向內存空間。
三、命令、路徑補全
命令補全:
shell程序在接受到用戶執行命令的請求時,最左側的字符串會被當做命令
命令查找機制:根據PATH環境變量中設定的目錄($PATH),自左而右逐個搜索目錄下的文件名
按Tab可直接補全命令,若給定字符開頭的命令不唯一,再次Tab給出以給定字符作為開頭的文件列表
路徑補全:?在給定的起始路徑下,以對應路徑下的打頭字符串來逐一匹配起始路徑下每個文件
四、命令行展開
~:展開為用戶家目錄;
~username:展開為指定用戶的家目錄
{}:展開為多個路徑。例:/tmp/{a,b} = /tmp/a,/tmp/b;/tmp/{a,b}/{c,d} =/tmp/a/c,/tmp/a/d,/tmp/b/c,/tmp/b/d。
五、命令的執行結果
命令執行的狀態結果有兩種:成功(0),失敗(1-255),可用$?查看最近一條命令的執行狀態結果。
程序執行有兩類結果:程序返回值和程序執行狀態結果。
六、命令別名(alias)
alias:顯示當前shell進程所有可用別名。
[root@localhost tmp]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'alias name=‘value’:定義別名,使用alias相當于執行value。
注:在命令行定義別名,僅對當前shell有效,永久有效需要定義在配置文件中。
對當前用戶:~/.bashrc
對所有用戶:/etc/bashrc
并且編輯配置不會立即生效。
撤銷別名(unalias)
七、glob(bash中用于實現文件通配)
通配符:*,?,[]
*任意長度的任意字符
?任意單個字符
[]匹配指定范圍的單個字符[0-9],[a-z]:所有字母,不區分大小寫[A-Z]:大寫字母
[^]取反
專用字符集:
?[[:upper:]]:所有大寫字母
? ? ?[[:lower:]]:所有小寫字母
? ? ?[[:alpha:]]:所有字母
? ? [[:digit:]]:所有數字
? ? [[:alnum:]]:所有的字母和數字
? ? [[:space:]]:所有空白字符
? ? [[:punct:]]:所有標點符號
八、bash的I/O重定向及管道
打開文件都有一個fd:file descriptor(文件描述)
標準輸入:0
標準輸出:1
錯誤輸出:2
I/O重定向就是改變標準位置。
輸出重定向:
> ? ?覆蓋輸出
>> ? ?追加輸出
set -C:禁止覆蓋輸出重定向至已存在的文件
set +C:開啟覆蓋輸出重定向至已存在的文件(默認)
錯誤輸出重定向:
2> ? ?覆蓋輸出
2>> ? ?追加輸出
合并正常輸出流和錯誤輸出流
&> ? ?覆蓋輸出
&>> ? ?追加輸出
COMMADN > /PATH/TO/somefile ?2>&1 :如果命令執行成功則覆蓋輸出至somefile,執行不成功也覆蓋輸出至somefile
COMMAND >> /PATH/TO/somefile 2>&1:如果命令執行成功則追加覆蓋至somefile,執行不成功也追加輸出至somefile
注:特殊設備:當不需要命令的執行結果,只需要知道命令的執行狀態,則可以重定向至/dev/null,/dev/null相當于一個垃圾桶。
輸入重定向:<
Here Document:<<,可以作為指定文件的結束符,常用于shell編程
[root@localhost tmp]# cat <<EOF > how are you > EOF how are youtr [OPTION]... SET1 [SET2]
把輸入的數據當中的字符,凡是在SET1定義范圍內出現的,通通對位轉換為SET2出現的字符,不修改原文件
tr -d SET1 ?< ?/PATH/FROM/SOMEFILE ? ? 刪除SET1中的字符,區分大小寫
管道
連接程序,最后一個命令會在當前shell進程的子進程中執行。
COMMAND1 | COMMAND2 | COMMAND3 ...
[root@localhost tmp]# echo 'abcdefg' | tr 'a-z' 'A-Z' | tr -d 'AD' BCEFGtee
顯示程序的輸出并將其復制到一個或多個文件中。
目錄管理類命令
一、mkdir
make directories 創建目錄
mkdir [OPTION]... DIRECTORY...
常用選項:
-p:存在不報錯,逐級生成目錄;
-v:顯示詳細信息;
-m:mode,創建目錄時直接指定權限。
mkdir一次可創建多個目錄:
[root@localhost tmp]# mkdir -v {a,b}/{c,d} mkdir: cannot create directory ‘a/c’: No such file or directory mkdir: cannot create directory ‘a/d’: No such file or directory mkdir: cannot create directory ‘b/c’: No such file or directory mkdir: cannot create directory ‘b/d’: No such file or directory[root@localhost ~]# mkdir -p /mylinux/{bin,boot/grub,dev,etc/{rd.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} [root@localhost ~]# tree /mylinux /mylinux ├── bin ├── boot │?? └── grub ├── dev ├── etc │?? ├── rd.d │?? │?? └── init.d │?? └── sysconfig │?? └── network-scripts ├── lib │?? └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │?? └── local │?? ├── bin │?? └── sbin └── var├── lock├── log└── run
?
二、rmdir
remove empty direcories
移除空目錄
常用選項:
-p:刪除某目錄后,如果其父目錄為空,則一并刪除之
-v:顯示過程
[root@localhost b]# rmdir -pv /tmp/a/b/c/ rmdir: removing directory, ‘/tmp/a/b/c/’ rmdir: removing directory, ‘/tmp/a/b’ rmdir: removing directory, ‘/tmp/a’ rmdir: removing directory, ‘/tmp’ rmdir: failed to remove directory ‘/tmp’: Device or resource busy三、tree:
-d:只顯示目錄
-L:level:指定顯示的層級數目
-P:pattern只顯示由指定pattern匹配到的路徑。
快捷操作
ctrl+a:跳轉至命令行行首
ctrl+e:跳轉至命令行行尾
ctrl+u:刪除行首至光標所在處之間的所有字符
ctrl+k:刪除光標所在處至行尾的所有字符
ctrl+l:清屏,相當于clear
文本文件查看類命令
cat
cat [OPTION]... [FILE]...
查看文件內容,直接顯示到文件底部
常用選項:
-n:可以顯示行數;
tac與cat類似,可反向查看文件內容
head
與cat類似,常用選項:
-c #:指定獲取前#字節;
-n # / -#:指定獲取前#行。
tail
與head相似,除了-c與-n以外,-f可跟蹤顯示文件新追加的內容。
文件的時間戳管理工具:
一、stat
display file or file system status
文件:兩類數據
元數據:metadata,文件的狀態,創建時間,修改時間,大小,權限等
數據:文件里面的內容
stat顯示的就是文件的元數據,包含文件路徑,大小,blocks數目,IO block,文件類型,inode號,權限,uid,gid和三個時間戳等
三個時間戳:
access:最近一次訪問的時間,即atime
modify:最近一次修改文件的時間,即mtime
change:文件最近一次改變的時間,即改變元數據的時間即ctime
二、touch
change file timestamps ?修改時間戳
touch [OPTION]... FILE...
文件不存在則創建文件,當直接使用命令去touch一個文件的時候,修改的是所有的時間戳
常用選項:
-c:指定的文件路徑不存在時不予以創建
-a:僅修改access time
-m:僅修改modify time
-t ? STAMP
? ? ? ?[[CC]YY]MMDDhhmm[.ss]
文件管理工具
一、cp
復制文件或者目錄
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是文件
如果DEST不存在,則先創建DEST,并復制源文件的數據流至DEST文件中
如果DEST存在:DEST是非目錄文件,則覆蓋DEST文件
DEST是目錄文件,則在DEST目錄下創建一個與源文件同名的文件,并復制其數據
SRC是多個文件時: DEST必須存在,且為目錄,否則就會報錯。 SRC是目錄: DEST不存在,則創建指定目錄,復制SRC目錄中所有文件至DEST。 DEST存在,DEST是文件,報錯,DEST是目錄分別復制每個文件至目標目錄中,并保持原名。常用選項:
-i:交互式復制
-f:強制覆蓋目標文件
-r,-R:遞歸復制目錄
-d:復制符號鏈接文件本身,而非指向的源文件
-a:-dR --preserve=all, archive,用于實現歸檔;
--preserv[=ATTR_LIST]? ? ? ?
mode:權限??
ownership:屬主和屬組
?? ? ?? timestamps: 時間戳
?? ? ?? context:安全標簽
?? ? ?? xattr:擴展屬性
?? ? ?? links:符號鏈接
?? ? ?? all:上述所有屬性
二、mv
移動文件,可用來重命名文件
? ? ? ?mv [OPTION]... [-T] SOURCE DEST
? ? ? ?mv [OPTION]... SOURCE... DIRECTORY
? ? ? ?mv [OPTION]... -t DIRECTORY SOURCE...
常用選項:
-i:交互式
-f:強制覆蓋文件
三、rm
移除文件
rm [OPTION]... FILE...
常用選項:
-i:交互式移除文件
-f:強制刪除文件
-r:遞歸刪除
注:所有不用的文件建議不要直接刪除,可以移動至某個專用的目錄(用來做回收站的目錄)
注:還有個無敵bug,rm-rf /*。
?
轉載于:https://www.cnblogs.com/Jeffding/p/7192418.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux文件系统及bash基础特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LTDC/DMA2D—液晶显示
- 下一篇: Mac/Linux/Centos终端中上