Linux Command Line 筆記(1)

来源:http://www.cnblogs.com/iamdaqiao/archive/2016/01/03/Linux-Command-Line-1.html
-Advertisement-
Play Games

Yunduan CUIgraphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possiblePart 1 學習Shell1. 什麼是 Shell?Shell...


Yunduan CUI

graphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possible

Part 1 學習Shell

1. 什麼是 Shell?

Shell 是用戶與操作系統交流的程式,它讀取用戶的鍵盤輸入並交由操作系統執行相應的命令。所有linux都支持一個叫做 bash 的shell,它的全稱是 “Bourne Again SHell”,bash 的前身是由 Steve Bourne 寫的sh。

當我們使用Shell的時候,我們實際上需要另一個叫做 terminal emulator 的程式與shell進行交互,也就是我們常見的一個叫做終端的程式。(終端可以選擇不同的Shell)

2. 巡航

巡航linux的文件系統,常用命令為:

  • ls:顯示當前工作目錄的文件
  • cd: 更改工作目錄
  • pwd:顯示當前工作目錄名稱

linux使用一個基於樹德文件系統。不同於windows把每一個磁碟都看做是獨立的文件系統,linux 總是保持一個文件系統。

在使用cd命令時,cd 直接返回預設目錄,cd ~user_name 返回對應用戶的預設目錄,cd - 返回之前的目錄。另外 . 表示當前目錄,..表示父目錄

使用ls命令時預設是不顯示隱藏文件的,要顯示它們 使用 ls -a

3. 探索文件

使用ls的更多技巧,ls支持顯示指定文件夾內容,也支持顯示兩個文件夾的內容。使用 ls -l 可以顯示文件的長格式。-t 可以按照更改時間對文件進行排序。其他比較有用的選項:
* -F 特別標註/在文件夾名後 -r 反向用字母表顯示 -S 以文件大小排序 -t 以更改時間排序

關於文件的長格式

其中第一列 是文件訪問許可權 第一個字母:- 代表常規文件 d 代表文件夾 l 代表連接文件 接下來三個字母是對文件擁有者的許可權 再接下來三個字母是對同組成員的許可權,最後三個是對所有人的許可權 r代表讀 w代表寫 x代表執行 第二列表示文件個數(對於文件夾,文件的話自然是1) 第三列表示擁有者 第四列表示屬於的組 第五列表示文件大小(bytes) 第六列是創建日期 第七列是文件名

確定文件類型

使用 file 命令確定文件類型

讀取文件內容

使用 less 命令讀取文件內容, 進入內容後的操作如下:
Page Up/b 前滾一頁
Page Down/空格 後滾一頁
上/下箭頭 前滾/後滾一行
G 移動到文件尾
1G/g 移動到文件頭
/【characters】 前向查找【characters】
n 找到下一個查找目標
h 顯示幫助
q 退出

less 的前身叫做 more,之所以取這個看起來相反的名字是因為 Less is more

介紹文件系統

目錄名 介紹
/ 根目錄
/bin Contains binaries 存放系統的程式
/boot 有關啟動的信息,初始化的 RAM與硬碟鏡像,以及linux內核
/dev 存放驅動程式
/etc 存放系統,程式的配置文件,和shell script
/home 給用戶使用的文件夾,一般用戶只需要在這個文件件內工作
/lib 所有程式使用的庫文件(有點像windows的DLL文件)都在這裡
/lost+found 被格式化的linux文件系統才會有這個文件夾,可以用來部分的恢覆文件。除非發生了糟糕的事情,它一般是空的
/mnt 只出現在老的linux上,用來存放可移動設備的驅動
/opt 可選的程式都放在這裡,這裡一般存放用戶後來安裝的程式
/proc 這是一個特殊的文件夾。它是一個虛擬文件夾,相當於一個通向linux內核的窺視孔,你可以從裡面的文件看到內核是如何看當前這一臺PC的
/root root 賬號的目錄
/sbin 超級用戶使用,內含核心系統程式
/tmp 臨時文件存放處
/usr 一般來說都是最大的一個文件夾,含有所有常規用戶使用的程式和文件
/usr/bin 存放安裝的linux可執行文件
/usr/lib 用戶安裝文件使用的庫文件
/usr/local 用戶安裝的程式,一般從源碼編譯的文件都裝在這裡
/usr/sbin 存放安裝的管理員程式
/usr/share 存放/usr/share中程式共用的文件
/usr/share/doc 一般安裝的一些包都含有文檔,就放在啊這裡
/var 也是用來存放經常被更改的文件,例如用戶郵件
/var/log 存放日誌文件

Symbolic Links

Linux中獨特的一種文件形式,可以連接到其他文件。也叫做軟式連接 soft link,他可以方便我們更新某些組件的版本,因為link可以當做是變數名一樣。

4. 操作文件與目錄

本節我們將介紹命令:

  • cp:拷貝文件/目錄
  • mv: 移動 or 重命名 文件/目錄
  • mkdir:創建目錄
  • rm:刪除文件/目錄
  • ln:創建link

通配符 (wildcards)

星號* 對應所有的符號(含複數個)
?對應所有的單個符號
[character]對應任意一個屬於括弧內集合的符號
[!character]對應任意一個不屬於括弧內集合的符號
[[:class:]]對應任意一個屬於該類型的符號,類型為:

[:alnum:] 對應所有字母數字
[:alpha:] 對應所有字母
[:digit:] 對應所有數字
[:lower:] 對應所有小寫字元
[:upper:] 對應所有大寫字元

一些通配符的例子:

*               所有文件
g*          所有以字母 g 開頭的文件
b*.txt      所有以字母 b 開頭且結尾是 .txt 的文件
Data???     所有以 Data 開頭,後面接著三個符號的文件
[abc]*      所有以 a 或者 b 或者 c 開頭的文件
BACKUP.[0-9][0-9][0-9]  所有已 BACKUP. 開頭後接三個數字的文件
[[:upper:]]*    所有以大寫字母開頭的文件
[![:digit:]]*   所有以非數字開頭的文件
*[[:lower:]123] 所有以小寫字母或者 1  或者 2 或者 3 結尾的文件

mkdir 創建目錄

我們可以單獨創建一個目錄 或者連續創建多個目錄:

mkdir dir1
mkdir dir1 dir2 dir3

cp 拷貝文件

將文件/目錄 1 拷貝至 文件/目錄2:

cp item1 item2

拷貝複數個文件/目錄到一個目錄:

cp item... directory

cp命令的選項有:

-d 複製相同的符號連接
-p 複製相同的文件屬性
-R 遞歸複製目錄下的所有文件
-a 等於-dpR
-i 互動式拷貝,在需要覆蓋原有文件之前詢問用戶
-u 只複製目標目錄中沒有的文件
-v 詳細顯示操作的消息

mv 移動或者重命名文件

-i 互動式拷貝,在需要覆蓋原有文件之前詢問用戶
-u 只複製目標目錄中沒有的文件
-v 詳細顯示操作的消息

rm 刪除文件

-i 互動式刪除,在動作之前詢問
-f 無提示不檢查暴力刪除
-v 顯示詳細操作信息

rm 的使用是比較危險的,註意空格會造成截然不同的結果:
      rm *.html 將會刪除所有目錄下的 html 格式文件,然而如果我們錯誤的使用了一個空格
rm * .html 將會刪除全部目錄下的文件並提示找不到文件 .html

ln 創造鏈接

ln file link
註意軟硬鏈接的不同,一般我們使用軟鏈接就好.

5. 使用命令工作

命令的種類可以分為:

  1. 可執行程式
  2. shell 自建的命令
  3. shell 方程
  4. 一個其他命令的代稱

  顯示命令的種類 type

type command

顯示可執行命令的位置 which

which command

獲取命令的幫助 help

help command

這是一個非常重要的命令,可以用來學習大量的命令

有一些命令支持使用

command --help

來獲取幫助信息。

獲取可執行命令的手冊 man

man 命令可以獲得命令的完全手冊, 很多手冊都非常凶殘且難以閱讀 比如 bash 的。

man program

apropos 命令獲得一個粗略的模糊的潛在搜索名單

apropos command

簡化版的手冊 whatis

使用 whatis 可以獲得簡短的幫助文件

whatis program
>ls(1)                    - list directory contents

另一個可選的手冊 info

用法和 man 一樣。

使用 alias 製作自己的命令

語法:

alias name='string'

這裡舉一個例子,我們要進入 /usr 目錄,運行 ls 然後在返回之前的目錄,即:

naist-wavenet125-052:~ YunduanCUI$ cd /usr;ls;cd -
X11     bin     libexec     sbin        standalone
adic        lib     local       share
/Users/YunduanCUI
naist-wavenet125-052:~ YunduanCUI$ 

我們使用一個沒有被占用的名稱 foo 來建立這個聯合命令:

alias foo='cd /usr; ls; cd -'
naist-wavenet125-052:~ YunduanCUI$ foo
X11     bin     libexec     sbin        standalone
adic        lib     local       share
/Users/YunduanCUI
naist-wavenet125-052:~ YunduanCUI$ 

此時我們檢查 foo 的類型就會發現:

naist-wavenet125-052:~ YunduanCUI$ type foo
foo is aliased to `cd /usr; ls; cd -'

抹去這個自定義的命令,使用:

unalias name

6. 重定向 Redirection

本節我們學習輸入輸出的重定向 I/O Redirection, 學習的命令包括:

    cat         連接文件
    sort        排列
    uniq        報告或刪除重覆行
    grep        列印符合要求的行
    wc          向文件中輸入
    head        輸出文件首的部分
    tail        輸出文件尾的部分
    tee         標準輸入輸出

命令的交互包括輸入輸出和錯誤信息。因為UNIX中所有的物件都是文件,所以實際列印在屏幕上的也是標準的輸出,只是這些沒有被保存為磁碟上的文件。

標準輸出重定向

標準輸出重定向的符號是 >

    naist-wavenet125-052:~ YunduanCUI$ ls -l > ~/ls-output.txt

之後就生成了相應的文件,註意這裡就不在有屏幕顯示了。將生成的文件作為標準輸入的話,我們可以使用 ls 命令來直接查看它的文件狀態:

    naist-wavenet125-052:~ YunduanCUI$ ls -l ls-output.txt 

如果要查看,我們使用 less 命令:

    naist-wavenet125-052:~ YunduanCUI$ less ls-output.txt 

標準錯誤重定向

使用運算符 2>

    naist-wavenet125-052:~ YunduanCUI$ ls -l /bin/usr 2> ls-error.txt

如果同時需要重新定向標準輸出和錯誤輸出的話,可以使用

    naist-wavenet125-052:~ YunduanCUI$ ls -l /bin/usr > ls-output.txt 2>&1

即輸出的錯誤重定向到當先的標準輸出位置(已經被重新定向過了),這樣的話,沒有錯誤就輸出標準輸出,有錯誤就輸出標準錯誤輸出。

當前的bash提供另一個方式來重定向輸出和錯誤:

    naist-wavenet125-052:~ YunduanCUI$ ls -l /bin/usr &> ls-output.txt

清除不想要的輸出

當你不想看到輸出的錯誤信息時,可以重定向它們到比特桶里:

    naist-wavenet125-052:~ YunduanCUI$ ls -l /bin/usr 2> /dev/null

重定向標準輸入

使用cat連接文件

cat實質上會把第一個參數的文件直接輸出,在你沒有指定第二個目標文件的參數時,它選擇將第一個參數文件的內容列印到屏幕上。如果不給參數的話,cat進入輸入模式,無論輸入什麼,它都直接將輸入列印到屏幕。

naist-wavenet125-052:~ YunduanCUI$ cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.

實現了將輸入內容重定向到指定文件。

管道

管道 | 可以直接將第一個命令的輸出傳遞到第二個命令的輸入。

naist-wavenet125-052:~ YunduanCUI$ ls -l /usr/bin | less

要註意與重定向的不同,重定向連接的是命令與文件而管道連接的是命令的輸出和另一個命令的輸入。

過濾器

使用sort來進行預先排序

naist-wavenet125-052:~ YunduanCUI$ ls /bin /usr/bin | sort | less

使用uniq來消除重覆行

naist-wavenet125-052:~ YunduanCUI$ ls /bin /usr/bin | sort | uniq | less

使用 uniq -d 來查看重覆內容

naist-wavenet125-052:~ YunduanCUI$ ls /bin /usr/bin | sort | uniq -d | less 

使用 wc 來計算行數字數比特數

naist-wavenet125-052:~ YunduanCUI$ wc ls-output.txt
   1       7      40 ls-output.txt

輸出表示有一行七個字元共40比特,使用 wc -l 可以只計算行數

grep 尋找指定行

naist-wavenet125-052:~ YunduanCUI$ ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
bzip2recover
funzip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipdetails
zipdetails5.16
zipdetails5.18
zipgrep
zipinfo
zipnote
zipsplit

尋找帶 zip 的行。

使用 head 和 tail 命令來選擇開頭或結尾的內容

    head -n 5
    tail -n 5

指定行數選擇內容。

    tail -f

動態顯示當前更新的行尾。

使用 shell

本章我們著重講一個命令 echo,它的作用是輸出一行文檔。

naist-wavenet125-052:~ YunduanCUI$ echo this is a test
this is a test

shell 完全支持正則表達式,使用 *,我們得到:

naist-wavenet125-052:~ YunduanCUI$ echo *
Applications Desktop Documents Downloads Dropbox Google 雲端硬碟 Library LinuxScript Movies Music Pictures Public Python Python_space TEXex Ten Thumbs Students VirtualBox VMs email feedparser-5.1.3 lazy_dog.txt ls-error.txt ls-output.txt nusers python.vim ros_catkin_ws src subl testDigits trainingDigits unixstuff vim vimtext vimtext2 wordpress 百度雲同步盤

可以靈活的使用,像:

naist-wavenet125-052:~ YunduanCUI$ echo D*
Desktop Documents Downloads Dropbox
naist-wavenet125-052:~ YunduanCUI$ echo *s
Applications Documents Downloads Movies Pictures Ten Thumbs Students VirtualBox VMs nusers ros_catkin_ws testDigits trainingDigits wordpress
naist-wavenet125-052:~ YunduanCUI$ echo [[:upper:]]*
Applications Desktop Documents Downloads Dropbox Google 雲端硬碟 Library LinuxScript Movies Music Pictures Public Python Python_space TEXex Ten Thumbs Students VirtualBox VMs
naist-wavenet125-052:~ YunduanCUI$ echo /usr/*/share
/usr/X11/share /usr/local/share

波浪號的使用

~ 表示當前用戶的 home 目錄

naist-wavenet125-052:~ YunduanCUI$ echo ~
/Users/YunduanCUI

算數擴張

naist-wavenet125-052:~ YunduanCUI$ echo $((2+2))
4

使用時要註意數學表達式的專用形式 $((expression)), 支持加減乘除取模和乘方(**)運算。

中括弧擴張

中括弧擴張讓格式化重覆字元變得可能:

naist-wavenet125-052:~ YunduanCUI$ echo Front-{A,B,C}-back
Front-A-back Front-B-back Front-C-back

註意{}內部和之間不可以有空格。使用 ... 可以更加方便的計數:

naist-wavenet125-052:~ YunduanCUI$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
naist-wavenet125-052:~ YunduanCUI$ echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

聯合起來使用:

naist-wavenet125-052:~ YunduanCUI$ echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b

naist-wavenet125-052:~ YunduanCUI$ mkdir Photos
naist-wavenet125-052:~ YunduanCUI$ cd Photos/
naist-wavenet125-052:Photos YunduanCUI$ ls
naist-wavenet125-052:Photos YunduanCUI$ mkdir {2012..2016}-{01..12}
naist-wavenet125-052:Photos YunduanCUI$ ls
2012-1  2012-8  2013-6  2014-4  2015-2  2016-11
2012-10 2012-9  2013-7  2014-5  2015-3  2016-12
2012-11 2013-1  2013-8  2014-6  2015-4  2016-2
2012-12 2013-10 2013-9  2014-7  2015-5  2016-3
2012-2  2013-11 2014-1  2014-8  2015-6  2016-4
2012-3  2013-12 2014-10 2014-9  2015-7  2016-5
2012-4  2013-2  2014-11 2015-1  2015-8  2016-6
2012-5  2013-3  2014-12 2015-10 2015-9  2016-7
2012-6  2013-4  2014-2  2015-11 2016-1  2016-8
2012-7  2013-5  2014-3  2015-12 2016-10 2016-9

參數擴張

echo 也可以用來顯示參數名,使用$即可:

naist-wavenet125-052:~ YunduanCUI$ echo $USER
YunduanCUI

顯示了自己的名稱,如果參數不存在,則什麼也不顯示。

與命令行的聯動


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有一段時間,正則表達式學習很火熱很潮流,當時在CSDN一天就能看到好幾個正則表達式的帖子,那段時間藉助論壇以及Wrox Press出版的《C#字元串和正則表達式參考手冊》學習了一些基礎的知識,同時也為我在CSDN大概賺了1000分,今天想起來,去找《C#字元串和正則表達式參考手冊》時,已經不知所蹤了...
  • 最近公司一個項目上線後,經常崩潰,於是開始重視性能問題,在網上看到了許多相關文章,整理下發了上來。以備參考。在用ASP.NET開髮網站的時候,性能是永遠需要考慮和關註的問題,性能不僅僅只是程式代碼執行時候的速度,而是涉及到方方面面的東西。就拿ASP.NET的一個請求來講,從瀏覽器向伺服器的ASP.N...
  • 反射(Reflection)是.NET中的重要機制,通過放射,可以在運行時獲得.NET中每一個類型(包括類、結構、委托、介面和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還可以獲得每個成員的名稱、限定符和參數等。有了反射,即可對每一個類型瞭如指掌。如果獲得了構造函數的信息,即可直接創建對象...
  • 1.自治視圖 在早期(作者也沒說明是多早,自己猜吧),我們傾向於將所有與UI相關的操作糅合在一起(現在我身邊還有很多人這樣做),這些操作包括UI界面的呈現、用戶交互操作的捕捉與響應(UI處理邏輯)、業務流程的執行及對數據的存取等,我們將這種設計模式稱為自治視圖(AV)。 自治視圖在應用程式的重用性、...
  • Linq一共包含五十幾個查詢運算符,常用的根據類型來區分一共有5類左右,這五類裡面一些事在項目查詢中經常用到的。不過linq運算符的命名十分規範,基本從字面意思就能猜測出來是幹嘛用的,下麵我們挑選一些常用的來介紹一下。根據分類我們能分成下麵4種類型:1.返回IEnumerable類型的 1.1...
  • samba伺服器與遠程登錄ssh
  • 標簽:fdisk分區概述我們管理的伺服器可能會隨著業務量的不斷增長造成磁碟空間不足的情況,在這個時候我們就需要增加磁碟空間,本章主要介紹如何使用fdisk分區工具創建磁碟分區和掛載分區,介紹兩種情況一種是對原有的磁碟的剩餘空間增加分區,第二種是對新添加的磁碟進行分區操作。擴展空間查看當前分區信息fd...
  • deepin linux 簡單配置
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...