硬軟鏈接的區別 節點 以及重定向和管道

INODE全稱叫index node


表中包含文件系統所有文件列表  

一個節點是在一個表項 包含有關文件的信息 ( 元數據 )

包括: 文件類型,權限,UID,GID 鏈接數(指向這個文件名路徑名稱個數) 該文件的大小和不同的時間戳 指向磁盤上文件的數據塊指針 有關文件的其他數


1 文件引用一個是 inode號  

2 我們是通過文件名來引用一個文件  

3 一個目錄是目錄下的文件名和文件inode號之間的映射


由于 inode 找數據是不斷地 創建新的節點 所以他的節點創建有局限性 而他的最大數量可為 1T


而之前我們所學的 cp mv rm 等命令 都可以用 inode來解釋 例如


rm 命令 刪除


rm 命令相當于鏈接數遞減 從而釋放的inode號可以被重用 把數據塊放在空閑列表中 刪除目錄項 數據實際上不會馬上被刪除 但當另一個文件使用數據塊 時將被覆蓋



硬鏈接 


  1 創建硬鏈接會增加額外的記錄項以引用文件  

  2 對應于同一文件系統上一個物理文件  

  3 每個目錄引用相同的inode號  

  4 創建時鏈接數遞增  

  5 刪除文件時 rm命令遞減計數的鏈接 文件要存在

  6 至少有一個鏈接數 當鏈接數為零時 該文件被刪除  

  7 硬鏈接不能跨越驅動器或分區 指向

  8 硬鏈接與硬連接之間 指向同一個文件 地位 等同

    語法 ln filename  [linkname ]



軟鏈接也稱符號鏈接


  1 一個符號鏈接指向另一個文件

  2 ls – l的 顯示鏈接的名稱和引用的文件  

  3 一個符號鏈接的內容是它引用文件的名稱  

  4 可以對目錄進行 可以跨分區 指向的是另一個文件的路徑

  5 其大小為指向的路徑字符串的 長度 不增加或減少目標文件inode的引用計數

  7 軟鏈接可以對應多個文件 但這些文件 都不相同  

    語法 ln   -s  filename  [linkname]



硬鏈接和軟連接之間的區別 


 硬鏈接是相對于同一文件系統上的物理文件 可以有多個別名 但只有一個文件 而軟連接可以指向多個文件雖然文件不同 但 軟鏈接可以跨區 指向 創建硬連接時需要占用節點 而軟連接則直接指向路徑字符串 不增加或減少節點 

 

硬軟連接的簡單 演示 硬盤 到 系統上的文件 到 硬鏈接 再到 軟鏈接



重定向 標準輸入輸出 和管道 


標準輸入輸出簡稱 IO


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

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

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

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


程序:指令+數據 讀入數據 Input 輸出數據 Output  

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


 

 I/O重定向就是 改變默認位置


把輸出和錯誤重新定向到文件


下面是重定向的一些命令

1  > 把STDOUT重定向到文件 

2  2> 把STDERR重定向到文件 

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

4  > 文件內容會被覆蓋 

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

6  強制覆蓋 >| 

7  # set +C  允許覆蓋

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


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

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

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

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

13  合并標準輸出和錯誤輸出為同一個數據流進行重定向: 

14  &>:覆蓋重定向 &>> 追加重定向 

15  COMMAND > /path/to/file.out 2> &1 (順序很重要) 

16  COMMAND >> /path/to/file.out 2>> &1 find /etc -name passwd 2> /dev/null  

17  () 合并多個程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt


重定向 屬于將數據流 導入或導出 一般和管道符使用 最佳


tr命令


tr – 轉換和刪除字符 

  tr [OPTION]… SET1 [SET2] 選項 

  -c或——complermen 取字符集的補集 

  -d或——delete 刪除所有屬于第一字符集的字符 

  -s或—squeeze-repeats 把連續重復的字符以單獨一個字符 表示 

  -t或–truncate-set1 將第一個字符集對應字符轉化為第二 字符集對應的字符


管道


管道(使用符號“|”表示)用來連接命令 

例如命令1 | 命令2 | 命令3 | … 將命令1的STDOUT發送給命令2的STDIN 命令2的 STDOUT發送到命令3的STDIN STDERR默認不能通過管道轉發 可利用2>&1 或 |& 實現 最后一個命令會在當前shell進程的子shell進程中執行用來 組合多種工具的功能 ls  | tr 'a-z' 'A-Z'


管道是在 shell 腳本中連接 命令 字符 文件 的最佳 粘合劑 

通過管道 我們可以把一些單一的命令組織起來 完成一項復雜的任務


例如 重定向到多個目標


$命令1 | tee 文件名 | 命令2 把命令1的STDOUT保存在文件名中,然后管道輸入給命令2 使用   保存不同階段的輸出 復雜管道的故障排除 同時查看和記錄輸出

相關練習:

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

    

    echo $[1+2+3+4+5+6+7+8+9+10]

    echo "1+2+3+4+5+6+7+8+9+10" | bc


電腦演示

[root@localhost Desktop]# echo $[1+2+3+4+5+6+7+8+9+10]

55

[root@localhost Desktop]#  echo "1+2+3+4+5+6+7+8+9+10" | bc

55

[root@localhost Desktop]# 



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

     echo "xt.,l 1 jr#!$mn2 c*/fe3 uz4" | tr -d "xt.,ljr#!$mnc*/feuz"


電腦演示

[root@localhost Desktop]#  echo "xt.,l 1 jr#!$mn2 c*/fe3 uz4" | tr -d "xt.,ljr#!$mnc*/feuz"

 echo "xt.,l 1 jr#bcmn2 c*/fe3 uz4" | tr -d "xt.,ljr#bcmnc*/feuz"

 1 2 3 4

[root@localhost Desktop]# 


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

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


電腦演示

[root@localhost Desktop]#   echo $PATH | tr ":" "\n"

/usr/lib64/qt-3.3/bin

/usr/local/sbin

/usr/sbin

/sbin

/usr/local/bin

/usr/bin

/bin

/root/bin

[root@localhost Desktop]# 


4、刪除指定文件的空行

     cat /root/install.log | tr -s "\n"【利用-s的循環】


電腦演示


[root@localhost Desktop]#  cat /root/install.log | tr -s "\n"

{

333

anaconda-ks.cfg

Desktop

Documents

Downloads

f1

f22

f99

f[a,b,c,d,e,f]

history.log

install.log

install.log.syslog

Music

nusers

Pictures

Public

Templates

Videos

[root@localhost Desktop]# 


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

     cat /root/install.log | tr " " "\n" | tr -s "\n"


電腦演示


[root@localhost Desktop]#  cat /root/install.log | tr " " "\n" | tr -s "\n"

{

333

anaconda-ks.cfg

Desktop

Documents

Downloads

f1

f22

f99

f[a,b,c,d,e,f]

history.log

install.log

install.log.syslog

Music

nusers

Pictures

Public

Templates

Videos


6、創建用戶tiantian,附加組為bin和root,默認shell為/bin/csh,注釋信息為"Tiantian Distribution"

     useradd -G bin,root -s /bin/csh -c "Tiantian Distribution" tiantian


電腦演示


[root@localhost Desktop]#   useradd -G bin,root -s /bin/csh -c "Tiantian Distribution" tiantian


rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

abrt:x:173:173::/etc/abrt:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

tianya:x:500:500:tianya:/home/tianya:/bin/bash

gentoo:x:501:501:Gentoo Disttibuution:/home/gentoo:/bin/csh

tian:x:502:502::/home/tian:/bin/bash

tiantian:x:503:503:Tiantian Distribution:/home/tiantian:/bin/csh

[root@localhost Desktop]# ^C

[root@localhost Desktop]# 




7、創建下面的用戶、組和組成員關系

名字為admins 的組

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

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

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

  

  1 #!/bin/bash

  2 groupadd admins

  3 useradd -G admins natasha

  4 useradd -G admins harry

  5 useradd -s /sbin/nologoin sarah

  6 echo "centos" | passwd –stdin natasha

  7 echo "centos" | passwd –stdin harry

  8 echo "centos" | passwd –stdin sarah


電腦演示


[root@localhost Desktop]# nano f1.xt

[root@localhost Desktop]# cat f1.xt

#!/bin/bash

   groupadd admins

   useradd -G admins natasha

   useradd -G admins harry

   useradd -s /sbin/nologoin sarah

   echo "centos" | passwd –stdin natasha

   echo "centos" | passwd –stdin harry

   echo "centos" | passwd –stdin


原創文章,作者:a1215276209,如若轉載,請注明出處:http://www.www58058.com/33227

(0)
a1215276209a1215276209
上一篇 2016-08-12 09:02
下一篇 2016-08-12 09:02

相關推薦

  • 關于軟件包管理

            軟件包管理 CentOS系統上使用rpm命令管理程序包 安裝、卸載、升級、查詢、檢驗、數據庫維護 rpm安裝:         rpm {-i|–install} [安裝-選項] 打包;包         -h …

    系統運維 2016-08-30
  • Windows 10 VS. Linux

    原文出處: Linux中國 – zpl1025   前陣子 Windows 10 好像占據了絕大部分頭條,甚至在一些Linux圈里也是一樣。最具代表性的是 betanews.com 的 Brian Fagioli 說 Windows 10 已經為 Linux 桌面系統敲響了喪鐘,Microsoft 如今宣布將為忠實的…

    系統運維 2015-03-24
  • 關于rpm及yum的一些感想

    rpm -ivh PACKAGE_FILE  注意: (1) 不要對內核做升級操作;Linux支持多內核版本并存,因此 ,對直接安裝新版本內核 v rpm {-q嚴格–query} [select-options] [query-options] v [se…

    Linux干貨 2016-08-24
  • 馬哥教育網絡班22期-第4周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@zck ~]# cp -r /etc/skel /home/tuser1 [root@zck ~]# ll -d /hom…

    Linux干貨 2016-09-02
  • 網絡接口bonding的設置

    網絡接口bonding的設置 一、什么是Bond 就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。 二、Bonding的工作模式 Bond有七種策略模式(mode),其實指的是在傳輸數據包的時候,如何從已經…

    Linux干貨 2016-09-06
  • yum –rpm前端工具詳解

     1、yum 介紹        YUM: Yellowdog Update Modifier, rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具        &nbsp…

    Linux干貨 2016-08-24
欧美性久久久久