序言
當前的形勢,.Net已經開源,.Net Core 正在跨平臺,可見微軟巨人在努力,在改變,在進步,在走向春天。從前被微軟供作上帝的.Net從業者,如果不開啟心扉面向開源,改變自己,那麼很可能在不久的將來,恐英雄無用武之地,可悲可嘆,嗚呼哀哉!
如今Linux已經是開發者必備技能之一,我們想要了解它,深入它,就不能偷懶,只操作圖示按鈕完美的介面。我要像微軟一樣改變,進步,深入,飛翔,與太陽肩並肩。
那麼感興趣者就來跟哥哥裝裝B,漲漲姿勢,敲敲像電視劇裡面只有黑客才會懂的,黑色背景下的命令吧。一天一點,重在累積吧,其實Linux的學習也就是一個積沙成塔的過程,前後關聯不是很大,學一點會一點,努力吧。
我的Linux目標
我的目標很簡單,就是用命令操作Linux系統,像操作Windows一樣簡單,直觀。
前提:0、不知道什麼是Linux的請點選網頁頂部右上方的X。1、裝個Linux系統,我裝的是CentOS7,不會裝系統的也請點選網頁右上角的X。2、你要自己能夠進入系統中,不要自己都登入,連線不上(好尷尬啊,也X吧)!
接下來我會寫幾篇關於linux的博文,裡面的命令我建議初學者不要只看,不練,要看著敲著,用心記著,記不著啦,就常回來看看。
始於cd,ls命令
好啦,步入正題,我使用的linux連線工具為xshell,mRemoteNG,對兩款工具不做介紹啦,你可以百度一下,實在不會入左上方群。
進入之後,便是上面的介面黑乎乎一片,對於初學者也可能是一片懵逼,猶如狗拿刺蝟,那麼不要急,我們先來看下人生中的第一個linux命令:ls 與 cd 。
首先你先使用下面的cd命令:
[root@localhost ~]# 這個是當前使用者的使用者資料夾主目錄
[root@localhost /]# 這個是整個系統的根目錄
緊接著輸入ls命令展示出一下結果。
那麼這些檔案都裝載啦什麼東東,為什麼要放在根目錄下,接下來我們對此做個詳解。
ls,cd命令的語法與引數使用方法:http://man.linuxde.net ,不能偷懶哦,要敲敲, 你才能學好,多敲才能記住的。
Linux的檔案種類,副檔名
在linux中,任何裝置都是檔案,就連資料通訊介面也有專門的檔案負責。所以我們要搞清楚linux下的檔案有哪些?哪些作用?
首先我們這樣輸入命令,如下:
亂七八糟的都是什麼呢?我拿dev這個資料夾做為示例分解下:
1、檔案型別
普通檔案:就是我們一般的檔案,他在linux中按照檔案內容大致分文3種。
- 純文字檔案(ASCII):內容直接被我們讀到,如數字,字母等,幾乎我們可以設定讀寫的檔案都是這一種,他可以通過cat命令開啟,直接檢視內容。
- 二進位制檔案(binary):linux唯一可以識別執行的檔案,在系統中可執行檔案就是這種格式,例如:剛剛執行的cat就是一個二進位制檔案。
- 資料格式檔案(data):程式在執行過程中讀取的特定格式檔案,就是資料檔案,比如:使用者登入的使用者資料記錄在/var/log/wtmp這個資料格式檔案中。比較明顯的特徵使用last可以讀出來,cat讀時是亂碼。
塊(block)裝置檔案:為一些儲存資料,以體統隨機訪問的介面裝置,如硬碟,軟盤等,可以隨機的在硬碟的不同塊讀寫,可以看看/dev/sda
字元(character)裝置檔案:一些串列埠的介面裝置,如鍵盤、滑鼠等。這些裝置的特徵就是“一次性讀取”的,不能夠截斷輸出。例如:滑鼠只能滑動到一個地方而不能跳到另外一個地方。
套位元組(sockets):這種檔案型別用於在網路上的資料連線。
管道(FIFO,pipe):fifo,first-in-first-out,主要解決多個程式同事訪問一個檔案所造成的錯誤問題。
目錄(directory):就是目錄。
連線檔案(link):類似windows系統中的快捷鍵。
2、檔案許可權r-xr-xr-x
- 縮寫字母的意義:x:可執行,r:可讀,w:可寫,-佔位。
- 123:擁有者許可權,456:使用者組使用者許可權,789:其他使用者許可權。
- 特徵順序為rwx。
3、連線數:表示有多少檔名連線到此節點。
4、檔名
- linux中沒有像windows中所謂的副檔名。但是為啦方便認識還是要有寫副檔名的習慣。
-
檔案長度限制,一般不要超過255個字元就好。
- 檔案命名限制,最好避免*?><;&|、\'"(){}
檔案目錄結構
當你開啟linux系統之後,輸入命令:cd \ 進入根目錄之後,再ls會顯示出如下目錄結構
那麼這些目錄都有存放些什麼檔案,我們的檔案又該以何種規範來存放呢?
Linux目錄結構標準:FHS(Filesystem Hierarchy Standard)標準
為什麼要使用一個標準呢?很簡單,就是讓使用者和廠商有個共同的認識與約束,不至於各自為政,把linux系統的目錄搞的亂七八糟,東西隨便放,那我們的學習成本就很大啦。
關於FHS網上有很多介紹,FHS根據多去的經驗也一直在持續改版(http://www.pathname.com/fhs/),FHS根據檔案系統使用的頻繁情況,是否允許使用者隨意改動,將目錄定義成4種互動作用的形態,如下:
- 可分享的:可以分享給其他系統掛載使用的目錄。
- 不可分享的:僅與自身機器有關,不適合分享給其他主機的。如自己機器上執行的裝置檔案或者與程式有關的socket檔案。
- 不變的:不會經常變動的資料,如說明檔案,函式庫,主機服務配置檔案等。
- 可變動的:經常會改變的資料,如登入檔案,新聞組等。
根目錄與根目錄下的資料夾存放說明
根目錄是整個系統最重要的一個目錄,因為所有的目錄都是由它衍生出來,而且根目錄也與開機,還原,系統修復等操作有關。
由於系統開機需要特定的開機軟體、核心檔案、開機所需要的程式、函式庫等檔案資料,若系統出現異常時,根目錄也要有能夠修復檔案系統的程式。由此可見根目錄的重要性,所以FHS建議,根目錄不要放在非常大的分割槽內,因為越大防止的檔案越多,出錯的機率也越大,效能也越不好,所以,根目錄應該越小越好,且應用程式所安裝的軟體最好不要與根目錄放在一個分割槽內。
由此我們來說說下面的檔案都是什麼,又怎麼放置才好。
其實,FHS標準對根目錄的定義僅有如下的目錄資料。
其中有5個目錄不可與根目錄分開放在不同的分割槽。這5個目錄分別為:etc,bin,dev,lib,sbin。
那麼除啦以上的資料夾之外,還有一些linux系統中也非常重要的目錄如下:
/dev目錄:
- hd[a-t]:IDE裝置
- sd[a-z]:SCSI裝置
- fd[0-7]:標準軟碟機
- md[0-31]:軟raid裝置
- loop[0-7]:本地迴環裝置
- ram[0-15]:記憶體
- null:無限資料接收裝置,相當於黑洞
- zero:無限零資源
- tty[0-63]:虛擬終端
- ttyS[0-3]:串列埠
- lp[0-3]:並口
- console:控制檯
- fb[0-31]:framebuffer
- cdrom => /dev/hdc
- modem => /dev/ttyS[0-9]
- pilot => /dev/ttyS[0-9]
- random:隨機數裝置
- urandom:隨機數裝置
/etc目錄
- /etc/rc,/etc/rc.d,/etc/rc*.d : 啟動、或改變執行級時執行的scripts或scripts的目錄。
- /etc/passwd: 使用者資料庫,其中的域給出了使用者名稱、真實姓名、家目錄、加密的口令和使用者的其他資訊。
- /etc/fstab :啟動時mount -a命令(在/etc/rc 或等效的啟動檔案中)自動mount的檔案系統列表。Linux下,也包括用swapon -a啟用的swap區的資訊。
- /etc/group :類似/etc/passwd ,但說明的不是使用者而是使用者組。
- /etc/inittab :init 的配置檔案,設定系統啟動時init程式將把系統設定成什麼樣的runlevel 。
- /etc/issue getty 在登入提示符前的輸出資訊.通常包括系統的一段短說明或歡迎資訊內容由系統管理員確定。
- /etc/motd: Message Of The Day,成功登入後自動輸出內容由系統管理員確定,經常用於通告資訊,如計劃關機時間的警告。
- /etc/mtab: 當前安裝的檔案系統列表.由scripts初始化,並由mount 命令自動更新,需要一個當前安裝的檔案系統的列表時使用,例如df 命令。
- /etc/shadow: 在安裝了影子口令軟體的系統上的影子口令檔案.影子口令檔案將/etc/passwd 檔案中的加密口令移動到/etc/shadow 中,而後者只對root可讀這使破譯口令更困難.
- /etc/login.defs: login 命令的配置檔案。
- /etc/printcap: 類似/etc/termcap ,但針對印表機語法不同。
- /etc/profile , /etc/csh.login , /etc/csh.cshrc :登入或啟動時Bourne或C shells執行的檔案,這允許系統管理員為所有使用者建立全域性預設環境。
- /etc/securetty: 確認安全終端,即哪個終端允許root登入.一般只列出虛擬控制檯,這樣就不可能(至少很困難)通過modem或網路闖入系統並得到超級使用者特權。
- /etc/shells: 列出可信任的shell.chsh 命令允許使用者在本檔案指定範圍內改變登入shell.提供一臺機器FTP服務的服務程式ftpd 檢查使用者shell是否列在 /etc/shells 檔案中,如果不是將不允許該使用者登入.
- /etc/sysconfig :網路配置相關目錄
- /etc/DIR_COLORS: 設定顏色
- /etc/HOSTNAME: 設定使用者的節點名
- /etc/NETWORKING: 只有YES標明網路存在
- /etc/host.conf: 檔案說明使用者的系統如何查詢節點名
- /etc/hosts: 設定使用者自已的IP與名字的對應表
- /etc/hosts.allow: 設定允許使用inetd的機器使用
- /etc/hosts.deny: 設定不允許使用inetd的機器使用
- /etc/hosts.equiv: 設定遠端機不用密碼
- /etc/inetd.conf: 設定系統網路守護程式inetd的配置
- /etc/inetd.pid :inetd這個程式的程式id
- /etc/hosts.lpd :設定遠端有哪些節點可以使用本機的印表機
- /etc/gateways: 設定路由器
- /etc/protocols: 設定系統支援的協議
- /etc/named.boot: 設定本機為名字伺服器的配置檔案
- /etc/named.pid: 本機上執行的名字伺服器的程式id
- /etc/networks :設定網路的配置檔案
- /etc/resolv.conf :設定系統的名字伺服器
- /etc/services: 設定系統的端品與協議型別和提供的服務
- /etc/exports: 設定NFS系統用的
- /etc/NNTP_INEWS_DOMAIN: 設定新聞伺服器的配置檔案
- /etc/nntpserver: 設定使用者使用的新聞伺服器的地址
- /etc/XF86Config: X Window的配置檔案
- /etc/hostid: 系統獨有的一個硬體id
- /etc/at.deny: 設定哪些使用者不能使用at命令
- /etc/bootptab: 給MAKEDEV程式設定各種不同的裝置驅動檔案的格式
- /etc/makedev.cfg: 同DEVINFO一樣給MAKEDEV使用的設定檔案
- /etc/diphosts: 設定拔號伺服器的使用者名稱和口令
- /etc/slip.hosts,/etc/slip.login: 設定SLIP的配置檔案
- /etc/fastboot: 使用shutdown -f產生的,重啟系統要查這個檔案
- /etc/fstab: 記錄開機要mount的檔案系統
- /etc/ftpaccess: FTP伺服器的一些配置
- /etc/ftpconversions: 設定在FTP時使用的過濾器的位置
- /etc/ftpusers: 設定不能使用FTP服務的使用者
- /etc/ld.so.cache: 查詢系統動態連結庫的快取
- /etc/ld.so.conf: 系統動態連結庫的路徑
- /etc/lilo.conf lilo:的配置檔案
- /etc/magic: 給file命令使用的
- /etc/aliases :給sendmail使用的設定別名的檔案
- /etc/sendmail.st: 設定sendmail的
- /etc/motd: 超級使用者釋出通知的地方
- /etc/organization: 存放使用者的名字和組織
- /etc/pnpdevices: 列出支援的Plug&Play裝置
- /etc/snooptad: 監控使用者的螢幕,監聽的終端列表
- /etc/sudoers: 可以sudo命令的配置檔案
- /etc/syslog.conf: 系統記錄程式syslogd的配置檔案
- /etc/utmp: 目前在用系統的使用者資訊
- /etc/wtmp: 同utmp差不多,只是它累加
- /etc/nologin: 系統在shutdown時不希望使用者登入就產生這個檔案
- /etc/termcap: 設定系統終端資訊的
- /etc/ttys: 設定系統的終端型別
- /etc/gettydefs: getty_ps的定義檔案
- /etc/yp.conf: NIS的配置檔案
- /etc/mtools.conf: 設定mtools程式的引數
- /etc/fdprm: 設定格式化軟盤的引數
- /etc/login.access: 控制使用者登入許可權的檔案
/proc目錄
- /proc/cmdline: 載入 kernel 時所下達的相關引數,查閱此檔案,可瞭解系統是如何啟動。
- /proc/cpuinfo: 本機的 CPU 的相關資訊,包含時脈、型別與運算功能等
- /proc/devices: 這個檔案記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關。
- /proc/filesystems: 目前系統已經載入的檔案系統。
- /proc/interrupts: 目前系統上面的 IRQ 分配狀態。
- /proc/ioports: 目前系統上面各個裝置所配置的 I/O 位址。
- /proc/kcore: 這個就是記憶體的大小,但是不要讀他。
- /proc/loadavg: 還記得 top 以及 uptime 吧?沒錯,上頭的三個平均數值就是記錄在此。
- /proc/meminfo: 使用 free 列出的記憶體資訊,在這裡也能夠查閱到。
- /proc/modules: 目前我們的 Linux 已經載入的模組列表,也可以想成是驅動程式。
- /proc/mounts: 系統已經掛載的資料,就是用 mount 這個命令呼叫出來的資料。
- /proc/swaps: 到底系統掛載入的記憶體在哪裡?使用掉的 partition 就記錄在此啦。
- /proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個檔案當中也有紀錄。
- /proc/pci: 在 PCI 匯流排上面,每個裝置的詳細情況,可用 lspci 來查閱。
- /proc/uptime: 就是用 uptime 的時候,會出現的資訊。
- /proc/version: 核心的版本,就是用 uname -a 顯示的內容。
- /proc/bus/*: 一些匯流排的裝置,還有 U盤 的裝置也記錄在此。
/usr目錄
依據FHS的基本定義/usr裡面放置的資料屬於可分享不可變動的。usr是UNIX Software Resource的縮寫,也就是“UNIX作業系統軟體資源”所放置的目錄,而不是使用者資料,不要跟user扯上關係。它相當於windows系統中的c:\windows與c:program files這兩個目錄的綜合體。剛裝完系統時,這個目錄佔用的硬碟容量最多。因為幾乎所有的應用程式都安裝在這裡,本地安裝的程式和其他東西放在/usr/local下。
- /usr/etc: 存放配置檔案。
- /usr/games: 存放遊戲和教學檔案。
- /usr/include: c/c++等程式語言的標頭檔案與包含檔案放置處,當我們以tarball方式(*.tar.gz的方式安裝軟體)安裝某些資料時,會使用到裡面的許多包含檔案。開發和編譯應用程式所需要的標頭檔案。
- /usr/share:放置共享檔案的地方,在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料,因為幾乎都是文字檔案。如/usr/share/man:線上幫助檔案,/usr/share/doc:軟體雜項的檔案說明,zoneinfo:與時區相關的檔案。
- /usr/bin: 絕大部分使用者可使用的命令都放在這裡。有些命令在/bin(是否與開機過程有關) 或/usr/local/bin 中。
- /usr/sbin :根檔案系統不必要的系統管理命令,例如多數服務程式。
- /usr/share/man , /usr/share/info , /usr/share/doc: 手冊頁、GNU資訊文件和各種其他文件檔案。
- /usr/lib: 包含各應用軟體的函式庫,目標檔案,以及不被一般使用者慣用的執行檔案或指令碼。某些軟體會提供一些特殊的命令來進行伺服器的設定,這些命令也不會經常被系統管理員操作,那就被放在這個目錄下。
- /usr/local:管理員在本機自己安裝自己下載的軟體,建議安裝到此目錄。該目錄也具有bin,etc,include,lib。
- /usr/src: 存放程式的原始碼,linux核心的原始碼存放在/usr/src/kernels。
/var目錄
usr是安裝時佔用大量的硬碟容量,而var則是在系統執行後才會慢慢佔用硬碟的容量。因為var目錄主要針對常態性變動的檔案,比如,快取,登入檔案,以及某些軟體執行所產生的檔案,包括程式檔案(lock file,run file)。
- /var/catman:當要求格式化時的man頁的cache.man頁的原始檔一般存在/usr/man/man* 中;有些man頁可能有預格式化的版本,存在/usr/man/cat* 中.而其他的man頁在第一次看時需要格式化,格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了. (/var/catman 經常被清除,就象清除臨時目錄一樣.)
- /var/lib:系統正常執行時要改變的檔案。
- /var/local,/usr/local:中安裝的程式的可變資料(即系統管理員安裝的程式).注意,如果必要,即使本地安裝的程式也會使用其他/var 目錄,例如/var/lock 。
- /var/lock:鎖定檔案.許多程式遵循在/var/lock 中產生一個鎖定檔案的約定,以支援他們正在使用某個特定的裝置或檔案.其他程式注意到這個鎖定檔案,將不試圖使用這個裝置或檔案。
- /var/log:各種程式的Log檔案,特別是login (/var/log/wtmp log所有到系統的登入和登出) 和syslog (/var/log/messages 裡儲存所有核心和系統程式資訊. /var/log 裡的檔案經常不確定地增長,應該定期清除。
- /var/run:某些程式或者服務啟動後,會將他們的pid放置在這個目錄下。儲存到下次引導前有效的關於系統的資訊檔案.例如, /var/run/utmp 包含當前登入的使用者的資訊。
- /var/spool:放置一些佇列資料,就是排隊等待其他程式使用的資料。這些資料被使用後通常都會被刪除。例如,系統收到新信件會放置到/var/spool/mail中,使用者收下後,該信件原則上時會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue中,等到被送出去就被刪除。如果是工作排程資料,就會被放置到/var/spool/cron目錄中。
- /var/tmp 比/tmp:允許的大或需要存在較長時間的臨時檔案。 (雖然系統管理員可能不允許/var/tmp 有很舊的檔案.)
- /var/cache:應用程式本身執行過程中會產生的一些暫存檔案。
LIUNX系統的目錄樹,如下:
Linux系統中檔案的壓縮打包功能
壓縮:是一種通過特定的演算法來減小計算機檔案大小的機制(百度百科下)。
打包:將多個檔案放入一個檔案中,最終以一個檔案的形式存在。
Linux系統中常見的壓縮命令有三種:compress , gzip , bzip2 。
- compress:這個壓縮命令僅存在古老的unix機器上,是一個很古老的壓縮方式,被gzip所取代,gzip也可以解壓commress的壓縮檔案。所以我這裡不做過多介紹,有需求的朋友可以:http://man.linuxde.net/compress 我這裡給一個截圖如下:
- gzip:這個壓縮命令在目前來說算是最常見的,它可以解開compress\zip\gzip等軟體所壓縮的檔案。有9個壓縮等級,1最快壓縮比最差,9最慢壓縮比最好,預設為6。使用zcat命令可以檢視讀取compress與gzip的壓縮檔案。對文字的壓縮率可達到:60%-70%,可配合tar使用。
- bzip:如果說gzip是用來取代compress的,那麼bzip就是為了取代gzip而存在的。他的壓縮率竟然比gzip還要好,可配合tar使用。
gzip的常用用法:
語法:gzip 引數 檔名
引數:
-c:將壓縮的資料輸出到螢幕上,可通過資料重定向來處理。
-d:解壓的引數
-t:可以用來檢驗一個壓縮檔案的一致性,看看檔案是否有錯誤。
-v:可以顯示出原始檔/壓縮檔案的壓縮比資訊。
-#:壓縮等級,1-9。
常用的語句:壓縮:gzip -v filename ,解壓:gzip -d filename 。 檢視文字壓縮檔案:zcat 檔名。
bzip2的常用用法:
語法:bzip2 引數 檔名
引數:
-c:將壓縮過程中產生的資料輸出到螢幕上
-d:解壓縮
-k:保留原始檔,而不會刪除原始檔案
-z:壓縮
-v:顯示出原始檔/壓縮檔案的壓縮比等資訊。
-#:與gzip相同,1-9壓縮比的引數,1最快,9最佳。
常用的語句:壓縮:bzip2 -z filename ,解壓:bzip2 -d filename 。檢視壓縮文字:bzcat filename.bz2
tar打包命令
以上三種壓縮解壓只能針對單檔案執行,那麼如果將多個檔案合併到一個大檔案中,怎麼做到呢?那就要用tar這個命令。tar不止這麼多,它還支援gzip/bzip2在打包的同時對檔案進行壓縮。由於這tar使用過於廣泛,就連windows中的WinRAR也支援.tar.gz檔名的解壓縮。
語法:打包與壓縮:tar [-j|-z] [cv] [-f 新建的檔名] filename 解壓縮: tar [-j|-z] [xv] [-f 新建的檔名] [-C 目錄]
引數:
-c:新建打包檔案,可搭配-v來檢視過程中被打包的檔名
-t:檢視打包檔案的內容含有那些檔名,重點在檢視檔案
-x:解壓縮或解打包的功能,可搭配-C在特定目錄解開。特別留意的是,-c,-t,-x不可同時出現在一串命令中。
-j:通過bzip2的支援進行壓縮或解壓。
-z:通過gzip的支援進行壓縮或解壓。
-v:在壓縮或解壓的過程中,將正在處理的檔名稱顯示出來。
-f filename:-f後面要接被處理的檔名。建議-f單獨寫一個引數。
-C 目錄:這個引數在解壓時,若要在特定目錄解壓縮,可以使用這個引數。
.tar.bz2 格式常用的語法
解壓: tar jxvf filename.tar.bz2 , 壓縮: tar jcvf filename.tar.bz2 要壓縮的檔案
.tar.gz 格式常用的語法
解壓:tar zxvf filename.tar.gz ,壓縮: tar zcvf filename.tar.gz 要壓縮的檔案
總結
接下來是大家最喜歡的總結內容啦,內容有三,如下:
1、希望能關注我其他的文章。
2、部落格裡面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流群,我們一起學習探討。
3、你可以忘記點贊加關注,但千萬不要忘記掃碼打賞哦。