天天看點

The Linux Command LinePart 1 – Learning The ShellPart 2 – Configuration And The EnvironmentPart 3 – Common Tasks And Essential ToolsPart 4 – Writing Shell Scripts

This passage is about getting started with GNU/Linux by reading The Linux Command Line. Chinese version is available here. It’s an excellent introductory book of Linux. No more talk, let’s just get it started. If you want to see more details, read this book, because I will ignore many details of a commmand like “How many options do this command has ?” or “how to use every option of a command ?”.

我的環境: Unbuntu 18.04LTS virtual machine.

還是不用我那四級水準的英語了。這不是文檔,隻是筆記。詳細資訊請使用

man

或者檢視文檔。

Part 1 – Learning The Shell

shell

首先什麼是Shell?Shell翻譯為殼,是對應于核的概念,shell是CLI(Command Line Interface,與之對應的為GUI)的指令解析工具,類似于windows下的cmd。Shell讀取使用者從鍵盤的輸入,将其解釋為對應的指令,然後執行對應的程式。在Linux中,常用的Shell有Bash,這裡使用的即是Bash。

當使用GUI時,通常我們需要使用終端模拟器來和Shell互動。不同GUI叫法不太一樣,或Terminal(終端)或Console(控制台)或其他。

Terminal Emulators 終端模拟器

tiko@killing-boat:~$              #普通使用者
root@killing-boat:/home/tiko#     #superuser
           

鍵入每一條指令前的Shell提示符:

[email protected] : current-working-directory $

last character:

#

means superuser/administrator.

最簡單的幾條指令:

date

- display date

cal

- display the calender

df

- to see the current amount of free space on your disk drives

free

- display the amount of free memory

exit

- closing the terminal emulator window

The Console Behind The Curtain:

Pressing Ctrl-Alt-F1 through Ctrl-Alt-F6 to switch.

My machine : Ctrl-Alt-F1/F2 are GUIs, Ctrl-Alt-F3 to F6 are CLIs.

Command

Shell指令基本格式:

有的選項不需要參數像

ls -l

,有的選項參數可選,像

ls <file>

不給參數則使用預設參數

.

。有的指令可以帶多個參數。

選項分長選項與短選項,長選項如

--help

--

開頭,短選項如

-l

-

開頭。多個短選項可合并如

ls -alh

每個指令具體選項資訊、參考文檔可以通過以下幫助指令得到:

command --help  # 擷取指令幫助的選項,較為簡略
help command    # Shell内部指令幫助,僅對内部指令有效,比如cd
man command     # 指令手冊manual,常用
info command    # 比man更為詳細
           

Navigation

使用下面的指令在系統中遊走:

pwd

- Print name of current working directory

cd

- Change directory

cd ..         # 上一級
cd -          # 上一次工作目錄
cd ./subdir   # 子目錄
cd .          # 目前目錄
           

Linux中使用目錄(directory)而不使用檔案夾(folder)的概念。

檔案與目錄的路徑可以是絕對路徑(like

/root/code/me

)或者相對路徑(like

../mydir/mydir/file

./subdir/file

)。

ls

- List directory contents

ls dir-or-file-path  # default is .
           

常用選項:

ls -a   # 所有檔案與目錄,包括.開頭的隐藏檔案
ls -l   # 長格式
ls -h   # 檔案大小以人可讀的方式列出
ls -d   # 列出目錄本身,而不是其中的内容
ls -F   # 在檔案結尾附加檔案類型
          # * 可執行檔案
          # / 目錄
          # @ 連結檔案
          # | 管道檔案
          # = 套接字
          # > 程序間通訊裝置
           

上面的

-a

-l

等稱為選項(options),而後跟參數(parameter)。

ls

指令所有選項與詳細資訊可使用下列指令得到:

ls --help
man ls
info ls
           

根目錄

/

下每一個目錄都有其作用,可參見這裡。

/        根目錄,萬物起源
/bin     二進制程式
/boot    Linux核心,RAM系統映像,啟動加載程式
/dev     裝置節點,一切皆是檔案
/etc     系統層面配置檔案,shell腳本
/home    普通使用者家目錄上一級
/lib     系統核心程式庫檔案
/media   可移除裝置自動挂載點
/mnt     同上,早期linux系統中
/opt     安裝可選軟體
/proc    虛拟檔案系統,核心相關
/root    root使用者家目錄
/sbin    系統二進制檔案,為root使用者保留
/tmp     存儲臨時檔案,重新開機清空
/usr     包含使用者所需要所有程式和檔案
/var     動态檔案存儲位址
           

我的根目錄:

[email protected]:~$ ls -F /
bin/   cdrom/  etc/   initrd.img@      lib/    lost+found/  mnt/  proc/  run/   snap/  swapfile  tmp/  var/      vmlinuz.old@
boot/  dev/    home/  initrd.img.old@  lib64/  media/       opt/  root/  sbin/  srv/   sys/      usr/  vmlinuz@
           

file

– Determine file type 顯示檔案類型

less

– View file contents 檢視文本檔案内容

cat

– 亦是檢視文本内容,與

less

有差別

tree

– 以樹形結構列印目錄檔案(需要先安裝:

sudo apt-get install tree

Manipulating Files And Directories

cp

– Copy files and directories

使用

-i

選項來提示是否要覆寫已存在檔案,若沒有則直接覆寫。

mv

– Move/rename files and directories

移動到不同目錄即移動,移動到目前目錄即重命名。

mkdir

– Create directories

mkdir dir1 dir2 ../dir3
mkdir -p ./mydir1/mydir2   # 遞歸建立
           

rm

– Remove files and directories 删除檔案與目錄

其中

*

是通配符,詳細資訊檢視這裡。

ln

– Create hard and symbolic links 建立硬連結或者符号連結

ln fun fun-hard       # to create a hard link, point to a block of disk
ln -s fun fun-soft    # to create a symbolic link, point to the path of a file
           

Working With Commands

type

– Indicate how a command name is interpreted 表明指令類型,分類:

alias

别名、

bulitin

Shell内建指令、

file

磁盤可執行檔案、

function

Shell函數、

keyword

關鍵字/Shell保留字。

[email protected]:~$ type ls
ls 是 `ls --color=auto' 的别名
[email protected]:~$ type cd 
cd 是 shell 内建
[email protected]:~$ type cp
cp 是 /bin/cp
           

which

– Display which executable program will be executed

tiko@killing-boat:~$ which gcc
/usr/bin/gcc
           

help

– Get help for shell builtins

man

– Display a command’s manual page 使用

man

查手冊

apropos

– Display a list of appropriate commands

info

– Display a command’s info entry

whatis

– Display a very brief description of a command

tiko@killing-boat:~$ whatis ls
ls ()               - list directory contents
           

alias

– Create an alias for a command 給指令建立别名

使用

alias

不加選項與參數列印目前已經建立的别名。常用的已經建立的别名:

alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
           

鍵入

alias

指令建立的别名在終端關閉後失效。

Redirection 重定向

cat

- 連接配接檔案并顯示

sort

- 排序文本行

uniq

- 報道或省略重複行

cat log.txt | uniq        # 列印出log.txt中内容,重複行隻列印一次
cat log.txt | uniq -d     # 隻列印重複行
           

grep

- 列印比對行

wc

- 列印檔案中換行符,字,和位元組個數

tiko@killing-boat:~$ wc new.txt 
     new.txt
           

head

- 輸出檔案第一部分

tail

- 輸出檔案最後一部分

>

- 重定向标準輸出

>>

- 以追加的方式重定向标準輸出

2>

- 重定向标準錯誤輸出

2>>

- 以追加的方式重定向标準錯誤輸出

tiko@killing-boat:~$ ahsjkfh > log.txt
tiko@killing-boat:~$ cat log.txt 
ahsjkfh:未找到指令
           

|

- 管道符,将一個指令的輸出作為另一個指令的輸入

tiko@killing-boat:~$ ll | sort | grep code    # 多個管道符連接配接使用,過濾器
drwxrwx--x   tiko tiko   月   : code/
           

重定向到檔案,管道符到指令,千萬不要混淆。

tee

- 從 Stdin 讀取資料,并同時輸出到 Stdout 和檔案

cat log.txt | tee new.txt | grep ha
           

使用

| tee

和重定向

>

作用類似,但是

| tee

可以在輸出到檔案的同時将資訊輸出到終端。

Seeing The World As The Shell Sees It

echo

- 顯示一行文本

tiko@killing-boat:~$ echo hello.world!
hello.world!
tiko@killing-boat:~$ echo * 
code examples.desktop log.txt new.txt snap test.txt 公共的 模闆 視訊 圖檔 文檔 下載下傳 音樂 桌面
tiko@killing-boat:~$ echo /*n
/bin /run /sbin
tiko@killing-boat:~$ echo /usr/*/share
/usr/local/share
tiko@killing-boat:~$ echo ~
/home/tiko
tiko@killing-boat:~$ echo ~root
/root
tiko@killing-boat:~$ echo $SHELL
/bin/bash
tiko@killing-boat:~$ echo $((+))

           

甚至可以求解表達式,形式:

$((expression))

,支援

+

-

*

/

%

**

(取幂)操作,

$

表示變量或者參數。

tiko@killing-boat:~$ echo $(( (-+***) /  % ))

           

花括号展開,甚至可以嵌套

[email protected]:~$ echo front-{A,B,C}-back
front-A-back front-B-back front-C-back
[email protected]:~$ echo A{B{1,2},C{3,4}}D
AB1D AB2D AC3D AC4D
[email protected]:~$ echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
           

然後可以這樣,超級棒有木有?解放生産力!

[email protected]:~$ mkdir mydir ; cd mydir
[email protected]:~/mydir$ mkdir {2007..2009}-{1..9} {2007..2009}-{10..12}
[email protected]:~/mydir$ ls
-  -  -  -  -  -  -  -  -
-  -  -  -  -  -  -  -  -
-  -  -  -  -  -  -  -  -
-  -  -  -  -  -  -  -  -
           

參數展開

[email protected]:~/mydir$ echo $USER
tiko
           

指令替換,将一個指令的輸出作為展開模式來使用,用法

$(command)

[email protected]-boat:~$ ls -l $(which cp)
-rwxr-xr-x  root root  月   : /bin/cp
           

也可以使用一種舊文法,使用反引号 `

[email protected]-boat:~$ ls -l `which cp`
-rwxr-xr-x  root root  月   : /bin/cp
           

使用雙引号

" "

,除Shell的特殊字元

$

\

和 ` 之外均會失去其特殊含義。雙引号中,參數展開,算術表達式,指令替換展開任然有效。

tiko@killing-boat:~$ echo there is a test
there is a test
tiko@killing-boat:~$ echo "there is a    test"
there is a    test
           

使用雙引号可以很微妙,其中的空格不被當做分界符,而是一個字元。看一看下面:

tiko@killing-boat:~$ echo $(cal)
五月  日 一 二 三 四 五 六                               
tiko@killing-boat:~$ echo "$(cal)"
      五月          
日 一 二 三 四 五 六  
                 
            
        
        
    
           

如果想使用

$

\

` 這些字元則需要轉義

\$

\\

\`

如果要禁止所有展開,則使用單引号

' '

tiko@killing-boat:~$ echo '$(cal)'
$(cal)
           

展開和引用是非常有用的東西,甚至可以說是學習Shell 最重要的部分。

echo

-e

選項可以使其可以解釋轉義字元,轉義字元參見ASCII碼表的前32個字元。

[email protected]:~$ echo -e "\t$SHELL\a"
    /bin/bash
           

這裡

\t

是制表符,

\a

是響鈴。

Advanced Keyboard Tricks

首先:

clear

- 清空螢幕

history

- 顯示曆史指令

至于光标移動,不熟悉不寫,可以看這裡。

自動補全使用Tab。如果有多個比對項,則兩次Tab顯示所有比對項。

!!

執行上一條指令,直接上下箭頭更友善。

!number

執行曆史指令清單中number行的指令。隻想問真的有人會這樣用嗎??

需要用到的話在回來看。

Permissions 權限

Linux同Windows一樣是多使用者系統,是以需要管理使用者、使用者組與權限。

某些時候我們讀寫檔案時會遇到權限不夠的情況。以長格式列出一個檔案的資訊:

[email protected]-boat:~$ ls -l log.txt 
-rw-rw-r--  tiko tiko  月   : log.txt
           

其中第一個字元表示檔案類型。分類:

-

普通檔案、

d

目錄、

l

符号連結、

c

字元裝置檔案(如鍵盤)、

b

塊裝置檔案(如硬碟)。【Linux中一切皆是檔案】

其後

rw-rw-r--

三個一組分别表示檔案所有者、檔案所有組、其他使用者的讀、寫、執行權限。

其後一個數字表示該檔案硬連結數目,然後是檔案所有者以及檔案所屬使用者組、位元組為機關的檔案大小、上次修改檔案日期,最後為檔案名。

當沒有這個權限的使用者對該檔案執行該操作就會提示權限不夠:

[email protected]:~$ ll /etc/shadow
-rw-r-----  root shadow  月   : /etc/shadow
[email protected]:~$ cat /etc/shadow
cat: /etc/shadow: 權限不夠
           

id

– 顯示使用者身份号

tiko@killing-boat:~$ id
uid=(tiko) gid=(tiko) 組=(tiko),(adm),(cdrom),(sudo),(dip),(plugdev),(lpadmin),(sambashare)
           

其中

uid

是使用者ID,

gid

是組ID。

使用者帳戶定義在

/etc/passwd

檔案裡面,使用者組定義在

/etc/group

中,檔案

/etc/shadow

包含了關于使用者密碼的資訊。

chmod

– 更改檔案模式,僅檔案/目錄所有者和root使用者可以更改

該指令兩種使用方法:八進制數字表示、符号表示法。

八進制法的意思是将

rwx

三種權限作為三位二進制數,有權限為1,無權限為0,表示為八進制數。更改是使用三個八進制數更改所有者、所有組、其他人的權限。

[email protected]-boat:~$ ll log.txt 
-rwxrwxrwx  tiko tiko  月   : log.txt
[email protected]-boat:~$  chmod  log.txt ; ll log.txt 
-rwxrw-r--  tiko tiko  月   : log.txt*
           

上面的

764

表示為檔案

log.txt

賦予

rwxrw-r--

權限。末尾的

*

表示該檔案可執行(其實隻有執行權限,執行會出現錯誤),不是檔案名的一部分。

符号表示法比較麻煩,不寫。用八進制表示法就很友善。

umask

– 設定預設的檔案權限

使用八進制掩碼作為參數,預設權限

rw-rw-rw-

,掩碼位為1,則建立新檔案時該位權限被關閉。常用系統掩碼位0002,預設屏蔽其他使用者的寫權限。一般情況下不需要更改。

[email protected]-boat:~$ umask

[email protected]-boat:~$ umask 
[email protected]-boat:~$ umask 

[email protected]-boat:~$ touch new.txt
[email protected]-boat:~$ ll new.txt 
-rw-rw-rw-  tiko tiko  月   : new.txt
           

其實除了讀寫執行外還有其他權限,這裡略過。

su

– 以另一個使用者的身份來運作 shell

tiko@killing-boat:~$ su
密碼: 
root@killing-boat:/home/tiko# su tiko
tiko@killing-boat:~$ exit
exit
root@killing-boat:/home/tiko# exit
exit
tiko@killing-boat:~$
           

可以看到

su

會重新啟用一個Shell,

exit

退出該Shell傳回原先Shell,不加參數預設切換到root使用者。

sudo

– 以另一個使用者的身份來執行指令

[email protected]:~$ sudo apt-get update
[sudo] tiko 的密碼:
           

其配置檔案為

/etc/sudoers

,修改可配置

sudo

權限。

chown

– 更改檔案或者目錄所有者

tiko@killing-boat:~$ ll -d .
drwx--x--x  tiko tiko  月   : ./

root@killing-boat:/home/tiko# chown root:root .
root@killing-boat:/home/tiko# ll -d .
drwx--x--x  root root  月   : ./
           

chgrp

– 更改檔案組所有權

root@killing-boat:/home/tiko# chgrp root .
root@killing-boat:/home/tiko# ll -d .
drwx--x--x  tiko root  月   : ./
           

passwd

– 更改使用者密碼

passwd user
           

其他用來建立和維護使用者與使用者組的指令,見名知意:

adduser

useradd

groupadd

Processes 程序

程序詳細定義見作業系統類教材,Linux Kernel核維護每一個程序的資訊,并為每一個程序配置設定一個數字稱PID。程序按PID升序排列。程序也有所有者和使用者ID。

ps

– 報告目前程序快照

tiko@killing-boat:~$ ps
   PID TTY          TIME CMD
  pts/    :: bash
  pts/    :: ps
           

top

– 顯示任務

jobs

– 列出活躍的任務

在一個任務後加

&

将其作為背景任務,與執行一個前台任務時按

Ctrl-Z

功能相同,均為将任務中止轉入背景等待,使用

fg %number

将其移入前台運作,

bg %number

将其移入背景運作。而執行一個任務時

Ctrl-C

為終止該任務。

bg

– 把一個任務放到背景執行

fg

– 把一個任務放到前台執行

tiko@killing-boat:~$ jobs
[]   已停止               vim new.txt
[]-  已停止               vim if.txt
[]+  已停止               sudo visudo
tiko@killing-boat:~$ fg %     # 則喚醒任務sudo visudo
           

kill

– 給一個程序發送信号

kill [-signal] PID...
kill PID       # 殺死PID對應程序
kill -l        # 獲得完整信号清單
           

killall

– 殺死指定名字的程序

shutdown

– 關機或重新開機系統

tiko@killing-boat:~$ xlogo &
[] 
tiko@killing-boat:~$ xlogo &
[] 
tiko@killing-boat:~$ ps
   PID TTY          TIME CMD
  pts/    :: bash
  pts/    :: xlogo
  pts/    :: xlogo
  pts/    :: ps
tiko@killing-boat:~$ fg %
xlogo
^C
tiko@killing-boat:~$ killall xlogo
tiko@killing-boat:~$ ps
   PID TTY          TIME CMD
  pts/    :: bash
  pts/    :: ps
[]+  已終止               xlogo
           

其他指令:

pstree

– 輸出一個樹型結構的程序清單,這個清單展示了程序間父/子關系。

vmstat

– 輸出一個系統資源使用快照,包括記憶體,交換分區和磁盤 I/O。

xload

– 一個圖形界面程式,可以畫出系統負載的圖形。

tload

– 與 xload 程式相似,但是在終端中畫出圖形。使用 Ctrl-c,來終止輸出。

關機與重新開機(root使用者不需要sudo):

sudo shutdown -h now    # 立即關機
sudo poweroff           # 立即關機
sudo init              # 立即關機
sudo shutdown -h -t   # 60s後關機
sudo shutdown -c        # 取消關機
sudo shutdown -r now    # 立即重新開機
sudo reboot             # 立即重新開機
sudo init              # 立即重新開機
           

OK, Part 1 is over. Let’s get to Part 2.

Part 2 – Configuration And The Environment

The Environment

printenv

- 列印部分或所有的環境變量

不加選項執行之後你會看到所有環境變量。

tiko@killing-boat:~$ printenv SHELL
/bin/bash
tiko@killing-boat:~$ echo $SHELL
/bin/bash
           

一些有趣的環境變量:

  • SHELL

    使用的Shell程式,如

    /bin/bash

  • HOME

    使用者家目錄
  • PATH

    可執行程式的搜尋目錄,用冒号分開的目錄清單
  • PWD

    目前工作目錄
  • OLD_PWD

    先前工作目錄
  • USER

    目前使用者
  • PS1

    用于訂制Shell提示符
  • LANG

    定義字元集與語言編碼格式,我的為

    zh_CN.UTF-8

set

- 顯示環境變量與Shell變量

export

— 導出環境變量,讓随後執行的程式知道

alias

- 建立指令别名

建立Shell環境的稱為啟動檔案的配置腳本:

登入Shell會話:

-

/etc/profile

,所有使用者的全局配置腳本。

-

~/.bash_profile

,使用者私有啟動檔案,用于擴充或重寫全局配置腳本中的設定。

-

~/.bash_login

,如果上面這個檔案沒有找到,則讀取這個。

-

~/.profile

,如果上面兩個都沒有找到,則讀取這個,這是Debain發行版中的預設設定,比如Ubuntu中。

非登入Shell會話:

-

/etc/bash.bashrc

,全局配置腳本。

-

~/.bashrc

,使用者私有啟動檔案。

vi & vim

不用多說,經典的編輯器。

vim

vi

的增強版,但我真的不會用,用不習慣,什麼時候想好好折騰了再去了解vim的哲學吧。

終端鍵入

vimtutor

即可開始

vim

練習,半小時入門。vim的哲學。

Customizing The Prompt

自己訂制Shell提示符。詳見這裡。可以更改格式與顔色,比如這樣:

The Linux Command LinePart 1 – Learning The ShellPart 2 – Configuration And The EnvironmentPart 3 – Common Tasks And Essential ToolsPart 4 – Writing Shell Scripts

更改環境變量

$PS1

[email protected]:~$ PS1="\[\033[1;35m\u@\h:\W$\] \[\033[1;33m\]"
           

其中一些主要轉義字元:

\u

目前使用者

\h

本地主機名

\w

目前工作目錄

\$

普通使用者提示字元$

另外還可以及進行顔色控制。

Part 3 – Common Tasks And Essential Tools

Package Management

Linux發行版兩大陣營:Debian, RedHat

陣營 發行版
Debian Debian, Ubuntu, Xandros, Linspire
RedHat Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS

包管理工具:

風格 底層工具 頂層工具
Debian dpkg apt-get,aptitude
RedHat rpm yum

不過現在Ubuntu中好像鼓勵用

apt

替代

apt-get

,原因是

apt

指令更簡單,更友好。詳見:Linux中apt與apt-get指令的差別與解釋。

當然還有其他不屬于這兩個陣營的發行版。上一張圖體會一下Linux大家族:

The Linux Command LinePart 1 – Learning The ShellPart 2 – Configuration And The EnvironmentPart 3 – Common Tasks And Essential ToolsPart 4 – Writing Shell Scripts

Storage Media 存儲媒介

關于檔案系統,這裡就不多說了。Linux中大多使用ext3檔案系統(我的是ext4,使用

df -T

或者

cat /etc/fstab

檢視)。Linux維護單一的檔案系統樹,允許挂載不同檔案系統的裝置。

挂載,顧名思義,就是将檔案裝置連接配接到系統檔案樹上(Linux中一切皆是檔案,裝置亦然)。

檔案

/etc/fstab

列出了系統啟動時要挂載的裝置。

/dev

目錄包含了所有系統中使用的外部裝置。要使用就要将裝置挂載到一個目錄,然後通過通路該目錄來通路裝置。

裝置檔案分為塊裝置(Block device)和位元組裝置(Character device)。其中

  • 塊裝置檔案,有緩沖可以随機存取(有實體裝置與虛拟裝置之分),如HDD,CD-ROM。
  • 位元組裝置檔案,無緩沖隻能順序讀取,如鍵盤,滑鼠。

mount

– 挂載一個檔案系統

不帶參數顯示目前挂載的檔案系統。清單格式:裝置 on 挂載點 type 檔案系統類型(可選的)。

mount -t [檔案類型] /dev/裝置 /mnt/挂載目錄
           

umount

– 解除安裝一個檔案系統

umount /dev/裝置
           

fsck

– 檢查和修複一個檔案系統

fdisk

– 分區表控制器

mkfs

– 建立檔案系統

fdformat

– 格式化一張軟碟(軟碟沒有人用了吧!)

dd

— 把面向塊的資料直接寫入裝置

genisoimage

(

mkisofs

) – 建立一個 ISO 9660的映像檔案

wodim

(

cdrecord

) – 把資料寫入光存儲媒介

md5sum

– 計算 MD5檢驗碼

Networking 網絡

ping

- 發送 ICMP ECHO_REQUEST 軟體包到網絡主機

ping URL    # 向指定URL的主機發送一種叫做IMCP ECHO_REQUEST的特殊網絡資料包
           

traceroute

- 列印到一台網絡主機的路由資料包

netstat

- 列印網絡連接配接,路由表,接口統計資料,僞裝連接配接,和多路廣播成員

ftp

- 網際網路檔案傳輸程式(檔案傳輸協定)

wget

- 非互動式網絡下載下傳器

使用

wget

可以從網站或者FTP伺服器上下載下傳資料,比如下載下傳github的首頁:

ssh

- OpenSSH SSH 用戶端(遠端登入程式)

Searching For Files 查找

locate

– 通過名字來查找檔案

快速搜尋資料庫,輸出每個與字元串比對的檔案名。支援路徑比對與通配符。現在一般使用

slocate

或者

mlocate

,但指令一般依舊使用

locate

我的

locate

的資料庫為

/var/lib/mlocate/mlocate.db

,可在man手冊中找到。這個資料庫由

updatedb

程式周期性運作建立。是以建立的檔案搜尋不到的話,可手動執行

sudo updatedb

建立。

find

– 在目錄層次結構中搜尋檔案

可以使用

-type

指定搜尋類型,更多選項參考man手冊。

xargs

– 從标準輸入生成和執行指令行

touch

– 更改檔案時間,如果檔案不存在則建立檔案

stat

– 顯示檔案或檔案系統狀态

Archiving And Backup 歸檔與備份

檔案壓縮:

gzip

– 壓縮或者展開檔案

bzip2

– 塊排序檔案壓縮器

歸檔:

tar

– 錄音帶打包工具

zip

– 打包和壓縮檔案

檔案同步程式:

rsync

– 同步遠端檔案和目錄

Regular Expressions 正則

正則内容不少,很早之前了解過,不過現在全忘了,什麼時候需要用到了複習一下了,單獨寫。可參考這篇文章:正規表達式30分鐘入門(才怪)。

Text Processing 文本處理

cat

– 連接配接檔案并且列印到标準輸出

sort

– 給文本行排序

uniq

– 報告或者省略重複行

cut

– 從每行中删除文本區域

paste

– 合并檔案文本行

join

– 基于某個共享字段來聯合兩個檔案的文本行

comm

– 逐行比較兩個有序的檔案

diff

– 逐行比較檔案

patch

– 給原始檔案打更新檔

tr

– 翻譯或删除字元

sed

– 用于篩選和轉換文本的流編輯器

aspell

– 互動式拼寫檢查器

Formatting Output 格式化輸出

nl

– 添加行号

fold

– 限制檔案列寬

fmt

– 一個簡單的文本格式轉換器

pr

– 讓文本為列印做好準備

printf

– 格式化資料并列印出來

groff

– 一個檔案格式系統

Compiling Programs 編譯程式

學習Linux,必然少不了在Linux上進行代碼編譯。Linux上最常用的編譯工具自然是GNU的GCC(GNU Compiler Collection,GNU編譯器套件)了。

GNU make是Linux常用的維護程式的軟體,我們用它來管理自己的項目。Make有自己的文法,可以在Makefile中編寫項目中源檔案的編譯規則,指定源檔案間的依賴關系。然後執行

make

指令即可編譯整個項目。當項目中的源檔案更改之後,make會檢查源檔案的時間戳,并重新編譯所有依賴于被修改的檔案的源檔案。這在需要大量編譯時間的大型項目中,是非常必要的。關于make的文法細節可參考Makefile經典教程,或者官方文檔。

Part 4 – Writing Shell Scripts

Shell腳本編寫内容較多,放在下一次單獨寫。

繼續閱讀