Linux語法(不完整)

Linux語法學習

工作中需要用到linux做mongodb的一些事情。學一下linux。

對服務器來說,圖形界面會佔用更多的系統資源,而且會安裝更多的服務、開放更多的端口,這對服務器的穩定性和安全性都有負面影響。

命令提示符

[root@localhost ~]#

這是Linux系統的命令提示符。

  • []:提示符的分隔符號 root:顯示的是當前的登錄用戶,現在使用root用戶登錄 @:分隔符號
  • localhost:當前系統的簡寫主機名(完整的主機名是localhost.localdomain)
  • ~:代表用戶當前所在的目錄,此例中用戶當前所在的目錄是家目錄。
  • #:命令提示符,Linux用這個符號標識登錄的用戶權限等級。如果是超級用戶,提示符是#,普通用戶的提示符是$.

家目錄是什麼? Linux 系統是純字符界面,用戶登錄後,要有一個初始登錄的位置,這個初始登錄位置就稱爲用戶的家:

  • 超級用戶的家目錄:/root/。
  • 普通用戶的家目錄:/home/用戶名/。

命令的基本格式

[root@localhost~]# 命令[選項][參數]

選項分短格式和長格式,如-l,–all

1.IS命令:顯示當前目錄下的文件

[root@localhost ~]#ls [選項][文件名或目錄名]
  1. -a 顯示全部文件,(隱藏文件)
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# Is -a
.anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history .viminfo ...bash_history .bash_profile .cshrc install.log.syslog .tcshrc
  1. -l 選項,顯示文件詳細信息
[root@localhost ~]# ls -l
總用量44
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root 24772 1 月 14 18:17 install.log
-rw-r-r--.1 root root 7690 1 月 14 18:17 install.log.syslog
#權限 引用計數 所有者 所屬組 大小 文件修改時間 文件名
  1. -d 查看某個目錄的詳細信息
[root@localhost ~]# ls -l /root/
總用量44
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root 24772 1 月 14 18:17 install.log
-rw-r-r--.1 root root 7690 1 月 14 18:17 install.log.syslog

這個命令會顯示目錄下的內容,而不會顯示這個目錄本身的詳細信息。如果想顯示目錄本身的信息,就必須加入"-d"選項。

[root@localhost ~]# ls -ld /root/
dr-xr-x---.2 root root 4096 1 月 20 12:30 /root/
  1. -h habit
    “ls-l"顯示的文件大小是字節,但是我們更加習慣的是千字節用 KB 顯示,兆字節用 MB 顯示,而”-h"選項就是按照人們習慣的單位顯示文件大小的,例如:
[root@localhost ~]# ls -lh
總用量44K
-rw-------.1 root root1.2K 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root25K 1 月 14 18:17 install.log
-rw-r-r--.1 root root7.6K 1 月 14 18:17 install.log.syslog

2.CD 命令

命令格式

[root@localhost ~]# cd[目錄名]

基本用法

1.cd命令切換目錄只需在命令後加目錄名即可,

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]#
#進入/usr/local/src/目錄

2.簡化用法

  • ~:代表用戶的家目錄
  • -:代表上次所在的目錄
  • .:代表當前目錄
  • …:代表上級目錄

絕對路徑和相對路徑

  • 絕對路徑:從根目錄開始,一級一級指定的
  • 相對路徑:只從當前目錄開始,切換目錄。

3.mkdir 命令:創建目錄(文件夾)

命令格式

[root@localhost ~]# mkdir

常見用法

  1. 建立目錄
[root@localhost ~]#mkdir cangls
[root@localhost ~]#Is

我們建立一個名爲 cangls 的目錄,通過 ls 命令可以査看到這個目錄已經建立。注意,我們在建立目錄的時候使用的是相對路徑,所以這個目錄被建立到當前目錄下。

  1. 遞歸建立目錄
    如果需要建立一系列的新目錄,則需要加入"-p"選項,遞歸建立纔可以。例如:
[root@localhost~]#mkdir -p lm/movie/jp/cangls
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog lm
[root@localhost ~]# ls lm/
movie
#這裏只查看一級子目錄,其實後續的jp目錄、cangls目錄都已經建立

4.rmdir 命令

命令格式

[root@localhost~]# rmdir[選項]目錄名

選項:
-p:遞歸刪除目錄

常見用法

[root@localhost~]#rmdir cangls

刪除目錄,命令後面加目錄名稱即可。既然可以遞歸建立目錄,當然也可以遞歸刪除目錄。例如:

[root@localhost ~]# rmdir -p lm/movie/jp/cangls/

但 rmdir 命令的作用十分有限,因爲只能刪除空目錄,所以一旦目錄中有內容,就會報錯。後續不論刪除文件還是目錄,都用rm.

5.touch 修改文件的時間戳

命令格式

[root@localhost~]# touch[選項]文件名或目錄名
選項

  • -a:只修改文件的訪問時間(Access Time)
  • -c:如果文件不存在,則不建立新文件
  • -d:把文件的時間改爲指定的時間
  • -m:只修改文件的數據修改時間(Modify Time)

Linux 中的每個文件都有三個時間,分別是訪問時間(Access Time)、數據修改時間(Modify Time)和狀態修改時間(Change Time)。這三個時間可以通過 stat 命令來進行査看。

不過,touch 命令只能手工指定只修改訪問時間,或是隻修改數據修改時間,而不能指定只修改狀態修改時間。因爲不論是修改訪問時間,還是修改文件的數據時間,對文件來講,狀態都會發生改變,即狀態修改時間會隨之改變。我們稍後講 stat 命令時再具體舉例。

注意,在Linux中,文件沒有創建時間。

常見用法

[root@localhost~]#touch bols
#建立名爲bols的空文件

6.stat 顯示文件或文件系統的詳細信息

命令格式

[root@localhost~]#stat [選項]文件名或目錄名

選項:

  • -f:查看文件所在的文件系統信息,而不是查看文件的信息。

常見用法

例1 查看文件的詳細信息

[root@localhost~]# stat anaconda-ks.cfg
File: "anaconda-ks.cfg"
#文件名
Size: 1170  Blocks: 8 IO Block: 4096 普通文件
#文件大小   佔用的block數 塊大小 文件類型
Device: 803h/2051d Inode: 130834 Links: 1
#i節點號 鏈接數
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
#權限 所有者 所屬組
Access: 2016-05-06 23:31:41.396893415 +0800
#訪問時間
Modify: 2016-05-06 23:31:41.396893415 +0800
#數據修改時間
Change: 2016-05-06 23:31:41.411006937 +0800
#狀態修改時間

例2 查看文件系統信息
如果使用-f選項,就不是查看制定文件的信息,而是查看這個文件所在文件系統的信息,例如:

[root@localhost ~]#stat -f anaconda-ks.cfg
File: "anaconda-ks.cfg"
ID: c05ad05e0e3b0580 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 5045314 Free: 4356956 Available: 4100662 Inodes: Total: 1283632 Free: 1192731
  1. 三種時間的含義
    查看系統當前時間,如下:
[root@localhost~]#data
2016年05月07日星期六01:40:49 CST

再查看bds文件的三種時間,可以看到,和當前時間是有差別的,如下:

[root@localhost~]#stat bols
File: "bols"
Size: 0 Blocks: 0   IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-05-07 00:10:23.794319970 +0800
Modify: 2016-05-07 00:10:23.794319970 +0800
Change: 2016-05-07 00:10:23.794319970 +0800
#這些時間都是最後一次修改文件的時間,並不是當前時間

7. Cat 連接文件並打印輸出到標準輸出設備

命令格式

[root@localhost~]# cat[選項]文件名
選項:
-A:相當於 -vET 選項的整合,用於列出所有隱藏符號;
-E:列出每行結尾的回車符 $;
-n:顯示行號;
-T:把 Tab 鍵 ^I 顯示出來;
-V:列出特殊字符;

常見用法

cat 命令用於査看文件內容,不論文件內容有多少,都會一次性顯示。如果文件非常大,那麼文件開頭的內容就看不到了。不過 Linux 可以使用PgUp+上箭頭組合鍵向上翻頁,但是這種翻頁是有極限的,如果文件足夠長,那麼還是無法看全文件的內容。

所以,cat 命令適合査看不太大的文件。當然,在 Linux 中是可以使用其他的命令或方法來査看大文件的,我們以後再來學習。cat 命令本身非常簡單,我們可以直接査看文件的內容。例如:
[root@localhost~]# cat anaconda-ks.cfg #Kickstart file automatically generated by anaconda. #version=DEVEL install cdrom lang zh一CN.UTF-8 …省略部分內容...
而如果使用"-n"選項,則會顯示行號。例如:
[root@localhost ~]# cat -n anaconda-ks.cfg 1 # Kickstart file automatically generated by anaconda. 2 3 4 #version=DEVEL 5 install 6 cdrom …省略部分內容...
如果使用"-A"選項,則相當於使用了"-vET"選項,可以査看文本中的所有隱藏符號,包括回車符 (KaTeX parse error: Expected 'EOF', got '#' at position 41: …ot@localhost ~]#̲ cat -A anacond…
$
$
#version=DEVEL$
install$
cdrom$
…省略部分內容…
``

8. more :分屏顯示文件內容

命令格式

[root@localhost~]#more 文件名
more 命令比較簡單,一般不用什麼選項,命令會打開一個交互界面,可以識別一些交互命令。常用的交互命令如下。
空格鍵:向下翻頁。
b:向上翻頁。
回車鍵:向下滾動一行。
/ 字符串:搜索指定的字符串。
q:退出。

9. head 顯示文件開頭的內容

命令格式

[root@localhost~]#head [選項]文件名

選項:

  • -n 行數: 從文件頭開始,顯示指定行數;
  • -v:顯示文件名;

常見用法

[root@localhost~]# head anaconda-ks.cfg [root@localhost~]# head -n 20 anaconda-ks.cfg [root@localhost~]# head -20 anaconda-ks.cfg

10. tail 顯示文件記爲的內容

命令格式

[root@localhost~]#tail [選項]文件名

選項:

  • -n 行數: 從文件尾開始,顯示指定行數;
  • -f: 監聽文件的新增內容

常見用法

1.基本用法
[root@localhost~]# tail anaconda-ks.cfg [root@localhost~]# tail -n 20 anaconda-ks.cfg [root@localhost~]# tail -20 anaconda-ks.cfg
2.監聽文件的新增內容
tail 命令有一種比較有趣的用法,可以使用"-f"選項來監聽文件的新増內容,例如:
[root@localhost ~]#tail -f anaconda-ks.cfg @server-platform @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end #光標不會退出文件,而會一直監聽在文件的結尾處
這條命令會顯示文件的最後 10 行內容,而且光標不會退出命令,而會一直監聽文件的結尾處,等待顯示新増內容。這時如果向文件中追加一些數據(需要開啓一個新終端),那麼結果如下:
[root@localhost ~]# echo 2222222222 >> anaconda-ks.cfg [root@localhost ~]# echo 3333333333 >> anaconda-ks.cfg #在新終端中通過echo命令向文件中追加數據
在原始的正在監聽的終端中,會看到如下信息。
[root@localhost ~]# tail -f anaconda-ks.cfg @server-platforin @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end2222222222 33333333333 #在文件的結尾處監聽到了新増數據

11. In :在文件之間建立鏈接(硬鏈接和軟連接)

http://c.biancheng.net/view/740.html

12. rm:刪除文件或目錄

命令格式

[root@localhost~]# rm[選項]文件或目錄

選項

  • -f:強制刪除
  • -i:交互刪除,在刪除之前會詢問用戶
  • -r:遞歸刪除,可以刪除目錄(recursive)

常見用法

  1. 基本用法
    rm 命令如果任何選項都不加,則默認執行的是"rm -i 文件名",也就是在刪除一個文件之前會先詢問是否刪除。例如:

[root@localhost~]# touch cangls [root@localhost~]# rm cangls rm:是否刪除普通空文件"cangls"?y #刪除前會詢問是否刪除
2. 刪除目錄。
如果需要刪除目錄,則需要使用"-r"選項。例如:

[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#遞歸建立測試目錄
[root@localhost ~]# rm /test/
rm:無法刪除"/test/": 是一個目錄
#如果不加"-r"選項,則會報錯
[root@localhost ~]# rm -r /test/
rm:是否進入目錄"/test"?y
rm:是否進入目錄"/test/lm/movie"?y
rm:是否刪除目錄"/test/lm/movie/jp"?y
rm:是否刪除目錄"/test/lm/movie"?y
rm:是否刪除目錄"/test/lm"?y
rm:是否刪除目錄"/test"?y
#會分別詢問是否進入子目錄、是否刪除子目錄

大家會發現,如果每級目錄和每個文件都需要確認,那麼在實際使用中簡直是災難!
3. 強制刪除
如果要刪除的目錄中有 1 萬個子目錄或子文件,那麼普通的 rm 刪除最少需要確認 1 萬次。所以,在真正刪除文件的時候,我們會選擇強制刪除。例如:

[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#重新建立測試目錄
[root@localhost ~]# rm -rf/test/
#強制刪除,一了百了

加入了強制功能之後,刪除就會變得很簡單,但是需要注意,數據強制刪除之後無法恢復,除非依賴第三方的數據恢復工具,如 extundelete 等。但要注意,數據恢復很難恢復完整的數據,一般能恢復 70%~80% 就很難得了。所以,與其把寶壓在數據恢復上,不如養成良好的操作習慣。

雖然"-rf"選項是用來刪除目錄的,但是刪除文件也不會報錯。所以,爲了使用方便,一般不論是刪除文件還是刪除目錄,都會直接使用"-rf"選項。

13. cp:複製文件和目錄

命令格式

[root@localhost~]#cp [選項] 源文件 目標文件

http://c.biancheng.net/view/746.html

14.mv:移動文件或改名

命令格式

[root@localhost ~]# mv 【選項】 源文件 目標文件

選項:

  • -f:強制覆蓋,如果目標文件已經存在,則不詢問,直接強制覆蓋;
  • -i:交互移動,如果目標文件已經存在,則詢問用戶是否覆蓋(默認選項);
  • -n:如果目標文件已經存在,則不會覆蓋移動,而且不詢問用戶;
  • -v:顯示詳細信息;

常見用法

  1. 移動文件或目錄
[root@localhost~]# mv canals /tmp/
#移動之後,源文件會被刪除,類似剪切
[root@localhost~]# mkdir movie
[root@localhost~]# mv movie /tmp/
#也可以移動目錄。和rm,cp不同的是,mv移動目錄不需要加入-r選項
  1. 強制移動
    之前說過,如果目標目錄下已經存在同名文件,則會提示是否覆蓋,需要手工確認。這時如果移動的同名文件較多,則需要一個一個文件進行確認,很不方便。

如果我們確認需要覆蓋已經存在的同名文件,則可以使用"-f"選項進行強制移動,這就不再需要用戶手工確認了。例如:

[root@localhost~]#touch cangls
#重新建立文件
[root@localhost~]#mv -f cangls /tmp/
#就算/tmp/目錄下已經存在同名文件,由於-f選項的作用,所以會強制覆蓋
  1. 不覆蓋移動
    既然可以強制覆蓋移動,那也有可能需要不覆蓋的移動。如果需要移動幾百個同名文件,但是不想覆蓋,這時就需要"-n"選項的幫助了。例如:
[root@localhost ~]# ls /tmp*ls
/tmp/bols /tmp/cangls
#在/tmp/目錄下已經存在bols、cangls文件了
[root@localhost ~]# mv -vn bols cangls lmls /tmp/
"lmls"->"/tmp/lmls"
#再向 /tmp/ 目錄中移動同名文件,如果使用了 "-n"選項,則可以看到只移動了 lmls,而同名的 bols 和 cangls 並沒有移動("-v"選項用於顯示移動過程)
  1. 改名
    如果源文件和目標文件在同一目錄中,那就是改名。例如:
[root@localhost ~]# mv bols lmls
#把 bols 改名爲 lmls

目錄也可以按照同樣的方法改名。
5. 顯示移動過程。
如果我們想要知道在移動過程中到底有哪些文件進行了移動,則可以使用"-v"選項來査看詳細的移動信息。例如:

[root@localhost ~]# touch testl.txt test2.txt test3.txt
#建立三個測試文件
[root@localhost ~]# mv -v *.txt/tmp/
"test1.txt" -> "/tmp/test1.txt"
"test2.txt" -> "/tmp/test2.txt"
"test3.txt" -> "/tmp/test3.txt"
#加入"-v"選項,可以看到有哪些文件進行了移動
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章