linux 基本操做筆記

 
 
linux文件系統的實現
linux有一個樹狀結構來組織文件,數的頂端爲根目錄/,節點爲目錄,而末節點爲所包含的數據文件。咱們能夠對文件進行多種操做,好比打開和讀寫。
 
存儲設備分區
 
文件系統的最終目的是把大量數據有組織地放入持久性的存儲設備中,好比硬盤和磁盤。這些存儲設備和內存不一樣,它們的存儲能力具有持久性,不會由於斷電而消失,存儲量大,但讀取速度慢。
數據被存入某個分區中,一個典型的Linux分區(partition)包含有下面各個部分:
 
分區的第一個部分是啓動區(Boot block),它主要是爲計算機開機服務的。linux開機啓動後後,會首先載入MBR,隨後MBR從某個硬盤的啓動區加載程序。該程序負責進一步的操做系統的加載和啓動。爲了方便管理,即便某個分區中沒有安裝操做系統,Linux也會在該分區預留啓動區。
 

啓動區以後的是超級區(Super block)。它存儲有文件系統的相關信息,包括文件系統的類型,inode的數目,數據塊的數目。node

隨後是多個inodes,它們是實現文件存儲的關鍵。在Linux系統中,一個文件能夠分紅幾個數據塊存儲每一個文件對應一個inode。這個inode中包含多個指針,指向屬於該文件各個數據塊。當操做系統須要讀取文件時,只須要對應inode的"地圖",收集起分散的數據塊,就能夠收穫咱們的文件了。linux

最後一部分是真正存儲數據的數據塊data blocks。
 
當Linux想要打開一個文件時,只須要找到文件對應的inode,而後沿着指針,將全部的數據塊收集起來,就能夠在內存中組成一個文件的數據了。複雜的方式可使用鏈表,每一個數據快都有一個指針,指向屬於同一個文件的下一個數據塊,這樣的好處是能夠利用零散的空餘空間,壞處是文件操做必須按照線性方式進行,若是想隨機存取,那麼必須遍歷鏈表,指導目標位置。
 
列出文件夾內詳細文件信息
ls是list的意思,重點在顯示文件的文件名與相關屬性。而選項『-al』則表示列出全部的文件詳細的權限與屬性 。
floralin@ubuntu:~$ ls -al

1)第一欄表明這個文件的類型與權限(permission):ubuntu

第一個字符d則是目錄,當爲-則是文件,如果[ l ]則表示爲連結檔(link file),b則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置),如果c則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。數組

接下來的字符中,以三個爲一組,均爲rwx三個參數組合,[ r ]表明可讀(read)、[ w ]表明可寫(write)、[ x ]表明可執行(execute)。第一組爲文件擁有者的權限第二組爲同羣組的權限,第三組爲其餘非本羣組的權限網絡

 

2)第二欄表示多少個檔名連結到此節點dom

3)第三欄表示文件的擁有賬號函數

4)第四欄表示這個文件所屬羣組url

5)第五欄表示這個文件的容量大小,默認單位爲bytesspa

6) 第六欄表示這個文件的建檔日期或是最近的修改日期操作系統

建立文件夾
floralin@ubuntu:~/Desktop/linux_study$ mkdir test
floralin@ubuntu:~/Desktop/linux_study$ ls
test

刪除空文件夾

floralin@ubuntu:~/Desktop/linux_study$ rm test
rm: cannot remove ‘test’: Is a directory
floralin@ubuntu:~/Desktop/linux_study$ rmdir test
floralin@ubuntu:~/Desktop/linux_study$ ls

 

改變文件屬性與權限

chgrp  :改變文件所屬羣組
chown  :改變文件擁有者
chmod  :改變文件的權限, SUID, SGID, SBIT等等的特性

 

改變文件所屬羣組

floralin@ubuntu:~/Desktop/linux_study$ sudo chgrp users linux_study
 
 
改變文件擁有者
floralin@ubuntu:~/Desktop/linux_study$ sudo chown root linux_study
 
改變文件權限
floralin@ubuntu:~/Desktop/linux_study$ sudo chmod 755 linux_study

更改文件的權限爲755: owner r+w+x, group: r+x, others: r+x

 

文件顯示

$cat filename         : 顯示文件
$cat file1 file2      : 鏈接顯示file1和file2
$head -1 filename     :顯示文件第一行
$tail -5 filename     : 顯示文件倒數第五行
$diff file1 file2     :顯示file1和file2的差異

 
統計文件中行數、詞和字符數目
floralin@ubuntu:~/Desktop/linux_study$ wc test2
 6 15 71 test2

 

顯示日期

$date +"%Y-%m-%d_%T"
以YYYY-MM-DD_HH:MM:SS的格式顯示日期時間 (格式可參考$man date)

 $date --date="1999-01-03 05:30:00"
 顯示從1900-01-03 05:30:00具體信息

 

網絡

顯示網絡藉口以及相應的IP地址。ifconfig可用於設置網絡接口:

floralin@ubuntu:~/Desktop/linux_study$ ifconfig

運行eth0接口

floralin@ubuntu:~/Desktop/linux_study$ sudo ifup eth0

關閉eth0接口

floralin@ubuntu:~/Desktop/linux_study$ sudo ifdown eth0

顯示無線網絡接口

floralin@ubuntu:~/Desktop/linux_study$ iwconfig

顯示路由表。route可用於修改路由表

floralin@ubuntu:~/Desktop/linux_study$ iwconfig

 當前網絡鏈接狀態

floralin@ubuntu:~/Desktop/linux_study$ netstat

發送ping包到地址IP

floralin@ubuntu:~/Desktop/linux_study$ ping 10.21.171.15

向DHCP主機發送DHCP請求,以得到IP地址以及其餘設置信息

floralin@ubuntu:~/Desktop/linux_study$ sudo dhclient

使用wget 下載url指向的資源

floralin@ubuntu:~/Desktop/linux_study$ sudo dhclient

DNS查詢,尋找域名domain對應的ip

floralin@ubuntu:~/Desktop/linux_study$ sudo dhclient

 

打包和壓縮
比較大型的文件透過所謂的文件壓縮技術以後,能夠將他的磁碟使用量下降, 能夠達到減低文件容量的效果。
linux 支持的壓縮命令很是多,且不一樣的命令所用的壓縮技術並不相同,固然彼此之間可能就沒法互通壓縮/解壓縮文件,區分不一樣的壓縮文件一般經過後綴的擴展名。
 
gzip或bzip2壓縮test
floralin@ubuntu:~/Desktop/linux_study$ gzip test
解壓test
floralin@ubuntu:~/Desktop/linux_study$ gzip -d test
 
打包命令: tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮

將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下

[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz

 

 
linux進程基礎
 
計算機實際上能夠作的事情實質很是簡單,好比會所兩數求和,查找內存中的地址等等。這些基礎的計算機動做被稱爲「指令」。所謂的程序就是這一系列指令的集合。經過程序,咱們可讓計算機完成複雜的操做。
程序大多數會被存儲爲可執行的文件。
 
進程和程序的區別
 
進程是程序的一種具體實現。進程是執行程序的過程。查詢正在運行的進程:
floralin@ubuntu:~$ ps -eo pid,comm,cmd

-e表明列出所有進程,-o pid,comm,cmd表明咱們須要pid,comm和cmd信息。

每一行表明一個進程,三列的信息分別表明,每一行進程的惟一PID表示、COMMAND是進程的簡稱、CMD是進程所對應的程序以及運行時所帶的參數(對於使用使用[ ]的,是kernel的一部分功能,被打扮成進程的樣子,方便操做系統管理)。

 

如何建立進程

實際上計算機在開機的時候,內核kernel只創建了一個init進程,linux kernel是並不直接創建新進程的系統調用。全部的進程是經過fork機制創建的。(fork,新的進程須要經過的的進程複製自身獲得)。當進程fork的時候,linux在內存中開闢出一片新的內存空間給新的進程,並將老的進程空間中的內容複製到新的空間中,今後兩個進程同時運行。能夠經過pstree命令來顯示整個進程樹:

 

子進程的終結

當子進程終結時,會通知父進程清空本身所佔據的內存,並在kernel中留下本身退出信息。

父進程在得知子進程終結時,會對該子進程使用wait系統調用。這個wait函數能從kernel中取出子進程的退出信息,並清空該信息在kernel中所佔據的空間。

可是,若是父進程早於子進程終結,子進程就會成爲一個孤兒(orphand)進程。孤兒進程會被過繼給init進程,init進程也就成了該進程的父進程。init進程負責該子進程終結時調用wait函數。

 

linux信號程基礎
 
kernel內有若干個進程,每一個進程不容許該進程以外的人進入,這樣對於每一個進程來講是一個保護機制 ,可是有時候須要打破封閉的保護,以便和進程交流信息。
這樣就須要一種通訊方式。傳遞的信號比較粗糙 ,只能是一個整數,但正是由於傳遞的信息量不多,信號才便於管理和使用。
信號被常常用於系統管理相關的任務,好比通知進程終結、停止或者恢復等等,由內核管理,也能夠由內核產生。
經過ping來查詢進程的PID,而後能夠經過kill命令來向某個進程發出信號:
$kill -SIGCONT 9575

傳遞SIGCONT信號給ping進程。

 
信號處理
全部的信號都採用了對應信號的默認操做,但並不絕對,當進程決定執行信號的時候,有集幾種可能:
1)無視。信號被清除,進程自己補採起任何特殊的操做。
2)默認。每一個信號對應必定的默認操做,好比上面所說起的SIGCONT用於繼續進程。
3)自定義操做。也叫作獲取信號,執行進程中預設的對應於該信號的操做。
相關文章
相關標籤/搜索