linux常用命令練習

靜以致遠√團團發表於2013-12-16

ls命令

ls命令列出目錄下的內容

[root@orcl2 ~]# ls

anaconda-ks.cfg  install.log  test

加上-s引數列出內容的同時列出該檔案或目錄的大小

[root@orcl2 ~]# ls -s

 8 anaconda-ks.cfg  36 install.log         32 test

加上-h引數將會顯示出檔案大小的單位

[root@orcl2 ~]# ls -sh

8.0K anaconda-ks.cfg   36K install.log          32K test

-l引數顯示該目錄下的詳細資訊

[root@orcl2 ~]# ls -lh  //該命令可簡寫為ll -h

-rw------- 1 root root 1.5K Nov  5 16:28 anaconda-ks.cfg

-rw-r--r-- 1 root root  32K Nov  5 16:27 install.log

-rw-r--r-- 1 root root  32K Nov  6 17:37 test

注:根據上面的兩個命令可以看到,install.log用ls -s檢視時大小是36K,而用ll -h檢視時大小是32K,這是因為ll -h命令檢視的是實際檔案所佔有的大小,而ls -h檢視的是磁碟非配的大小

 

使用stat 命令列出目錄或檔案的詳細資訊

[root@orcl2 ~]# stat install.log

  File: `install.log'

  Size: 32062           Blocks: 72         IO Block: 4096   regular file

Device: fd00h/64768d    Inode: 5898242     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2013-11-06 17:37:03.000000000 +0800

Modify: 2013-11-05 16:27:52.000000000 +0800

Change: 2013-11-05 16:28:19.000000000 +0800

 

ls排序的問題

ls預設狀態下是按照檔案目錄的首字母排序

-t : 按照檔案最後的修改時間排序

-u : 按照檔案的最後訪問時間排序

-c : 按照檔案的最後inode改變時間排序

比如要檢視當前目錄下最新改變的檔案或目錄:

[root@orcl2 ~]# ls -u | head -1

Desktop

列出最近改變時間排序的檔案的詳細資訊

[root@orcl2 etc]# ls -l `ls -u | head -1`

-rw-r--r-- 1 root root 889 Dec 12 19:37 group

列出目錄資訊:

[root@orcl2 /]# ls -ld u01

drwxr-xr-x 6 oracle oinstall 4096 Dec  4 19:44 u01

檔案型別識別符號:

* 可執行檔案

/ 目錄檔案

= Socket檔案

@ 符號連結檔案

| 管道檔案

使用-F引數可以列出檔案的識別符號

[root@orcl2 db_1]# ls -F

assistants/     install.platform  oc4j/        rdbms/

bin/          inventory/      odbc/        relnotes/

cdata/        javavm/        olap/        root.sh*

cfgtoollogs/    jdbc/          OPatch/      root.sh.old*

 

sort命令

sort命令可以完成多類別排序

將當前目錄下的檔案按照大小排序:

[root@orcl2 ~]# du -k *

8       anaconda-ks.cfg

4       Desktop

36      install.log

8       install.log.syslog

32      test

[root@orcl2 ~]# du -k * | sort -n

4       Desktop

8       anaconda-ks.cfg

8       install.log.syslog

32      test

36      install.log

 

按照指定的列排序

檢視當前目下下的檔案資訊並按照第六列的資訊以數字排序

[root@orcl2 ~]# ll -s | sort -n -k 6

 8 -rw------- 1 root root   1482  Nov  5 16:28 anaconda-ks.cfg

 8 -rw-r--r-- 1 root root   3995  Nov  5 16:26 install.log.syslog

 4 drwxr-xr-x 2 root root  4096  Nov  6 00:03 Desktop

36 -rw-r--r-- 1 root root   32062  Nov  5 16:27 install.log

32 -rw-r--r-- 1 root root   32063  Nov  6 17:37 test

 

注:RedHat4以後再沒有sort +4這樣的格式,取而代之的是sort -k 4

 

也可加入-r引數來實現逆向排序

[root@orcl2 ~]# ll -s | sort -n -k 6 -r

32  -rw-r--r--  1  root root  32063  Nov   6  17:37  test

36  -rw-r--r--  1  root root  32062  Nov   5  16:27  install.log

 4  drwxr-xr-x 2  root root  4096   Nov   6  00:03  Desktop

 8  -rw-r--r--  1  root root  3995   Nov   5  16:26  install.log.syslog

 8  -rw-------  1  root root  1482   Nov   5  16:28  anaconda-ks.cfg

加入tail來選擇輸出最後的幾行

[root@orcl2 ~]# ll -s | sort -n -k 6 -r | tail -3

 8 -rw-r--r-- 1 root root  3995 Nov  5 16:26 install.log.syslog

 8 -rw------- 1 root root  1482 Nov  5 16:28 anaconda-ks.cfg

total 88

 

headtail命令

head -ntail -n分別檢視檔案的前幾行和後幾行記錄,不加引數預設的是10

[root@orcl2 ~]# cat number 

1

2

3

4

5

[root@orcl2 ~]# tail -2 number

4

5

[root@orcl2 ~]# head -2 number 

1

2

 

-n 引數後面跟 +n(數字) 用來顯示第n行前(head)或第n行後(tail)的所有資料結合兩者可以實現顯示第n-m行的資料

如顯示第2-5行資料的顯示

[root@orcl2 ~]# head -n +5 number | tail -n +2

2

3

4

5

tail -f 動態重新整理木檔案的後十行資料

[root@orcl2 ~]# tail -f number 

1

2

3

4

5

 

Find查詢命令

 

查詢當前目錄下名為number的檔案

[root@orcl2 ~]# find . -name number

./number

查詢當前目錄下num開頭的檔案

[root@orcl2 ~]# find . -name 'num*'

./number

查詢當前目錄下test001,test002檔案

[root@orcl2 ~]# find . -name 'test00[1-2]'

./test001

./test002

不區分大小寫來查詢Test001[1-2]test00[1-2]'

[root@orcl2 ~]# find . -iname 'test00[1-2]'

./test001

./Test002

./Test001

./test002

查詢最近連天修改過的檔案

[root@orcl2 linux]# find . -mtime -2

.

./test001

./Test003

./Test002

./Test001

./test003

./test002

查詢兩天之前修改過的檔案

[root@orcl2 ~]# find . -mtime +2

./.gnome

./.gnome/gnome-vfs

./.dmrc

./.gnome2_private

./.Trash

./.bashrc

./install.log.syslog

mtime改成ctime:按照改變時間查詢 atime按照訪問時間查詢

也可以把mtimectimeatime改成mmincminamin來按照分鐘改變查詢

[root@orcl2 linux]# find . -mmin -10

.

./test001

./Test003

./Test002

./Test001

-maxdepth定義遞迴查詢的級數

[root@orcl2 ~]# find . -maxdepth 1 -iname 'test00[1-2]'

./test001

./Test002

./Test001

./test002

[root@orcl2 ~]# find . -iname 'test00[1-2]'

./linux/test001

./linux/Test002

./linux/Test001

./linux/test002

./test001

./Test002

./Test001

./test002

查詢當前目錄下大於10k的檔案

[root@orcl2 ~]# find . -size +10k

./.bash_history

./test

./install.log

./.gconfd/saved_state

./.gnome2/yelp.d/omfindex.xml

./.gnome2/yelp.d/manindex.xml

./.gnome2/yelp.d/sk-content-list.last

./.gstreamer-0.10/registry.i686.bin

查詢當前目錄下oracle使用者的檔案,遞迴深度為2

[root@orcl2 home]# find . -maxdepth 2 -user oracle

./oracle

./oracle/.sqlplus_history

./oracle/hot_backup.sh

./oracle/.gnome2_private

./oracle/rman_full_backup.sh.bak

./oracle/.bashrc

./oracle/log

顯示當前目錄下檔案所屬組是oinstall的檔案,深度為二,只顯示出前兩個檔案的詳細資訊

[root@orcl2 home]# ls -l `find . -maxdepth 2 -group oinstall`|head -2

-rw------- 1 oracle oinstall  8502 Dec  7 14:37 ./oracle/.bash_history

-rw-r--r-- 1 oracle oinstall    33 Nov  6 16:09 ./oracle/.bash_logout

查詢當前目錄下的所有目錄:

[root@orcl2 ~]# find . -maxdepth 1  -type d

.

./linux

./.gnome

./.gnome2_private

grep命令用來過濾資訊

測試檔案如下:

[root@orcl2 ~]# cat number 

1       number1

2       number2

3       number3

4       number3

5       number5

顯示number含有2的行:

[root@orcl2 ~]# grep 2 number 

2       number2

檢視/home/oracle/.bash_profile中的註釋資訊

[root@orcl2 oracle]# grep "#" .bash_profile 

# .bash_profile

# Get the aliases and functions

# User specific environment and startup programs

查詢.bash_profile中含有exportalias的行

[root@orcl2 oracle]# grep "export\|alias" .bash_profile 

# Get the aliases and functions

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1

export ORACLE_SID=orcl

export PATH=$PATH:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib

alias sqlplus=' rlwrap sqlplus'

alias rman=' rlwrap rman'

使用egrep完成上面的題目

[root@orcl2 oracle]# egrep  "export|alias" .bash_profile

# Get the aliases and functions

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1

export ORACLE_SID=orcl

export PATH=$PATH:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib

alias sqlplus=' rlwrap sqlplus'

alias rman=' rlwrap rman'

-i引數用來忽略大小寫

[root@orcl2 ~]# grep NUMBER number 

[root@orcl2 ~]# grep -i NUMBER number 

1       number1

2       number2

3       number3

4       number3

5       number5

-v 引數查詢不包括某個字元的行

[root@orcl2 ~]# grep -i NUMBER number | grep -v 5 

1       number1

2       number2

3       number3

4       number3

-n 引數用來標記行號

[root@orcl2 ~]# grep -i NUMBER number | grep -v 5 -n 

1:1     number1

2:2     number2

3:3     number3

4:4     number3

過濾掉空行和過濾行:

[root@orcl2 ~]# cat number -n

     1  1       number1

     2  2       number2

     3

     4  3       number3

     5

     6  4       number3

     7  5       number5

     8  # This is a test file

[root@orcl2 ~]# grep -n -v '^$' number | grep -v '#' 

1:1     number1

2:2     number2

4:3     number3

6:4     number3

7:5     number5

 

cut命令用來選取指定列

[root@orcl2 ~]# cat number 

1       :number1

2       :number2

 

3       :number3

4       :number3

5       :number5

# This is a test file

[root@orcl2 ~]# cat number | grep -v "#" | grep -v "^$" | cut -d ":" -f2

number1

number2

number3

number3

number5

上面的命令等於是在grep的基礎上,去除註釋和空行,以:為分隔符,顯示第二列

 

只顯示當前目錄下檔名和建立時間

[root@orcl2 ~]# ll | cut -c 37-

16:28 anaconda-ks.cfg

00:03 Desktop

16:27 install.log

16:26 install.log.syslog

10:53 linux

11:33 number

17:37 test

10:49 test001

10:51 Test001

10:49 test002

10:51 Test002

10:49 test003

10:51 Test003

10:49 test004

-d引數用來刪除指定的字元

[root@orcl2 ~]# df |grep -v Filesystem | awk '{ print $5 }'

/

13%

0%

[root@orcl2 ~]# df |grep -v Filesystem | awk '{ print $5 }'|cut -d '%' -f1

/

13

0

 

sed流編譯器

列印1-3

[root@orcl2 ~]# sed '1,3p' number 

1       :number1

1       :number1

2       :number2

2       :number2

 

 

3       :number3

4       :number3

5       :number5

取消列印1-3

[root@orcl2 ~]# sed -n '1,3p' number 

1       :number1

2       :number2

刪除第3行記錄

[root@orcl2 ~]# cat number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

[root@orcl2 ~]# sed '3d' number 

1       number1

2       number2

3       number3

4       number4

5       number5

刪除最後一行

[root@orcl2 ~]# sed '$d' number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

刪除第三行到最後一行

[root@orcl2 ~]# sed '3,$d' number 

1       number1

2       number2

 

刪除包含number2的行

[root@orcl2 ~]# sed '/number2/d' number 

1       number1

 

3       number3

4       number4

5       number5

Hello

awk生成資料

[root@orcl2 ~]# cat number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

Hello

查詢包含number2的行

[root@orcl2 ~]# awk '/number2/' number 

2       number2

匹配第二列中資料包含number2的資料

[root@orcl2 ~]# awk '$2 ~ /number2/' number 

2       number2

$2匹配表示第二列資料,~為匹配符

 

列印number中第一列的內容

[root@orcl2 ~]# awk '{print $1}' number 

1

2

 

3

4

5

Hello

 

-F引數指定分隔符

列印passwd中的第一列的最後十名使用者名稱資訊

[root@orcl2 ~]# awk -F: '{print $1}' /etc/passwd | tail -10

sabayon

test2

ldap

ais

test1

oracle

admin

user01

user02

xtt

使用cut也能達到此效果

[root@orcl2 ~]# cut -d: -f1 /etc/passwd|tail -10

sabayon

test2

ldap

ais

test1

oracle

admin

user01

user02

xtt

 

簡單的郵件:

[root@orcl2 ~]# service sendmail status

sendmail (pid  3845) is running...

[root@orcl2 ~]# hostname xue.com

[root@orcl2 ~]# hostname

xue.com

[root@xue ~]# mail root

Subject: Hello   

[root@xue ~]# mail root

Subject: Hello   

Hello,Admin   

Bye

Cc: 

 

自動化作業:

使用corn命令完成自動化作業

檢視服務是否正常啟動

[root@xue ~]# service crond status

crond (pid  3871) is running...

使用corntab命令下的三個引數:-l-e-r分別為產看,編譯和刪除自動化任務

自動化任務的語法很簡單:

* * * * 0 df -h >> /var/log/system.log

其中:前面的五個列分別表示:分,時,日,月,星期;若為*表示不適用該時間格式進行計劃任務,若需要多個時間段,可用,分開

比如上面的命令表示每週日的時候檢視一下系統資訊,並追加入system.log

每週的工作日,每個十五分鐘執行一個備份指令碼:

0,15,30,45 * * * 0 /home/backuo/cold_bak.sh 

執行計劃在/var/spool/cron下可以找到

[root@xue cron]# pwd

/var/spool/cron

[root@xue cron]# ls

root

[root@xue cron]# cat root 

0,15,30,45 * * * 0 /home/backup/cold_bak.sh

或者直接用corntab -l命令檢視

[root@orcl2 ~]# crontab -l

0,15,30,45 * * * 0 /home/backup/cold_bak.sh

 

實驗at命令完成自動作業

[root@xue cron]# at *:15

syntax error. Last token seen: *

Garbled time

[root@xue cron]# at 0:15

at> find / -name "passwd"

at> 

job 1 at 2013-12-17 00:15

改命令意思是在次日凌晨15分執行查詢passwd檔案路徑的命令

at -l檢視執行計劃

[root@xue cron]# at -l

1       2013-12-17 00:15 a root

atrm 計劃編號  刪除指定計劃

[root@xue cron]# at -l

1       2013-12-17 00:15 a root

[root@xue cron]# atrm 1

[root@xue cron]# at -l

 

磁碟分割槽:

[root@redhat6-3 ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0xce359e4e.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.

 

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

 

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

 

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-261, default 1): (回車,預設將所有空間分配給第一個主分割槽)

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): 

Using default value 261

 

Command (m for help): t(修改磁碟格式為LVM)

Selected partition 1

Hex code (type L to list codes): 8e

Changed system type of partition 1 to 8e (Linux LVM)

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

 

再次檢視磁碟情況

[root@redhat6-3 ~]# fdisk -l

 

Disk /dev/sda: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00085274

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          64      512000   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              64        2611    20458496   8e  Linux LVM

 

Disk /dev/sdb: 2147 MB, 2147483648 bytes

255 heads, 63 sectors/track, 261 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xce359e4e

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         261     2096451   8e  Linux LVM

 

tar命令解壓壓縮:

 

tar zcvf 建立壓縮檔案

tar [-cxtzjvfpPN] 檔案與目錄 ....
引數:
-c :建立一個壓縮檔案的引數指令(create 的意思);
-x :解開一個壓縮檔案的引數指令
-t :檢視 tarfile 裡面的檔案
特別注意,在引數的下達中, c/x/t 僅能存在一個!不可同時存在
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮
-v :壓縮的過程中顯示檔案!這個常用,但不建議用在背景執行過程
-f :使用檔名,請留意,在 f 之後要立即接檔名
-p :使用原檔案的原來屬性(屬性不會依據使用者而變)
-P :可以使用絕對路徑來壓縮!
-N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的檔案中!

如果加 z 引數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file 
如果加 j 引數,則以 .tar.bz2 來作為附檔名啊

 

如把root目錄下的內容全部壓縮成root.tar.gz

[root@xue ~]# tar zcvf ./root.tar.gz ./* 

解壓[root@xue ~]# tar zcvf ./root.tar.gz ./* 

 

解壓root.tar.gz檔案

[root@xue ~]# mkdir root

[root@xue ~]# tar zxvf root.tar.gz root/

root@xue ~]# cd /root/

[root@xue ~]# ls

anaconda-ks.cfg  install.log         number       test     test002  Test003

dead.letter      install.log.syslog  root         test001  Test002  test004

Desktop          linux               root.tar.gz  Test001  test003

 

I/O重定向:

 

輸出重定向>(建立)或>>(追加)

[root@xue ~]# echo "Hello" > Hello

[root@xue ~]# cat Hello 

Hello

[root@xue ~]# echo "Hello" >> Hello

[root@xue ~]# echo "Hello" >> Hello

[root@xue ~]# cat Hello 

Hello

Hello

Hello

 

使用>&1命令。將stderr和stdout也匯入到stdin指定的檔案中,及若命令錯誤,也將重定向到指定檔案

如:將TEST命令的錯誤資訊重定向至Hello

[root@xue ~]# TEST

-bash: TEST: command not found

[root@xue ~]# TEST > Hello 2>&1

[root@xue ~]# cat Hello 

-bash: TEST: command not found

 

輸入重定向:

輸入重定向指的是將輸入的內容重後面的檔案中獲取

如:

[root@xue ~]# cat 

-bash: TEST: command not found

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-1063361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章