日期: 2015年08月23日
Linux目錄結構
LSB(Linux StandardsBase)是一套核心標準,它保證了LINUX發行版同LINUX應用程序之間的良好結合規定了一系列標準,其中包括文件系統層級結構標準(FHS Filesystem Hierarchy Standard)
Linux系統根目錄下有衆多子目錄,這些目錄都參照了FHS協定
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
└── var
/bin: binary供用戶使用的基本命令;OS啓動即會用到的程序
/boot:存放系統啓動相關的文件,如內核、initrd,以及grub(bootloader)
/dev: 存放設備文件
塊設備:隨機訪問,數據塊
字符設備:線性訪問,按字符爲單位
設備號:主設備號(major)和次設備號(minor)
/etc: 配置文件的存放目錄;
/etc/sysconfig:系統級別的應用配置
/etc/init.d:系統服務腳本
/home:用戶的家目錄,每一個用戶的家目錄通常默認爲/home/USERNAME
/lib: 基本共享庫;內核模塊
/lib/modules:內核模塊文件
靜態庫, .a
動態庫, .dll, .so (shared object)
庫文件是不能單獨執行的,它因爲沒有程序的執行入口,只能被調用
/lib64: x86_64系統的庫文件
/Lost+Found:用來存放fsck過程中部分修復的文件的
/media:掛載點目錄,通常用於掛載移動設備
/mnt:掛載點目錄,通常用於掛載額外的臨時文件系統
/opt:可選目錄,第三方程序的安裝目錄(一般不用)
/proc:僞文件系統,內核參數映射文件(用於輸出內核與進程的相關信息)
/root:管理員的家目錄;
/sbin: 管理類的基本命令
/selinux:
/srv: services,系統上運行的服務用到的中間數據
/sys: 僞文件系統,輸出內核所識別的當前系統上硬件設備相關的屬性映射文件
/tmp:
/usr: Universal Shared Read-onlydata 全局共享的只讀數據(可獨立分區)
/usr/bin:
/usr/sbin:
/usr/lib:
/usr/lib64:
/usr/include:(應用程序的頭文件:header files)
/usr/share:結構化的獨立數據
doc, man(應用程序的幫助文檔)
/usr/local: 現在常用的第三方程序的安裝位置
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/local/lib64
/usr/local/etc
/usr/local/share
/var: variable date files(存放經常需要發生變化的數據)
/var/cache: 應用程序緩存數據
/var/lib: 應用程序的狀態信息數據
/var/local: 專用於爲/usr/local下的應用程序存儲可變數據
/var/lock: 鎖文件
/var/log: 日誌文件
/var/opt: 專用於/opt
/var/spool: 應用程序的數據池
/var/run: 運行中的進程的相關數據:通常用守護進程的pid文件
Linux的文件類型:
使用ls -l 命令列出目錄內文件時,排在每行第一列的第一個字符,表示該文件的類型
[root@CentOS-6tmp]# ll /usr
total124
dr-xr-xr-x. 2 root root 36864 Aug 23 10:15 bin
-: 普通文件
d: 目錄文件
b: 塊設備文件
c: 字符設備文件
l: 符號鏈接文件(類似快捷方式)
p: 命名管道文件
s: 套接字文件
<<===================================== 【BASH的基礎特性】=====================================>>
bash的基礎特性(一)
(1)命令歷史
bash保存的過去曾經執行過的命令的列表
當前shell進程的命令歷史保存在緩衝區中;
緩衝區中的命令會在shell退出時保存至文件中用戶家目錄 .bash_history
history快捷方式:
!#: #爲命令歷史列表中的命令編號;可用執行第#條命令;
!!: 執行上一條命令;
!-#: 執行命令歷史列表中的倒數第#條命令;
!string: 執行命令歷史列表中的最近一次以string開頭的命令;
!$: 引用上個命令的最後一個參數; ESC ——> .
history命令
-c: 清空列表
-d #: 刪除指定的歷史命令
-a: 追加當前會話的命令歷史至歷史文件中去;
-r:讀取歷史文件內容,並追加當前會話的命令歷史至歷史文件中去
-w:把當前會話的命令歷史追加到文件
命令歷史相關的環境變量:
HISTSIZE: 命令歷史中可以保存的命令的個數;
HISTFILE: 命令歷史文件;
HISTFILESIZE: 命令歷史文件可以保存的命令的個數;
HISTCONTROL: 控制命令歷史的生成;
ignoredups: 忽略記錄重複的命令;連續的相同命令才爲重複;
ignorespace: 不記錄以空白字符開頭的命令;
ignoreboth: 同時具有上面兩種特性;
(2)命令補全
在Linux系統中,輸入一個命令時如果不記得完整的命令,可先輸入該命令的前幾個字符,再按兩次TAB鍵,就會列出所有以輸入字符開頭的可用命令。
[root@CentOS-6 ~]# mkd // 此處敲兩次TAB鍵盤,顯示下列命令
mkdict mkdir mkdosfs mkdumprd
[root@CentOS-6 ~]# mkdi // 此處敲兩次TAB鍵盤,則顯示下列命令,逐漸縮小命中的範圍
mkdict mkdir
[root@CentOS-6 ~]#
bash的命令分爲兩類:
內部命令:系統內建的命令
外部命令:在系統某路徑下有一個可執行程序
★使用type命令可識別命令屬於哪類,使用 -a選項可以查找到該命令的可執行文件
[root@CentOS-6~]# type history
history is a shell builtin
[root@CentOS-6~]#
[root@CentOS-6~]# type -a ls
lsis aliased to `ls --color=auto'
ls is /bin/ls
[root@CentOS-6~]#
命令搜索機制:
PATH環境變量:由冒號分割的路徑,自左而右搜索
[root@CentOS-6 ~]# echo $PATH
/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
命令搜索並非每次都搜索PATH路徑,而是通過搜索hash以達到更高的效率。
hash:把此前搜索到的路徑緩存到內存中
kv: key-value
ls --> /bin/ls
[root@CentOS-6 ~]# hash
hits command
5 /bin/cat
1 /usr/bin/man
3 /bin/ls
8 /usr/bin/tree
3 /usr/bin/clear
(3)路徑補全
路徑補全:跟命令補全一樣的概念,當用戶輸入路徑名的開頭字符,連續敲TAB鍵,則會搜索指定字符串卡頭的目錄,並補全路徑。
如果該路徑名是唯一:直接補全
否則:兩次TAB,可列出
(4)命令行展開的功能
bash命令行展開能夠把一個特殊字符換成別的字符
~ 展開爲當前用戶的主目錄
~USERNAME 展開爲指定用戶的家目錄
{,} 可承載一個以逗號分割的列表,並其展開爲多個路徑
例如:
/var/{log,cache,run} = /var/log /var/cache /var/run
[root@CentOS-6 tmp]# mkdir -pv x/{a,b}_{c,d}
mkdir: created directory `x'
mkdir: created directory `x/a_c'
mkdir: created directory `x/a_d'
mkdir: created directory `x/b_c'
mkdir: created directory `x/b_d'
[root@CentOS-6 tmp]#
(5)命令的執行狀態結果,由bash追蹤和保存
命令的執行結果有兩種:
命令執行結果的返回值
命令執行後的狀態返回值
bash使用特殊變量$? 保存最近一條命令的狀態結果,可使用 echo $? 顯示
bash:每個命令,狀態返回值。
成功:0
失敗:1-255,(其中1、2、127被系統保留)
$?:
實例:
[root@CentOS-6 tmp]#
[root@CentOS-6 tmp]# ls /usr
bin etc games include lib lib64 libexec local sbin share src tmp
//以上爲命令執行結果的返回值
[root@CentOS-6 tmp]# echo $?
0 //此爲命令執行後的狀態返回值,數值0表示命令執行成功
[root@CentOS-6 tmp]#
[root@CentOS-6 tmp]# ls /usrr
ls: cannot access /usrr: Nosuch file or directory
//以上是故意輸錯目錄名,所以命令執行失敗
[root@CentOS-6 tmp]#
[root@CentOS-6 tmp]# echo $?
2 //此爲命令執行後的狀態返回值,數值2表示命令執行失敗
[root@CentOS-6 tmp]#
(6)命令別名
命令別名:命令的另一個引用符號,由bash程序維護
直接輸入alias可顯示當前系統上所有已定義的命令別名
定義別名:alias 別名=‘原始命令’
例如:alias cls='clear'
取消定義的別名:unalias 別名
例如:unalias cls
★如果別名同原命令名:想直接執行原命令,則需在命令前加\,表示使用命令本身,而不是別名
★~/.bashrc#如果要使指定的別名永久生效,則修改此文件,把命令別名添加爲此文件內容。
bash的基礎特性(二)
(1)globing
bash中的文件名通配
通配符:
*:匹配任意長度的任意字符
?:匹配任意單個字符
[^] #(脫字符)匹配指定範圍之外的任意單個字符
[]:匹配指定字符範圍內的任意單個字符,不區分大小寫
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:] 空白字符
[:punct:] 標點符號
[:lower:] 小寫字母
[:upper:] 大寫字母
[:alpha:] 大小寫字母
[:digit:] 數字
[:alnum:] 數字和大小寫字母
# man 7 glob 查看globing幫助手冊
(2)組合鍵
bash中有衆多的快捷鍵,熟練掌握它們將會提高工作效率
光標跳轉:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+f:光標往前跳一個字符
Ctrl+b:光標往後跳一個字符
刪除OR粘貼:
Ctrl+d:刪除光標所在字符
Ctrl+u: 剪切光標至命令行首的內容
Ctrl+k: 剪切光標至命令行尾的內容
Ctrl+y:粘貼所剪切的內容
Ctrl+l #清屏
Ctrl+c #終止命令
Ctrl+z #暫停命令(把進程放在後臺運行)
輸入jobs 查看後臺運行命令
輸入fg 回到前臺運行
Ctrl+r #搜索歷史
(3)IO重定向和管道
輸入輸出重定向
I/O: 設備, 寄存器
INPUT:標準輸入:stdin, 0
OUPUT:標準輸出:stdout, 1
標準錯誤:stderr,2
輸入重定向:<,<<
<: 輸入重定向(基本用不上,以下命令 < 都可省略)
cat < /etc/passwd
tr 'a-z' 'A-Z' < /etc/passwd
<< EOF: 此處創建文件, Here Document
常用於在腳本中創建文件或生成菜單;
#!/bin/bash
#
cat > /tmp.menu.txt << EOF
a: a is asshole
b: b is bastard
c: c is cadger
d: d is damn
EOF
輸出重定向:>,>>
>: 覆蓋輸出
>>: 追加輸出
set -C:禁止使用覆蓋重定向至已經存在的文件;
set +C: 關閉上述特性;
>|:在-C特性下,強制使用覆蓋重定向;
/dev/null: bit bucket,位桶
錯誤重定向:2>,2>>
2>: 覆蓋
2>>: 追加
同時重定標準輸出和錯誤輸出:
COMMAND > /path/to/outfile 2> /path/to/errfile
重定向標準輸出或錯誤輸出至同一個文件
COMMAND &> /path/to/somefile
COMMAND > /path/to/somefile 2>&1
管道
管道:把一個命令的執行結果傳遞給下一條命令,作爲下一條命令的參數
COMMAND1 | COMMAND2 | COMMAND3 | ...
不能在管道中傳遞變量,尤其不能在前面的命令中生成變量
tee的用法:
cat /etc/rc.d/rc.sysinit | tee /tmp/a.out | wc -l
分叉輸出:tee,命令不會處理,會送到下一個管道