標準I/O和管道及文件系統結構

一部分:標準I/O和管道


1:Linux給程序提供三種I/O設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口

文件內容會被覆蓋
set –C 禁止將內容覆蓋已有文件,但可追加
| file 強制覆蓋
set +C 允許覆蓋
覆蓋要謹慎哦例如:
echo " " > /etc/rc.local 就會清空一般源碼安裝的自啓動。
實用技巧: 如果一個內容很大的文件刪除之前可以
echo " " > /file 這樣在刪除就能立刻釋放空間。

> 原有內容基礎上,追加內容

&> 所有的內容:配合/dev/null 在腳本中常用。
例如: for i in seq 1 3
do
useradd fang$i &>/dve/null
echo 123 | passwd --stdin fang$i &>/dev/null
done

★綜合:來個某公司的面試題:那一個選項的結果不同於其他三個。(B)
A app.sh > f1.log 2>&1
B app.sh 2>&1 > f1.log
C app.sh 2>f1.log 1>&2
D app.sh &>f1.log


2:tr 轉換和刪除字符 :
-d : cat /etc/centos-release | tr -d centos 刪除指定字符

★實例1:用tr命令計算1到100的和
echo {1..100} | tr ' ' '+' | bc

★實例2:計算1到100偶數的和
echo {1..100..2} | tr ' ' '+' | bc

★實例3:計算1到100奇數的和
echo {2..100..2} | tr ' ' '+' | bc

★實例4:將/root/下文件列表,顯示成一行,並文件名之間用空格隔開
ls -a /root | tr '\n' ' '

★實例4:處理字符串“xt.,l 1 jr#!$mn 2 c/fe 3 uz 4”,只保留其中的數字和空格
echo xt.,l 1 jr#4mn 2 c
/fe 3 uz 4 | tr -d ':punct:'

★實例5:將PATH變量每個目錄顯示在獨立的一行
echo $PATH | tr ':' '\n'

★實例6:將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立的一行,並無空行
cat /etc/centos-release | tr ' ' '\n' | tr -d '[:digit:][:space:]'


3: 管道:前一個命令的結果作爲後一個命令的標準輸入
echo 'hello world' | mail -s 'test' root


第二部分:文件系統與目錄結構


1:linux目標結構
文件和目錄被組織成一個單根倒置樹結構
文件系統從根目錄下開始,用“/”表示
根文件系統(rootfs):root filesystem
文件名稱區分大小寫
以.開頭的文件爲隱藏文件
路徑分隔的 /
文件有兩類數據:
元數據:metadata
數據:data
文件系統分層結構:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/


2:文件名規則
文件名最長255個字節 <驗證方法 touch 按着alt 然後輸入數字在輸入文件名>
包括路徑在內文件名稱最長4095個字節
藍色-->目錄 綠色-->可執行文件 紅色-->壓縮文件 淺藍色-->鏈接文
件 灰色-->其他文件
除了斜槓和NUL,所有字符都有效.但使用特殊字符的目錄名和文件不推薦使用,
有些字符需要用引號來引用它們。
標準Linux文件系統(如ext4),文件名稱大小寫敏感。例如:
MAIL, Mail, mail, mAiL


3:文件系統結構
/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,
grub)都存放於此目錄
/bin:供所有用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的
程序
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b: block device,隨機訪問
c: character device,線性訪問
/opt:第三方應用程序的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/usr: universal shared, read-only data
bin: 保證系統擁有完整功能而提供的應用程序
sbin:
lib:32位使用
lib64:只存在64位系統
include: C程序的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
local:第三方應用程序的安裝位置
bin, sbin, lib, lib64, etc, share

/var: variable data files
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local:專用於爲/usr/local下的應用程序存儲可變數據;
lock: 鎖文件
log: 日誌目錄及文件
opt: 專用於爲/opt下的應用程序存儲可變數據;
run: 運行中的進程相關數據,通常用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啓之間產生的臨時數據


4:Linux上的應用程序的組成部分
二進制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
庫文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
幫助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man,
/usr/local/share/doc


5:Linux下的文件類型
-:普通文件
d: 目錄文件
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 管道文件pipe
s: 套接字文件socket

★實例:查看/boot目錄下的anaconda-ks.cfg 並複製到/home目錄下

find /root -type f -name anaconda-ks.cfg -exec cp {} /home \;

6:顯示當前工作目錄
pwd: printing working directory
-P 顯示真實物理路徑
-L 顯示鏈接路徑(默認)

7:絕對和相對路徑
絕對路徑
以正斜槓開始
完整的文件的位置路徑
可用於任何想指定一個文件名的時候
相對路徑名
不以斜線開始
指定相對於當前工作目錄或某目錄的位置
可以作爲一個簡短的形式指定一個文件名
基名:basename
絕對路徑
以正斜槓開始
完整的文件的位置路徑
可用於任何想指定一個文件名的時候
相對路徑名
不以斜線開始
指定相對於當前工作目錄或某目錄的位置
可以作爲一個簡短的形式指定一個文件名

基名:basename
例:basename /etc/sysconfig/network-scripts/
目錄名:dirname
例:basename /etc/sysconfig/network-scripts/


8:cd 改變目錄
使用絕對或相對路徑:
cd /home/fang/
cd home/fang
切換至父目錄: cd ..
切換至當前用戶主目錄: cd
切換至以前的工作目錄: cd -
選項:-P
相關的環境變量:
PWD:當前目錄路徑
OLDPWD:上一次目錄路徑


9:列出目錄內容
列出當前目錄的內容或指定目錄
用法:ls [options] [files_or_dirs]
示例:
ls -a 包含隱藏文件
ls -l 顯示額外的信息
ls -R 目錄遞歸通過
ls -ld 目錄和符號鏈接信息
ls -1 文件分行顯示
ls –S 按從大到小排序
ls –t 按mtime排序
ls –u 配合-t選項,顯示並按atime從新到舊排序
ls –U 按目錄存放順序顯示
ls –X 按文件後綴排序


10:查看文件狀態
stat
文件:metadata, data
三個時間戳:
access time:訪問時間,atime,讀取文件內容
★ web服務器對於一些靜態關閉訪問時間可以提升服務器性能。
chattr +A 文件名

 modify time: 修改時間, mtime,改變文件內容(數據) 
 change time: 改變時間, ctime,元數據發生改變 

11:文件通配符
* 匹配零個或多個字符
? 匹配任何單個字符
~ 當前用戶家目錄
~- 前一個工作目錄
[0-9] 匹配數字範圍
[a-z]:字母
[A-Z]:字母
[fang] 匹配列表中的任何的一個字符
[^fang] 匹配列表中的所有字符以外的字符

[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母

[:alnum:]:任意數字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標點符號
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:圖形字符
[:xdigit:]:十六進制字符


12:文創建空文件和刷新時間
touch命令:
touch [OPTION]... FILE...
-a 僅改變 atime和ctime
-m 僅改變 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的時間戳
-c 如果文件不存在,則不予創建


13:複製文件和目錄cp
-i:覆蓋前提示 –n:不覆蓋,注意兩者順序
-r, -R: 遞歸複製目錄及內部的所有內容
-a: 歸檔,相當於-dR --preserv=all (常用)
-d:--no-dereference --preserv=links 不復制原文件,只複製鏈接名
--preserv[=ATTR_LIST]
mode: 權限
ownership: 屬主屬組
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose
-f: --force (常用)
-u:--update 只複製源比目標更新文件或目標不存在的文件
--backup=numbered 目標存在,覆蓋前先備份加數字後綴

SRC是文件:
如果目標不存在:新建DEST,並將SRC中內容填充至DEST中
如果目標存在:
如果DEST是文件:將SRC中的內容覆蓋至DEST中
基於安全,建議爲cp命令使用-i選項
如果DEST是目錄:在DEST下新建與原文件同名的文件,並將SRC中內容填充至新文件中

cp SRC DEST
SRC是目錄:此時使用選項:-r
如果DEST不存在:則創建指定目錄,複製SRC目錄中所有文件至DEST中;
如果DEST存在:
如果DEST是文件:報錯
如果DEST是目錄: 則複製SRC目錄中所有文件至DEST目錄下。
標準I/O和管道及文件系統結構


14:移動,重命和刪除文件
mv [OPTION]... -t DIRECTORY SOURCE...
常用選項:
-i: 交互式
-f: 強制

rm [OPTION]... FILE...
常用選項:
-i 交互式
-f 強制刪除 使用前先冷靜一下哦。
-r 遞歸


15:目錄操作
tree 顯示目錄樹
-d: 只顯示目錄
-L level:指定顯示的層級數目
-P pattern: 只顯示由指定pattern匹配到的路徑
mkdir 創建目錄
-p: 存在於不報錯,且可自動創建所需的各目錄
-v: 顯示詳細信息
-m MODE: 創建目錄時直接指定權限
rmdir 刪除空目錄
-p: 遞歸刪除父空目錄
-v: 顯示詳細信息
rm -r 遞歸刪除目錄樹


16:索引節點
 inode(index node)表中包含文件系統所有文件列表
一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包
括:
文件類型,權限,UID,GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
有關文件的其他數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章