Linux入門學習筆記

點擊打開讀書筆記

《鳥哥的Linux私房菜》5-12章爲主:

1.        指令、選項或參數之間不論空幾個格,shell都視爲一個空格。

2.        指令太長時,可以使用“\”(反斜槓)符號使指令連續到下一行。

3.        Linux環境下,字母區分大小寫

4.        shell就是用戶接口,Linux下默認的用戶接口就是bash shell。

5.        如果想讓當前程序終止,可以鍵入ctrl+c,這就是中斷當前程序的按鍵。(q:有很多程序在運行時,如果想跳出來,按下q即可!)

6.        如:drwxr--r--   3  root    root    4096   Jun 25 08:35    .ssh

非 root 這個賬號的其它使用者均不可進入.ssh 這個目錄,爲什麼呢?因爲 x 與目錄的關係相當的重要,如果您在該目錄底下不能執行任何指令的話,那麼自然也就無法進入了。(如果無法執行指令,則無法進入目錄)

7.        在Windows下一個文件是否具有執行能力是由後綴名來判斷的,例如∶.exe, .bat, .com 等等,但在 Linux 下,文件是否能執行,則是由是否具有x這個屬性來決定的,跟後綴名沒有絕對的關係。

8.        如果文件名之前多一個“.”,則表明這個文件爲“隱藏文檔”。ls -al可以看到這種文件的文件名及其相關屬性。

9.        Linux的正統文件格式是ext2。常用的帶有日誌管理功能的文件格式有ext3reiserfs

10.    Linux下有關目錄下存放的內容:

/boot :存放Linux核心與啓動相關文件的地方;

/dev :存放與設備有關的文件;

/etc :系統在啓動過程中要讀取的文件均在該目錄下;

/etc/rc.d/init.d :所有服務默認的啓動腳本文件都放在這裏;

/bin,/sbin,/usr/bin,/usr/sbin :系統默認的執行文件的放置目錄。其中/bin,/usr/bin是系統用戶使用的目錄,而/sbin,/usr/sbin則是系統管理員使用的目錄;

/var/log :存放所有服務登錄文件錯誤信息文件

11.    絕對路徑:路徑的寫法一定是從根目錄“/”寫起,例如:/usr/share/doc目錄。

相對路徑:路徑的寫法不是由“/”寫起,例如從/usr/share/doc轉到/usr/share/man下時,可以寫成cd ../man。

(Windows下直接輸盤符如:E: 即可進入E盤,查看磁盤下的目錄用 dir)

12.    . 代表當前層目錄

.. 代表上層目錄

~ 代表自己的根目錄

~user 代表到user這個人的根目錄

 

13.    當我們執行一個指令時,系統會依照環境變量PATH的設定到PATH定義的每個路徑下搜尋文件,先搜尋到的指令文件先被執行。

14.    當需要備份很大的文件但這個文件的更新率很低時,可以使用指令“cp –u 源文件 目標文件”進行備份。因爲只有當源文件被改變後,纔會進行復制操作。否則不做任何動作。(將源文件複製成目標文件)

15.    若用戶建立的是“文件”,則默認沒有可執行(x)項,即只有rw這兩項,最大爲666(rw- rw- rw-);若用戶建立的是“目錄”,則由於x與是否可以進入此目錄有關,因此默認爲所有權限均開放,即777(drwxrwxrwx)。

16.    umask用於指定當前用戶在建立文件或目錄時的屬性默認值。其指定的是“該默認值需要取消的權限”。(如:先用umask設定權限,再創建目錄時權限就會被應用到創建的目錄上。)

17.     SUID

當一個設置了SUID 位的可執行文件被執行時,該文件將以所有者的身份運行,也就是說無論誰來執行這個文件,他都有文件所有者的特權。如果所有者是 root 的話,那麼執行人就有超級用戶的特權了。

18.     SGID

當一個設置了SGID 位的可執行文件運行時,該文件將具有所屬組的特權,任意存取整個組所能使用的系統資源。

若一個目錄設置了SGID,則所有被複制到這個目錄下的文件,其所屬的組都會被重設爲和這個目錄一樣,除非在複製文件時加上-p (preserve,保留文件屬性)的參數,才能保留原來所屬的羣組設置。

19.     sticky-bit

對一個文件設置了sticky-bit之後,儘管其他用戶有寫權限,也由屬主執行刪除、移動等操作。

對一個目錄設置了sticky-bit之後,存放在該目錄的文件僅准許其屬主執行刪除、 移動等操作。

20.    命令摘錄:

# exit:退出系統,相當於退出當前登錄用戶

# Ctrl+Alt+[F1]~[F6]:文字界面tty1~tty6終端

# Ctrl+Alt+[F7]:圖形界面

# startx:啓動圖形界面

# bc:計算器

# man+指令名稱:請求系統給出指令的操作說明

# shutdown –h now:立刻關機,now相當於時間爲0

# chgrp 羣組名稱 文件或目錄改變文件或目錄的羣組,要求改變的目標羣組名稱必須在/etc/group中存在)

# chown [-R] 賬號名稱[:羣組名稱] 文件或目錄改變文件擁有者,要求擁有者名稱在/etc/passwd文件中存在,加參數-R可以直接將目錄下的所有子目錄或文件同時更改文件擁有者)

# cp 源文件 目標文件(複製文件)

# chmod [-R] rwx 文件或目錄(更改文件權限,rwx爲三組屬性每組內rwx相加結果,如770 代表 rwxrwx---)

# pwd(顯示當前所在目錄,print working directory)

# mkdir [目錄名稱](創建目錄)

# rmdir [目錄名稱](刪除目錄)

# rm [-fir] [文件名](刪除文件或目錄,參數說明:-i 爲提供用戶確認,此爲默認值;-r 爲循環刪除,直到沒有東西爲止;-f 爲force,強制刪除。如 rm –rf test爲連續刪除該目錄下的所有文件與目錄)

# mv [-u] [源文件] [目標文件](可用來移動文件或更改文件名;參數說明:-u 爲update簡寫,當源文件比目標文件還新時纔會動作!可用來測試新舊文件,看是否需要搬移)

# cat 由第一行開始顯示文件內容,讀取文本文件

# tac 從最後一行開始顯示,可以看出 tac 是 cat 的倒寫

# nl 顯示時同時輸出行號

# more 一頁一頁地顯示文件內容

# less 與more 類似,但是比 more 更好的是,可以往前翻頁

# head 只看頭幾行

# tail 只看末尾幾行

# od 以二進制的方式讀取文件內容

# touch命令參數可更改文檔或目錄的日期時間,包括存取時間和更改時間。

# chattr  設定文件隱藏屬性

# lsattr  顯示文件隱藏屬性

# which 查看可執行文件的位置(通過PATH環境變量到該路徑內可執行文件)

# whereis 查看文件的位置

# locate 配合數據庫查看文件位置

# find 實際搜尋硬盤查詢文件名稱

# grep ^[w-z] /etc/* (在/etc裏,只要句首是w-z的就將它列出來)

21.    硬鏈接和符號鏈接(軟鏈接)

Block是記錄文件內容數據的區域,它是磁盤可以記錄的最小單位,由數個扇區組成;

inode則是記錄該文件的屬性及其放置在哪個Block之內的信息。每個文件都會佔用一個inode。

當系統要讀取某個文件時,它會先讀inode table,然後根據inode的信息到數據區域將數據取出備用。

硬鏈接:在原有的inode引用上加一;限制:(1)不能跨文件系統,因爲不同的文件系統有不同的inode table;(2)不能鏈接目錄

符號鏈接:建立了一個inode,用來指向源文件的inode,類似快捷方式。當源文件被刪除,符號鏈接的文件就打不開了。

區別:(1)硬鏈接的源文件和鏈接文件共用一個inode,而軟鏈接源文件和鏈接文件擁有不同的inode;(2)在文件屬性上,軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出;(3)文件大小不同,硬鏈接文件顯示的大小與源文件相同,軟鏈接顯示的大小與源文件不同(較小)。

命令: ln [-s] [源文件] [目標文件]

參數說明:-s :提供符號鏈接,如果直接使用ln而不加任何參數,就屬於硬鏈接。

22.    vi是Unix/Linux默認的字處理軟件,分爲3種模式:

一般模式:以vi處理文件時,已進入該文件就是一般模式,可處理刪除、複製、粘貼等動作,無法編輯;

編輯模式:在一般模式下按下i,I,o,O,a,A,r,R等字母之後纔會進入編輯模式,按下Esc鍵回到一般模式;

命令行模式:在一般模式中,輸入“:”、“/”就可以將光標移動到最末一行。可查找數據、讀取、存盤、大量字符替換、退出vi、顯示行號等。

23.    常用vi指令

一般模式

Ctrl + f

屏幕向前翻動一頁

Ctrl + b

屏幕向後翻動一頁

0

數字0表示移動到這一行的第一個字符處

$

移動到這一行的最後一個字符處

G

移動到這個文件的最後一行

n<Enter>

光標向下移動n行

/word

在光標之後查找一個名爲word的字符串

:n1,n2s/word1/word2/g

在第n1與n2行之間查找word1這個字符串,並將該字符串替換爲word2

:1,$s/word1/word2/g

從第一行到最後一行查找word1這個字符串,並將該字符串替換爲word2

:1,$s/word1/word2/gc

從第一行到最後一行查找word1這個字符串,並將該字符串替換爲word2,且在替換前顯示提示符讓用戶確認(confirm),之後彈出 replace with word2 (y/n/a/q/l/^E/^Y)?

The "y" and "n" are self-explanatory, but what about the rest? To tell Vim to go ahead and replace all instances of the matched string, answer with a. If you realize that you don't really want to make the changes, you can tell Vim to quit the operation using q. To tell Vim to make the current change and then stop, use l, for last.

^E and ^Y allow you to scroll the text using Ctrl-e and Ctrl-y.

x, X

x爲向後刪除一個字符,X爲向前刪除一個字符

dd

刪除光標所在的那一行(實際並未刪除,相當於剪切,按p會粘貼剛纔刪除的內容)

ndd

刪除光標所在行的向下n行

yy

複製光標所在行

nyy

複製光標所在行的向下n行

p,P

p爲複製的數據粘貼在光標下一行,P則爲粘貼在光標上一行

J

將光標所在行與下一行的數據結合成一行

u

恢復前一個動作

編輯模式

i, I

插入:在當前光標所在處插入輸入的文字,已存在的字符會向後退

a, A

添加:由當前光標所在處的下一個字符開始輸入,已存在的字符會向後退

o, O

插入新的一行:從光標所在處的下一行行首開時輸入字符

r, R

替換:r會替換光標所指的那一個字符,R會一直替換光標所指的文字,直到按下Esc爲止

Esc

退出編輯模式,回到一般模式

命令行模式

:w

將編輯的數據寫入硬盤文件中

:q

退出vi;若曾修改過文件,又不想保存,使用:q! 爲強制退出不保存文件

:wq

保存後退出,若爲:wq!,則爲強制保存後退出

 

24.    BASH Shell = Bourne(人名) Again Shell(Linux使用的shell,也是GNU操作系統中標準的shell)主要優點如下:

(1)命令編輯能力:能記憶使用過的命令,但若黑客入侵,只需翻查執行過的指令(如MySQL的密碼),就可能破解Linux主機;

(2)補全功能:指令補全和文件名稱補全;

(3)命令別名(alias)設定功能:輸入alias可查看當前的命令別名,可用形如

“alias lm=’ls -al’”設定別名;(注:lm、=、’ls -al’間不能有空格);

(4)作業控制、前景背景控制

(5)Shell scripts的強大功能:將頻繁輸入的連續指令寫成一個文件,也可藉由shell提供的環境變量及相關指令編寫一個小型的程序語言。

25.    root的根目錄在/root下,一般用戶的根目錄則在/etc/passwd文件中設定。

26.    變量就是以一組文字或符號取代一些設定或一串數據。

27.    顯示變量要用到echo指令,Linux系統預設變量名稱前會加一個$符號,如以 echo $PATH可顯示PATH變量的具體內容。

28.    Linux默認情況下,使用大寫字母設定的變量一般都是系統的預設變量。使用指令env可以查看當前系統中的主要環境變量。set指令可以將當前系統中所有的變量數據都讀出來。登入Linux後會取得一個PID,而該次的設定將只對這個PID及其子程序有關。另外,這次登入所做的變量設定,如果沒有影響配置文件,那麼此次設定的變量在下次登入時將被取消(因爲程序PID不見了)。所以,如果想每次登入時自動設定好變量,必須將設定寫入登入時加載的配置文件。

29.    設定變量時需要注意一下規則:

(1)等號兩邊不能直接接空格符;

(2)若該變量爲擴增變量內容時,則需以雙引號及$變量名稱(如“$PATH”:/home)繼續累加內容;

(3)若該變量需要在其他子程序執行,則以export使變量可以動作,如export PATH。

30.    在設定變量時,單引號與雙引號有什麼不同?

答:最大不同在於雙引號仍然可以保留變量的內容,但單引號內僅能是一般字符,即用單引號括起來後,變量失去了原有的意義,只是普通的字符組合而已。

31.    在一串指令中,在 ` 之內的指令將被首先執行,而其執行結果將作爲外部的輸入信息。

32.    如果要執行上一個指令,除了使用上下鍵外,還可以直接以!!來表示;要執行第n條指令,可以使用!n表示。

33.    如果需要將當前的配置文件內容讀入一次,需要重新註銷再登錄;若想不註銷而直接讀入變量配置文件,使用“source 變量配置文件”即可。

34.    用“echo $?”輸出的結果代表前一個執行的指令內容有沒有錯誤,如果有錯誤就返回1,沒有錯誤就返回0。

35.    要執行上一層目錄中的命令,可以輸入“../command”,其中的command指的是存在的可執行文件

36.    在執行文件時,系統默認是不主動搜尋當前目錄下的執行文件,而是按照PATH的設定搜尋。要執行當前目錄下的執行文件,使用“./command”即可。

37.    命令重定向就是將目前所得數據轉到其他地方。

# ls –al > list.txt 注:將顯示結果輸出到list.txt文件中,若該文件已存在則予以取代

# ls –al >> list.txt注:將顯示結果累加到list.txt文件中,該文件爲累加的,舊數據保留

# ls –al 1> list.txt 2> list.err 注:將顯示數據正確輸出到list.txt,錯誤的數據輸出到list.err

# ls –al 1> list.txt 2> &1注:將顯示數據不論正確或錯誤均輸出到list.txt中,注意,錯誤與正確信息輸出到同一個文件中,則必須這樣寫,不能寫成其他格式!

# ls –al 1> list.txt 2> /dev/null注:將顯示的數據,正確的輸出到list.txt,錯誤的數據予以丟棄!

38.    什麼時候需要使用命令輸出重定向?

答:(1)當屏幕輸出的信息很重要,而且需要將它保存時;

(2)背景執行中的程序,不希望它干擾屏幕正常的輸出結果時;

(3)一些系統的例行性命令(如寫在/etc/crontab[crontab命令用於設置週期性被執行的指令]中的文件)的執行結果,希望它可以保存下來時;

(4)一些執行命令,已知道可能的錯誤信息,想將其丟棄時;

(5)錯誤信息與正確信息需要分別輸出時。

39.    如果數據必需經過幾道手續之後才能得到想要的格式,需要使用pipe命令,其使用“|”界定符號,另外,pipe命令僅能處理經由前一個指令傳來的正確信息,也就是標準輸出信息,對於標準錯誤信息並沒有直接處理能力。

40.    環境變量文件的加載順序是什麼?

答:先由/etc/passwd取得bash,再到/etc/profile讀取主要的環境變量,同時將/etc/inputrc及/etc/profile.d內容讀入。之後,再到個人的根目錄讀取~/.bash_profile及~/.bashrc等文件。

41.    連續輸入命令時,“;&& ||”有何不同?

答:分號可以讓兩個command連續運作,不考慮command1的輸出狀態;&&則前一個指令必需沒有錯誤信息,亦即返回值需爲0,則command2纔會被執行;||則與&&相反。

42.    常見文件壓縮名後綴:

*.Z                     compress程序壓縮的文件;

*.bz2               bzip2 程序壓縮的文件;

*.gz                   gzip程序壓縮的文件;

*.tar                 tar程序打包的數據,沒有壓縮過;

*.tar.gz            tar程序打包的文件,並且經過 gzip 的壓縮。

bzip2, gzip與 compress 在沒有加入特殊參數時,原先的文件會被取代掉,但是使用 tar 則原來的與後來的文件都會存在。

43.    腳本的後綴名最好爲.sh;但並非加上.sh就是可執行文件,還需要查看其屬性中是否有x屬性。

44.    調試腳本的命令:# sh[-nvx] scripts

-n:不執行腳本,查詢腳本內的語法,若有錯誤則列出

-v:在執行腳本之前,先將腳本的內容顯示在屏幕上

-x:將用到的腳本內容顯示在屏幕上,與-v稍微不同

45.    shell腳本代碼示例

#!/bin/bash

# Thisscript is written to show the basic grammar that shell uses.

#Date:2016/01/09

#Author:lyn

declare-i year=2016

echo"enter the month:(int)"

 

readmonth

if ["$month" = "1" ] && [ "$year" !="" ]; then

         echo "It's January,$year"

elif ["$month" = "1" ]; then

         echo "It's February"

else

         echo "Lucky to know you"

fi

 

case $1in

  bird)

                echo"bird is flying"

                ;;

  fish)

                echo"fish is swimming"

                ;;

  *)

           echo "you are thinking"

esac

 

account=$(cut-d ":" -f1 /etc/passwd|sort)

echo"The following are accounts existing in your linux server:"

for i in$account

do

         echo $i

done

保存文件爲lyn.sh,並在Linux執行輸出結果(部分)如下:


發佈了26 篇原創文章 · 獲贊 68 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章