linux學習記錄4

涉及 文件管理;標準I/O和管道;inode


ln   創建鏈接

-d 硬鏈接  相當於文件別名;多個名字 指向同一個inode

在選定位置新建一個文件名,顯示文件大小與源文件相同,但並沒有佔用磁盤空間

只增加了極少量inode數據;  A與B都指向硬盤數據block

-s 軟連接  相當於快捷方式;可以跨分區創建;!最好用絕對路徑創建

   ls -s  /SPATH(原始文件的絕對路徑,或相對路徑;相對於軟鏈接DPATH路徑) /DPATH

    會在你選定的位置上生成一個文件,保存了路徑信息;  A指向B的路徑

    不論是硬鏈結或軟鏈結都 不會將原本的文件數據複製一份,只會佔用非常少量的磁盤空間。

       硬鏈接數 = 名字數量




inode索引節點:儲存文件 元信息的區域

每個inode都有一個號碼,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。

 當使用rm刪除一個文件時,實際上是刪除了 指向該文件硬盤數據塊的inode信息

 

目錄(directory)也是一種文件;一個目錄是 目錄下的文件名和 文件inode號之間的映射

inode包含文件的元信息: 可用 stat FILENAME 查看

  * 文件的字節數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行權限

  * 文件的時間戳,共有三個:

ctime指inode上一次變動的時間;

mtime指文件內容上一次變動的時間;

atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

  * 文件數據block的位置


df -i查看每個硬盤分區的inode總數和已經使用的數量

ll -i   查看文件|目錄節點號

dumpe2fs -h /dev/sda# | grep "Inode size"  查看每個inode節點大小 #爲硬盤分區號

注意:

1. 不同分區 的文件可以出現 相同的節點號,每個分區有獨立的inode信息

2. 有時,文件名包含特殊字符,無法正常刪除。

       這時,利用find直接刪除inode節點,就能起到刪除文件的作用。

  例  find ./PATH -inum INODENUM -exec rm -i {} \;


3. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。

4. 打開一個文件以後,系統就以inode號碼來識別這個文件,不再考慮文件名。

因此通常來說,系統無法從inode號碼得知文件名。


***程序:指令+數據

讀入數據:Input

輸出數據:Output

打開的文件都有一個fd: file descriptor(文件描述符)

      /proc/pid/fd 進程所打開的所有文件


Linux給程序提供三種I/O設備

標準輸入(STDIN)-0默認接受來自鍵盤的輸入

標準輸出(STDOUT)-1默認輸出到當前終端窗口

標準錯誤(STDERR)-2默認輸出到終端窗口錯誤信息


I/O重定向:改變默認位置     ls > /dev/pts/0 重定向到另一個終端窗口

         STDOUT和STDERR可以被重定向到文件:

  命令 操作符號 文件名

操作符號

> 把STDOUT 重定向到文件[1]>

2>把STDERR 重定向到文件只會重定向錯誤的信息

&>把所有輸出重定向到文件

 例  ls /testdir /xxx  >r   2>e   把標準輸出 和標準錯誤 分別存放;

                            可能出現的 既有標準輸出也有標準錯誤情況

 


*>  重定向到已存在的文件,內容會覆蓋該文件

2>: 覆蓋重定向錯誤輸出數據流;

&>:覆蓋重定向所有輸出


 例#cat > filea

zhou

將用戶輸入信息保存至文件

        按ctrl+d離開

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

2>>: 追加重定向錯誤輸出數據流;

&>>:追加重定向所有輸出


*<  重定向標準輸入 

tr‘a-z’‘A-Z’</etc/issue  將/etc/issue中的小寫字符都轉換成大寫字符

使用文件來代替鍵盤的輸入

Cat > filea < fileb

 將fileb內容覆蓋重定向至filea

*使用“<<終止詞”命令從鍵盤把多行重導向給STDIN  就地文本

知道終止詞位置前的所有信息追加至STDIN

 終止詞通常爲EOF,可自定義,結束時必須爲單獨一行純粹終止詞

# set -C: 禁止將內容覆蓋已有文件,但可追加>>

 強制覆蓋:>| 刪除重建

# set +C: 允許覆蓋

    1.標準輸出和錯誤輸出各自定向 至不同位置:

COMMAND > /path/to/file.out 2> /path/to/error.out

2.合併 標準輸出和 錯誤輸出 至同一個文件:

COMMAND > /path/to/file.out2> &1

COMMAND >> /path/to/file.out2>> &1

 2>&1 把輸出信息中的 2標準錯誤 轉化爲 1標準輸出


3.不顯示錯誤信息    /dev/null接收所有數據

find/etc-namepasswd2>/dev/null


4.():合併多個程序的STDOUT

(pwd;ls)>/testdir/aa.log

(cal2007;cal2008)> all.txt




*tr[OPTION]... SET1 [SET2](translate)  轉換和刪除字符

-c或--complerment:      取 輸入 的補集

-d或--delete:           刪除 輸入字符裏的 SET1;

-s或-squeeze-repeats:   合併多個連續重複字符

-t或--truncate-set1:    先刪除第一字符集較第二字符集多出的字符

 tr    'abcd' 'xyz'   abcde  xyzze         !

 tr -t  'abcd' 'xyz'   abcde  xyzde         !


*|管道

將管道前命令的SDOUT 發送給管道後命令的STDIN

STDERR默認不能通過管道轉發,可利用2>&1 或|& 實現

最後一個命令會在當前shell進程的子shell進程


*tee可以同時將輸出信息 重定向至  管道|> 和標準輸出(終端屏幕)

保存不同階段的輸出

複雜管道的故障排除

同時查看和記錄輸出

ls|tee>list.txt


練習:

5、file1文件的內容爲:”1 2 3 4 5 6 7 8 9 10” 計算出所有數字的總和

tr ' ' '+'<file1|bc

55


6、處理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的數字和空格

echo 'xt.,l 1 jr#bcmn2 c*/fe3 uz4'|tr -d -c [[:digit:]" "]

 1 2 3 4


7、將PATH變量每個目錄顯示在獨立的一行

echo $PATH|tr ":" "\n"

/usr/lib64/qt-3.3/bin

/usr/local/sbin

/usr/local/bin

/sbin

/bin

/usr/sbin

/usr/bin

/root/bin


8、刪除指定文件的空行

cat crontab |tr -s "\n"


9、將文件中每個單詞(字母)顯示在獨立的一行,並無空行

cat crontab|tr -s " " "\n"  單詞


10、創建用戶gentoo,附加組爲bin和root,默認shell爲/bin/csh,註釋信息爲"Gentoo Distribution"

useradd gentoo -G bin,root -s shell -c "Gentoo Distribution"


11、創建下面的用戶、組和組成員關係

名字爲admins 的組

groupadd admins


用戶natasha,使用admins 作爲附屬組

useradd natasha -G admins


用戶harry,也使用admins 作爲附屬組

useradd harry -G admins


用戶sarah,不可交互登錄系統,且不是admins 的成員,natasha,harry,sarah密碼都是centos

useradd sarah

echo "centos"|passwd --stdin natasha

echo "centos"|passwd --stdin natasha

usermod -s /sbin/nologin sarah

或者usermod -L sarah 鎖定不讓登陸




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