序言
當前的形勢,.Net已經開源,.Net Core 正在跨平臺,可見微軟巨人在努力,在改變,在進步,在走向春天。從前被微軟供做上帝的.Net從業者,若是不打開心扉面向開源,改變本身,那麼極可能在不久的未來,恐英雄無用武之地,可悲可嘆,嗚呼哀哉!linux
現在Linux已是開發者必備技能之一,咱們想要了解它,深刻它,就不能偷懶,只操做圖標按鈕完美的界面。我要像微軟同樣改變,進步,深刻,飛翔,與太陽肩並肩。c++
那麼感興趣者就來跟哥哥裝裝B,漲漲姿式,敲敲像電視劇裏面只有黑客纔會懂的,黑色背景下的命令吧。一天一點,重在累積吧,其實Linux的學習也就是一個積沙成塔的過程,先後關聯不是很大,學一點會一點,努力吧。算法
始於cd,ls命令
好啦,步入正題,我使用的linux鏈接工具爲xshell,mRemoteNG,對兩款工具不作介紹啦,你能夠百度一下,實在不會入左上方羣。shell
進入以後,即是上面的界面黑乎乎一片,對於初學者也多是一片懵逼,猶如狗拿刺蝟,那麼不要急,咱們先來看下人生中的第一個linux命令:ls 與 cd 。數據庫
首先你先使用下面的cd命令:windows
[root@localhost ~]# 這個是當前用戶的用戶文件夾主目錄
[root@localhost /]# 這個是整個系統的根目錄緩存
緊接着輸入ls命令展現出一下結果。安全
那麼這些文件都裝載啦什麼東東,爲何要放在根目錄下,接下來咱們對此作個詳解。服務器
ls,cd命令的語法與參數使用方法:http://man.linuxde.net ,不能偷懶哦,要敲敲, 你才能學好,多敲才能記住的。網絡
Linux的文件種類,擴展名
在linux中,任何設備都是文件,就連數據通訊接口也有專門的文件負責。因此咱們要搞清楚linux下的文件有哪些?哪些做用?
首先咱們這樣輸入命令,以下:
亂七八糟的都是什麼呢?我拿dev這個文件夾作爲示例分解下:
一、文件類型
普通文件:就是咱們通常的文件,他在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系統中的快捷鍵。
二、文件權限r-xr-xr-x
- 縮寫字母的意義:x:可執行,r:可讀,w:可寫,-佔位。
- 123:擁有者權限,456:用戶組用戶權限,789:其餘用戶權限。
- 特徵順序爲rwx。
三、鏈接數:表示有多少文件名鏈接到此節點。
四、文件名
- 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 要壓縮的文件