四 shell基本命令

一   內置命令php

 

hlep 命令  幫助mysql

help testlinux

help -s printf   顯示內置命令的語法格式sql

echo 用來顯示一行文字typescript

echo "hello world"     默認會自動換行shell

echo -n "hello wrold" 不自動換行數據庫

echo -e 讓字符串中的特殊字符起做用apache

echo -e "I AM THE King\nof the world"         \n就不會做爲輸出來輸出,而是做爲換行來輸出vim

printf 格式化輸出數組

 

 

 

 

 

 

[root@localhost ~]# export str="hello world"
[root@localhost ~]# echo $str
hello world
[root@localhost ~]# printf "%d" "$str"  
-bash: printf: hello world: 無效數字
0[root@localhost ~]# printf "%c" "$str" 
h[root@localhost ~]# printf "%c\n" "$str"
h
[root@localhost ~]# printf "%d\n" 30
30
[root@localhost ~]# printf "%f\n" 30 
30.000000
[root@localhost ~]# printf "%5s\n" "$str"
hello world
[root@localhost ~]# printf "%5s\n" "
> yes"
 
yes
[root@localhost ~]# printf "%5s\n" yes
  yes
[root@localhost ~]# printf "%-5s\n" yes
yes  
[root@localhost ~]# printf "%-5.1f\n" ye
-bash: printf: ye: 無效數字
0.0  
[root@localhost ~]# printf "%-5.1f\n" 30
30.0 
[root@localhost ~]# printf "%q\n" $str
hello
world
[root@localhost ~]# printf -v myvar "%q" "ABC 123 XYZ"
[root@localhost ~]# echo $myvar
ABC\ 123\ XYZ
[root@localhost ~]# printf "%b" "ABC\n123\nXYZ\n"
ABC
123
XYZ

 

 

 

[root@localhost ~]# printf "%s\n" "ABCDEF" | tr '[A-Z]' '[a-z]'
abcdef

 

cd  目錄進入命令

cd  路徑 進入該目錄

cd -   退回到以前目錄

cd .. 返回上一級

 

pwd  顯示當前工做目錄

 

:(冒號)  傳回真值(傳回 0)

[root@localhost ~]# : >text.txt
[root@localhost ~]# cat text.txt   #建立一個空文件

 

.(半角句點)  和 Source  在當前Sheel環境下執行Shell程序

 

alias   顯示,設定 程序的別名

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias perlll='eval `perl -Mlocal::lib`'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

 

alias 新的別名='組合的命令'  設定程序新的別名

unalias  取消程序別名

exit 退出bash或script腳本

logout 註銷loginshell

umask 顯示或設定文件。目錄創建時,文件權限的屏蔽值

用途:新建文件夾的權限通常都是777的權限,但這種權限是不安全的,爲了安全起見,讓文件管理者可以方便的建立文件及目錄,又沒必要擔憂權限安全性的問題,纔有了umask的機制

例如:

[root@localhost ~]# umask
0022

意思就是 0777-0022的權限,就是0755的權限。也就是說任何文件夾的創建,默認都是0755的權限設定。

這樣在建立文件夾的時候,就沒必要考慮文件夾的權限問題了

history  顯示過去曾執行過的Shell命令

HISTFILE  root的歷史腳本文件存儲位置

HISTFILESIZE  指定歷史腳本文件的行數大小

HISTSIZE   在一個互動模式的Shell中,可記住的歷史指令數目

fc 列出登陸主機後,最近執行過的指令

[root@localhost ~]# fc -l
1019     printf "%b" "ABC\n123\nXYZ\n"
1020     man tr
1021     printf "%s/n" "ABCDEF" | tr '[A-Z]' '[a-z]'
1022     printf "%s\n" "ABCDEF" | tr '[A-Z]' '[a-z]'
1023     cd /var/log
1024     cd -
1025     : >text.txt
1026     cat text.txt
1027     rm -y text.txt
1028     rm  text.txt
1029     alais
1030     alias
1031     ls -la
1032     ls -ld
1033     unmask
1034     umask

[root@localhost ~]# fc -l 497  #列出編號大於等於497的歷史命令
497 wget http://linux.vbird.org/linux_basic/0520source/ntp-4.2.8p3.tar.gz
498 ls
499 man tar
500 cd /usr/local/src
501 ll
502 tar -zxvf /root/ntp-4.2.8p3.tar.gz
503 ls
504 cd ntp-4.2.8p3
505 ls
506 cat install
507 vi install
508 ls
509 cat INSTALL
510 cd ntp*
511 cd ntp-4.2.8p3
512 cd /root
513 cd ntp-4.2.8p3
514 ls
515 cd src
516 cd /usr/local/src

[root@localhost ~]# fc -l 497 499   #列出編號在497到499之間的歷史命令
497 wget http://linux.vbird.org/linux_basic/0520source/ntp-4.2.8p3.tar.gz
498 ls
499 man tar

[root@localhost ~]# fc -ln
printf "%s\n" "ABCDEF" | tr '[A-Z]' '[a-z]'
cd /var/log
cd -
: >text.txt
cat text.txt
rm -y text.txt
rm text.txt
alais
alias
ls -la
ls -ld
unmask
umask
fc -l
fc -l 497
fc -l 497 499
[root@localhost ~]# fc -lrn
fc -ln
fc -l 497 499
fc -l 497
fc -l
umask
unmask
ls -ld
ls -la
alias
alais
rm text.txt
rm -y text.txt
cat text.txt
: >text.txt
cd -
cd /var/log

read 有標準輸入讀取一行數據

[root@localhost ~]# echo "輸入名字"
輸入名字
[root@localhost ~]# read name
lsq
[root@localhost ~]# echo "你的名字是"$name
你的名字是lsq

若是read輸入沒有接入變量,則會啓用默認變量 $REPLY來接受輸入

[root@localhost ~]# echo "輸入名字"       
輸入名字
[root@localhost ~]# read
lsq
[root@localhost ~]# echo "你的名字"$REPLY
你的名字lsq

一樣能夠利用 -p來提示用戶輸入信息

read -p 「請輸入你的名字」  echo $REPLY

read也能夠一次讀取一行數據放入數組中。

read -a arr <<(echo 123 23 45)

獲取數組值的時候能夠用 

echo ${arr[2]} 來獲取

默認都是用空格做爲分隔符來說文件或輸入讀取到變量中。若是要轉換分隔符,就須要 IFS 這個命令

[root@localhost ~]# IFS=':'    #設置分隔符爲:
[root@localhost ~]# read f1 f2 f3 f4 f5 f6 f7 </etc/passwd
[root@localhost ~]# echo f1
f1
[root@localhost ~]# echo f2
f2
[root@localhost ~]# echo $f2
x
[root@localhost ~]# echo $f1
root
[root@localhost ~]# echo $f3
0
[root@localhost ~]# echo $f4
0

注意:read 在讀取數據時,默認會去掉轉義字符的意義,及過濾掉\n中的\。只保留n。這樣就失去了轉義符的意義。若是要容許輸入數據時保留轉義字符\。須要用到 -r 選項

read -r TEST

echo $TEST

 

eval 命令  將指令放入到變量中,而後執行該變量中的指令

[root@localhost ~]# listlog="ls -la /var/log/*.log"     #將該變量放到listlog中
[root@localhost ~]# eval $listlog              #經過eval 執行變量中的命令
-rw-------. 1 root root     0 9月  26 09:35 /var/log/boot.log
-rw-r--r--. 1 root root   673 8月  19 11:05 /var/log/openlmi-install.log
-rw-r--r--. 1 root root  6575 9月  25 09:22 /var/log/vmware-network.1.log
-rw-r--r--. 1 root root  6575 9月  23 16:01 /var/log/vmware-network.2.log
-rw-r--r--. 1 root root  6575 9月  20 10:08 /var/log/vmware-network.3.log
-rw-r--r--. 1 root root   734 9月  19 11:13 /var/log/vmware-network.4.log
-rw-r--r--. 1 root root   756 9月  19 11:13 /var/log/vmware-network.5.log
-rw-r--r--. 1 root root  6575 9月  19 11:09 /var/log/vmware-network.6.log
-rw-r--r--. 1 root root  6575 9月  18 09:46 /var/log/vmware-network.7.log
-rw-r--r--. 1 root root  6575 9月  17 15:20 /var/log/vmware-network.8.log
-rw-r--r--. 1 root root  6575 9月  12 14:35 /var/log/vmware-network.9.log
-rw-r--r--. 1 root root   734 9月  26 08:45 /var/log/vmware-network.log
-rw-r--r--. 1 root root 43399 9月  26 08:45 /var/log/vmware-vmsvc.log
-rw-r--r--. 1 root root  6653 9月  19 11:09 /var/log/vmware-vmusr.log
-rw-r--r--. 1 root root   360 9月  19 11:14 /var/log/wpa_supplicant.log
-rw-r--r--. 1 root root 46347 9月  20 10:08 /var/log/Xorg.0.log
-rw-r--r--. 1 root lsq  33627 9月  19 11:16 /var/log/Xorg.1.log
-rw-r--r--. 1 root root 22681 8月  19 13:39 /var/log/Xorg.9.log
-rw-------. 1 root root 18030 9月  19 13:39 /var/log/yum.log

 

二  命令行程序

 

which 搜尋路徑中,找出某一命令行程序的文件位置

[root@localhost ~]# which lsof
/usr/sbin/lsof

which -a 命令。找出全部符合條件的路徑

 

locate 從文件名數據庫中,找出包含關鍵詞的文件路徑

[root@localhost ~]# locate lsof
/usr/include/kde4/ksysguard/lsof.h
/usr/lib64/liblsofui.so
/usr/lib64/liblsofui.so.4
/usr/lib64/liblsofui.so.4.14.8
/usr/lib64/kde4/plugins/designer/ksysguardlsofwidgets.so
/usr/sbin/lsof
/usr/share/doc/lsof-4.87
/usr/share/doc/lsof-4.87/00.README.FIRST
/usr/share/doc/lsof-4.87/00.README.FIRST_4.87
/usr/share/doc/lsof-4.87/00CREDITS
/usr/share/doc/lsof-4.87/00DCACHE
/usr/share/doc/lsof-4.87/00DIALECTS
/usr/share/doc/lsof-4.87/00DIST
/usr/share/doc/lsof-4.87/00FAQ
/usr/share/doc/lsof-4.87/00LSOF-L
/usr/share/doc/lsof-4.87/00MANIFEST
/usr/share/doc/lsof-4.87/00PORTING
/usr/share/doc/lsof-4.87/00QUICKSTART
/usr/share/doc/lsof-4.87/00README
/usr/share/doc/lsof-4.87/00TEST
/usr/share/doc/lsof-4.87/00XCONFIG
/usr/share/doc/lsof-4.87/README.lsof_4.87
/usr/share/locale/zh_CN/LC_MESSAGES/ksysguardlsofwidgets.mo
/usr/share/man/man8/lsof.8.gz

 

date 顯示,設定系統的日期和時間

經常使用的格式有

 

 

 

who  顯示如今誰在登陸主機

whoami  顯示當前登陸主機的帳號

ls  列出目錄內容

ls -a 列出全部目錄內容,包含隱藏文件

ls -A 列出全部目錄內容,包含隱藏文件,但不顯示. 和 ..

[root@localhost ~]# ls -A    不顯示 . 和 .. 
alog.txt         .bash_history  .bashrc  cos_value.c  .esd_auth  hello.c        important.file        .local    nohup.out           perl5  shellscript  sorted.txt   .tcshrc   .Xauthority  視頻  下載
anaconda-ks.cfg  .bash_logout   .cache   .cshrc       haha.c     hello.o        initial-setup-ks.cfg  main.c    ntp-4.2.8p3.tar.gz  .pki   sin_value.c  .ssh         test.sh   公共         圖片  音樂
a.out            .bash_profile  .config  .dbus        hello      .ICEauthority  .lesshst              makefile  out.sh              .rnd   sleep500.sh  .subversion  .viminfo  模板         文檔  桌面
[root@localhost ~]# ls -a   顯示 . 和 .. 第一列中的兩行
.         anaconda-ks.cfg  .bash_logout   .cache       .cshrc     haha.c   hello.o         initial-setup-ks.cfg  main.c     ntp-4.2.8p3.tar.gz  .pki         sin_value.c  .ssh         test.sh      公共  圖片  音樂
..        a.out            .bash_profile  .config      .dbus      hello    .ICEauthority   .lesshst              makefile   out.sh              .rnd         sleep500.sh  .subversion  .viminfo     模板  文檔  桌面
alog.txt  .bash_history    .bashrc        cos_value.c  .esd_auth  hello.c  important.file  .local                nohup.out  perl5               shellscript  sorted.txt   .tcshrc      .Xauthority  視頻  下載

爲啥要這樣顯示呢?

ls -la  長格式顯示目錄全部內容,包含隱藏文件

ls -ld  只顯示目錄信息,不顯示目錄內容

ls -F   在目錄後面加上標識符

 

 

 

[root@localhost ~]# ls -lF
總用量 7012
-rw-r--r--. 1 root root       0 9月  25 14:39 alog.txt
-rw-------. 1 root root    2380 8月  19 11:19 anaconda-ks.cfg
-rwxr-xr-x. 1 root root    8440 9月   2 16:51 a.out*
-rw-r--r--. 1 root root     185 9月  12 15:22 cos_value.c
-rw-r--r--. 1 root root     102 9月  12 15:22 haha.c
-rwxr-xr-x. 1 root root    8440 9月   2 16:53 hello*
-rw-r--r--. 1 root root      63 9月   2 16:51 hello.c
-rw-r--r--. 1 root root    1496 9月   2 16:52 hello.o
-rw-r--r--. 1 root root       0 9月  17 15:35 important.file
-rw-r--r--. 1 root root    2428 8月  19 13:39 initial-setup-ks.cfg
-rw-r--r--. 1 root root     292 9月  12 15:23 main.c
-rw-r--r--. 1 root root     156 9月  12 15:35 makefile
-rw-------. 1 root root      93 8月  27 14:23 nohup.out
-rw-r--r--. 1 root root 7099575 6月  30 2015 ntp-4.2.8p3.tar.gz
-rw-r--r--. 1 root root      31 9月  25 11:20 out.sh
drwxr-xr-x. 2 root root       6 8月  19 13:42 perl5/
drwxr-xr-x. 2 root root      41 9月  19 16:58 shellscript/
-rw-r--r--. 1 root root     187 9月  12 15:23 sin_value.c
-rwxr-xr-x. 1 root root      65 8月  27 14:12 sleep500.sh*
-rw-r--r--. 1 root root       0 9月  25 11:27 sorted.txt
-rwxr-xr-x. 1 root root     330 9月  25 16:00 test.sh*
drwxr-xr-x. 2 root root       6 8月  19 15:17 公共/
drwxr-xr-x. 2 root root       6 8月  19 15:17 模板/
drwxr-xr-x. 2 root root       6 8月  19 15:17 視頻/
drwxr-xr-x. 2 root root       6 8月  19 15:17 圖片/
drwxr-xr-x. 2 root root       6 8月  19 15:17 文檔/
drwxr-xr-x. 2 root root       6 8月  19 15:17 下載/
drwxr-xr-x. 2 root root       6 8月  19 15:17 音樂/
drwxr-xr-x. 2 root root       6 8月  19 15:17 桌面/

 

cat 連接文件內容並顯示

[root@localhost ~]# cat test.sh
#!/bin/bash
#
#用途:簡單的shell程序
#
#
#
function show_name()
{
        echo "今天是 $1 ,你 $2 大大,來自 $3"
}

name=$1
ip="192.168.1.16"
today=$(date +%F)

if [ $# != 1 ]; then
        echo "Usage: . /$0 [使用者名稱]"
        exit
fi

show_name "$today" "$name" "$ip"

sleep 5

echo 

echo "Bye-Bye ;-)"
[root@localhost ~]# cat hello.c test.sh
#include <stdio.h>

int main(void)
{
        printf("Hello world");
}
#!/bin/bash
#
#用途:簡單的shell程序
#
#
#
function show_name()
{
        echo "今天是 $1 ,你 $2 大大,來自 $3"
}

name=$1
ip="192.168.1.16"
today=$(date +%F)

if [ $# != 1 ]; then
        echo "Usage: . /$0 [使用者名稱]"
        exit
fi

show_name "$today" "$name" "$ip"

sleep 5

echo 

echo "Bye-Bye ;-)"
[root@localhost ~]# cat sorted.txt
#沒有任何內容
[root@localhost ~]# cat hello.c test.sh > sorted.txt
[root@localhost ~]# cat sorted.txt
#include <stdio.h>

int main(void)
{
        printf("Hello world");
}
#!/bin/bash
#
#用途:簡單的shell程序
#
#
#
function show_name()
{
        echo "今天是 $1 ,你 $2 大大,來自 $3"
}

name=$1
ip="192.168.1.16"
today=$(date +%F)

if [ $# != 1 ]; then
        echo "Usage: . /$0 [使用者名稱]"
        exit
fi

show_name "$today" "$name" "$ip"

sleep 5

echo 

echo "Bye-Bye ;-)"

[root@localhost ~]# echo $FROM | cat - sorted.txt   將echo的命令和sorted.txt連接打印。注意到中間那個 - 了麼?位補足,由於cat須要鏈接兩個文檔進行輸出,因此,用 -來補足cat的參數位置
joe@sample.edu.cn
#include <stdio.h>

 
 

int main(void)
{
printf("Hello world");
}
#!/bin/bash
#
#用途:簡單的shell程序
#
#
#
function show_name()
{
echo "今天是 $1 ,你 $2 大大,來自 $3"
}

 
 

name=$1
ip="192.168.1.16"
today=$(date +%F)

 
 

if [ $# != 1 ]; then
echo "Usage: . /$0 [使用者名稱]"
exit
fi

 
 

show_name "$today" "$name" "$ip"

 
 

sleep 5

 
 

echo

 
 

echo "Bye-Bye ;-)"

 

 

head 輸出文件默認爲前10行,

head -100 輸出文件的前100行

tail 輸出文件的後面部分 默認爲後10行

tail -100 輸出後100行

wc  計算文件內涵的總字數和行數

wc -l   顯示有多少行

wc -c 顯示有多少字符

wc -w 顯示有多少單詞

 

ln  軟硬連接

ln f1 f2 將f1 f2進行硬鏈接

ln -s f1 f3  將f3對f1進行軟連接

ls -sf f1 f3 也是將f3對f1進行軟鏈接,可是若是f3軟鏈接已經存在的話,則會刪除原來的f3,從新創建

軟鏈接,硬鏈接不懂的,能夠看之前的博客。鳥哥的書中講的很詳細

 

mkdir 創建目錄

mkdir -p  若是子目錄不存在,會同時創建相應級別的目錄

rmdir 刪除空目錄

rm 刪除文件

rm -f 強行刪除文件。若是隻執行rm的話,通常會提示你是否要刪除。若是使用命令行-f 來執行的話,則不會提示,會直接刪除

rm -Rf 目錄

-R採用遞歸方式,將目錄下的全部子目錄和文件刪除

 

find 在分層目錄中尋找文件

find 路徑 樣式  操做

find / -name '*.txt'   從根目錄往下查找全部後綴名爲txt的文件

find . -name '*.txt'  -exec rm -f {} \

會將工做目錄中的全部txt文件刪除

前半部分不講了,後面的-exec部分。exec 執行後面的命令。{} 表示找到的文件  ; 是執行 -exec的終止符,由於;是bash shell的特殊字符,因此須要\來轉義一下

find /root -type d  -print

選好文件形態是 目錄 的文件。find 選項 -type 支持的種類有

 

 

tar  將文件或目錄打包成一個文件(也能夠反向解開),並保留目錄結構和文件的權限屬性

 tar cvzf etc.tgz /etc

將/etc目錄打包成etc.tar.gz

其中 c 表明創建tar文件,v表示詳細顯示過程,z表明呼叫gzip壓縮tar 文件,f 指定文件名。

tar tvzf etc.tgz

t表示列出打包內容

tar xvzf etc.tgz

z表示呼叫gzip解壓,x表示解包

tar xvzf etc.tgz -C test2 。      若是要切換目錄解壓縮,必定要用實際路徑,而非虛擬路徑,不然會出問題。這個已經作過實驗,不然他會在虛擬目錄中在將原壓縮文件目錄進行新建並解壓縮

-C表示切換到某一目錄。這個指令的意思是,把etc.tgz 放入到 test2目錄中解壓

tar cvf - test2 | gzip -9 >save.tgz

該方法是在不支持z選項的tar版本中。先用cvf把test2目錄打包,- 表示將打包結果往標準輸出丟,而後經由管道 交給gzip壓縮,在轉向文件save.tgz。其中 -9表示壓縮比最高。

gzip -9dc save.tgz | tar xvf -

該方法也是在不支持z選項的tar版本中,解壓縮。先用gzip解壓縮save.tgz。其中 -d 表示解壓之意, -c表示解壓縮到標準輸出,而後經過管道,交給tar解壓。其中 最後一個 -  表示有標準輸入讀取數據

備份目錄A到目錄B

[root@localhost ntpFile]# tar cvf - . | tar xvf - -C /root/ntpFile2   

這有兩點要注意一下,首先要進入tar目錄之中,而後後面的路徑要實際路徑。這樣,就會將當前目錄中的全部東西備份到ntpFile2中

 

basename 取得路徑名稱中最後的文件名部分

basename /usr/local/bin/sftp

顯示結果就是sftp

 

dirname   取得路徑名稱中的目錄部分

dirname /usr/local/bin/sftp   顯示結果/usr/local/bin

 

sort  對文本文件的每一行作排序

sort dataf4   按照ascII 的字符排列作升序

sort -r dataf4   降序

sort -n dataf4   按照字符串的數值大小升冪排序

 sort -k 2 dataf5   以 data5中的第二個字段作排序依據(以字符串比較的方式),若是使用-n 選項,則以數值大小的方式來比較

sort -nk 2 dataf5  以數值大小的方式從data5中的第二個字段做爲排序依據進行排序

sort -n +2 dataf3  跳過前兩欄,以dataf3中的第三欄以數值大小做爲排序依據排序    【經檢驗,跨越行此操做無效

sort -nr +2 -t: /etc/passwd -t 表示以:爲分隔符,+2 跳過前兩欄 ,以 /etc/passwd的第三欄做爲降序牌系列,-n 表示sort以數值大小的方式進行比較,-r  降序排列【經檢驗,跨越行此操做無效

[root@localhost ~]# sort -nr +2 -t: /etc/passwd 
sort: cannot read: +2: 沒有那個文件或目錄
若是要實現上述的命令,只能先取第三行以後的數據,在排序,刪除重複行
sed -n '2,$p' /et/passwd | sort -nr -t: | uniq

sort < data4 > sorted 

從標準輸入data4排序後,轉存到sorted中

 

uniq  對以排序文件刪除重複行

uniq dataf3  注:若重複列未連續擺在一塊兒,則不會起任何做用。因此這就要求,先排序再刪除重複行,不然會致使有些重複行沒法刪除

sort dataf3 | uniq

sort dataf3 | uniq -d  挑出重複行

sort dataf3 | uniq -c 計算每一行重複的次數

 

cut 對文件中的每一行抽取某一部分

cut -c2 dataf1   抽取dataf1中每一行的第2個字符

[root@localhost ~]# cut -c2 /etc/passwd
o
i
a
d

cut -c3-10 dataf1 從dataf1中每一行抽取3-10個字符

[root@localhost ~]# cut -c2-10 /etc/passwd
oot:x:0:0
in:x:1:1:
aemon:x:2
dm:x:3:4:
p:x:4:7:l

cut -c1-3 ,22- dataf1 從dataf1中抽取1-3和22到以後的全部字符

cut -d: -f1 /etc/passwd   -d 是以:爲分隔符   -f1 是取第一個字段的意思

[root@localhost ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp

cut -d: -f3,4 /etc/passwd   以:爲分隔符,取第三,第四行的數據

[root@localhost ~]# cut -d: -f1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5

[root@localhost ~]# cut -d: -f1,3- /etc/passwd    #3-表示從第3行開始到最後全部的數據所有重現

root:0:0:root:/root:/bin/bash
bin:1:1:bin:/bin:/sbin/nologin
daemon:2:2:daemon:/sbin:/sbin/nologin
adm:3:4:adm:/var/adm:/sbin/nologin
lp:4:7:lp:/var/spool/lpd:/sbin/nologin

 

 

paste  對文件以行和行的方式合併

paste dataf1 dataf2   將dataf1的每一行和dataf2的每一行合併。默認以tab分隔

paste -d'#' dataf1 dataf2  將dataf1每一行與dataf2每一行合併。默認以#分割

paste -s dataf4 將dataf4每一行本身合併起來。並默認以tab分割

 

tr  轉換或刪除字符

tr k K <dataf1 將dataf1中的k 轉換成 K

tr ',' '\n' <ttt  將ttt文件中的逗號  轉換成 \n

tr -d k 將k字符所有刪除

cut -d: -f1-6 /etc/passwd | tr :'+'  將etc/password的1-6欄中的全部改爲 + 分割

[root@localhost ~]# cut -d: -f1-6 /etc/passwd | tr : '+'  
root+x+0+0+root+/root
bin+x+1+1+bin+/bin
daemon+x+2+2+daemon+/sbin
adm+x+3+4+adm+/var/adm
lp+x+4+7+lp+/var/spool/lpd
sync+x+5+0+sync+/sbin
shutdown+x+6+0+shutdown+/sbin
halt+x+7+0+halt+/sbin
mail+x+8+12+mail+/var/spool/mail

tr '[A-Z]' '[a-z]' <dataf1  將dataf1中的全部大寫字母改爲小寫字母

tr -s '''' < dataf1  將多餘的空白刪除,只剩一個  (-s 是擠壓的意思)

 

 

grep 顯示符合樣式的行

grep A* 將全部包含A的文件及行顯示出來

grep -i A* 將全部包含A或a的文件及行顯示出來  -i 是不區分大小寫的意思

grep -v La data3 將不包含La的文件及行顯示出來  -v 是不包含的意思

grep -l La* 只顯示包含La的行

grep -n La* 同上,但也顯示出行號

dmesg | grep eht0 將含有eth0的這個關鍵詞的信息顯示出來。

Linux 命令 dmesg 用來顯示開機信息,kernel 會將開機信息存儲在 ring buffer 中。如果開機時來不及查看信息,可利用 dmesg 來查看。開機信息亦保存在 /var/log 目錄中,名稱爲 dmesg 的文件裏。經過 grep 使用管道查看 dmesg 的輸出,能夠更容易找到待查信息。

grep -q keyword filename 若filename包含keyword則返回0(真),不然,返回非0

每一個命令或Script,在執行完畢後,其執行結果會以一個數值傳回,成爲離去狀態。他的傳回值會放在 $? 這個變量中,只要echo $?,即可得知起執行結果與否。請記住0 成功,非0失敗

grep -A 200 -e 'XXXX‘ filename

-e 表示後面接的是欲比較的樣式

-A 200表示找到該樣式後再顯示接下來的200行數據

 

tee 讀取標準輸入,而後由標準輸出顯示,並把這些數據存儲在指定的文件

tee test.log 若test.log存在,則會清空,若不存在,則會建立新文件。欲結束輸入,按ctrl +d .輸入的數據回儲存在test.log中

tee -a filename 以附加的形式,將輸入的內容添加到filename文件中

 

diff  比較兩個文件的差別

diff hello.sh hello2.sh

 

comm 以列和列的方式,比較兩個已排序好的文件

第一個文件存在的內容會放在第一列

第二個文件存在的內容會放在第二列

兩個文件都存在的內容會放在第三列

 

 

 

xargs  有標準輸入,安排要執行的命令和參數

find . -name '*.txt' | xargs -n 2 diff

由如今的工做目錄,尋找擴展名爲 .txt的文件,而後丟給xargs來處理。-n 2 表示執行指令的參數之多2個,也就是說把找到的txt文件。以兩個一組的方式,丟給diff去比較差別

diff: missing operand after './.subversion/README.txt'
diff: Try 'diff --help' for more information.
[root@localhost ~]# find -name '*.txt' | xargs -n 2 diff

#若是包含的文件爲奇數,就會報錯。由於只有一個參數,而diff 須要兩個參數

 

三   執行多個命令的方法

命令行中,能夠一次執行多個命令,其方式有一下幾種

1 各命令用  ,   分割                                解析:各命令互不干擾,前面的命令執行失敗,後面的命令也會繼續執行

2 每一個命令之間用 && 分割       解析:各命令依次爲條件。前面的命令執行成功,後面的命令纔會執行。經常使用在自行安裝的script中

文中給了一個自動安裝apache和php的腳本。這個腳本的用途在於下載源代碼包文件後的自行安裝。如今通常都用yum源來安裝,若是沒有,你就只能用這個腳本文件來操做。

#! /bin/bash


#解壓縮   這個要改爲你本身的apache版本和php版本。並且這個版本很低,還須要根據最新的configure的要求進行設定。也就是說你直接用不必定好用。最新的我直接用yum安裝的,因此我就不測試了
tar -xvzf httpd-2.2.11.tar.gz &&
tar -xvzf php-5.3.0.tar.gz &&

#設定apache
echo ' Configure apache .....' &&
cd httpd-2.2.11 && 
./configure --prefix=/usr/local/apache2 --enable-so &&
make &&
make install &&

#設定/編譯/安裝php
cd ../php-5.3.0 &&
./configure \
                --with-apxs2=/usr/local/apache2/bin/apxs\
                --with-mysql=/usr/local/mysql && make && make install &&

#複製php.ini到/usr/local/lib
cp -f php.ini-production /usr/local/lib/php.ini &&

echo

echo 'Done!'

echo
~        

3  ||  命令1 || 命令2 || 命令3   解析:當命令1執行成功的時候,就會退出。若是命令1失敗,才執行命令2.同理命令3

4  將命令弄成一組,總體執行命令

  (命令1;命令2;命令3)   解析   新開一個shell窗口來執行。這樣就能夠經過 & 來拖到後臺執行

        { 命令1;命令2;命令3 }    解析   在當前shell整體執行全部命令。在大括號的左右兩側,各須要間隔至少一個空格,並且每一個命令都須要一個;來作爲結束

 

 

四  記錄命令執行過程

 

Script工具程序   /usr/lib/script目錄中

若是不提供自定義日誌文件,默認會將數據存儲在 typescript 文件中

script log.txt    就會將執行命令所產生的信息記錄下來,存放在Log.txt中,執行script以後,就能夠執行各類操做了。script會記錄下全部的輸出信息,若是要結束操做,exit 即可以離開script

[root@localhost ~]# script log.txt Script started, file is log.txt
[root@localhost ~]# ls -la /tmp/
總用量 1028
drwxrwxrwt. 24 root root   4096 10月  8 16:13 .
dr-xr-xr-x. 18 root root    239 8月  28 17:26 ..
drwx------.  2 root root     20 9月  19 11:09 .esd-0
drwx------.  2 lsq  lsq      20 9月  19 11:14 .esd-1000
drwxrwxrwt.  2 root root      6 8月  19 11:03 .font-unix
drwxr-xr-x.  2 root root      6 9月  18 14:15 hsperfdata_root
drwxrwxrwt.  2 root root     44 9月  19 11:14 .ICE-unix
drwx------.  2 lsq  lsq      25 9月  19 11:14 ssh-8c8E8ZoTR6JT
drwx------.  3 root root     17 9月  26 08:45 systemd-private-2f2a7500abcf4dba99ce9b179eae6d57-httpd.service-3n0xvq
drwx------.  3 root root     17 9月  26 08:45 systemd-private-2f2a7500abcf4dba99ce9b179eae6d57-systemd-machined.service-sWIVg8
drwx------.  3 root root     17 9月  19 13:42 systemd-private-32b42b88babe40ff91a8f886ef37c4de-colord.service-JTClM4
drwx------.  3 root root     17 9月  20 10:08 systemd-private-32b42b88babe40ff91a8f886ef37c4de-fwupd.service-j3e8ab
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-httpd.service-CTIPHR
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-rtkit-daemon.service-1cRAUO
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-systemd-machined.service-TIRI3p
drwx------.  2 lsq  lsq       6 9月  18 16:40 Temp-e6f811a6-1f8e-4f3a-b10c-847129fbefbc
drwxrwxrwt.  2 root root      6 8月  19 11:03 .Test-unix
drwx------.  2 root root      6 9月  19 11:09 tracker-extract-files.0
drwx------.  2 lsq  lsq       6 9月  18 16:40 tracker-extract-files.1000
drwx------.  2 root root      6 9月  19 11:13 vmware-root_7008-2831224237
drwx------.  2 root root      6 9月  26 08:45 vmware-root_7029-3854406118
drwx------.  2 root root      6 9月  17 15:19 vmware-root_7031-3845951588
drwxrwxrwt.  2 root root     26 9月  19 11:14 .X11-unix
drwxrwxrwt.  2 root root      6 8月  19 11:03 .XIM-unix
-rw-------.  1 root root 523044 9月  19 11:10 yum_save_tx.2019-09-19.11-10.BH4F6D.yumtx
-rw-------.  1 root root 523044 9月  20 10:54 yum_save_tx.2019-09-20.10-54.ZDRbv2.yumtx
[root@localhost ~]# exit exit Script done, file is log.txt [root@localhost ~]# cat log.txt
腳本啓動於 2019年10月08日 星期二 16時19分43秒
[root@localhost ~]# ls -la /tmp/
總用量 1028
drwxrwxrwt. 24 root root   4096 10月  8 16:13 .
dr-xr-xr-x. 18 root root    239 8月  28 17:26 ..
drwx------.  2 root root     20 9月  19 11:09 .esd-0
drwx------.  2 lsq  lsq      20 9月  19 11:14 .esd-1000
drwxrwxrwt.  2 root root      6 8月  19 11:03 .font-unix
drwxr-xr-x.  2 root root      6 9月  18 14:15 hsperfdata_root
drwxrwxrwt.  2 root root     44 9月  19 11:14 .ICE-unix
drwx------.  2 lsq  lsq      25 9月  19 11:14 ssh-8c8E8ZoTR6JT
drwx------.  3 root root     17 9月  26 08:45 systemd-private-2f2a7500abcf4dba99ce9b179eae6d57-httpd.service-3n0xvq
drwx------.  3 root root     17 9月  26 08:45 systemd-private-2f2a7500abcf4dba99ce9b179eae6d57-systemd-machined.service-sWIVg8
drwx------.  3 root root     17 9月  19 13:42 systemd-private-32b42b88babe40ff91a8f886ef37c4de-colord.service-JTClM4
drwx------.  3 root root     17 9月  20 10:08 systemd-private-32b42b88babe40ff91a8f886ef37c4de-fwupd.service-j3e8ab
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-httpd.service-CTIPHR
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-rtkit-daemon.service-1cRAUO
drwx------.  3 root root     17 9月  19 11:13 systemd-private-32b42b88babe40ff91a8f886ef37c4de-systemd-machined.service-TIRI3p
drwx------.  2 lsq  lsq       6 9月  18 16:40 Temp-e6f811a6-1f8e-4f3a-b10c-847129fbefbc
drwxrwxrwt.  2 root root      6 8月  19 11:03 .Test-unix
drwx------.  2 root root      6 9月  19 11:09 tracker-extract-files.0
drwx------.  2 lsq  lsq       6 9月  18 16:40 tracker-extract-files.1000
drwx------.  2 root root      6 9月  19 11:13 vmware-root_7008-2831224237
drwx------.  2 root root      6 9月  26 08:45 vmware-root_7029-3854406118
drwx------.  2 root root      6 9月  17 15:19 vmware-root_7031-3845951588
drwxrwxrwt.  2 root root     26 9月  19 11:14 .X11-unix
drwxrwxrwt.  2 root root      6 8月  19 11:03 .XIM-unix
-rw-------.  1 root root 523044 9月  19 11:10 yum_save_tx.2019-09-19.11-10.BH4F6D.yumtx
-rw-------.  1 root root 523044 9月  20 10:54 yum_save_tx.2019-09-20.10-54.ZDRbv2.yumtx
[root@localhost ~]# exit
exit

Script done on 2019年10月08日 星期二 16時19分56秒

 

 

五  命令行編輯方法

 

Bash支持命令行編輯,也就是若是打錯了某個命令,能夠移動光標對指令進行修改。Bash之因此有這個功能是由於GNU的Readline函數庫。Readline函數庫支持 Emacs和vi兩種編輯模式。文中推薦Emacs模式

首先檢查編輯模式是否位Emacs模式

[root@localhost ~]# set -o | grep emacs
emacs           on    #我這裏是打開的
#若是是關閉的,則用下面命令打開
[root@localhost ~]# set -o emacs

 

 

 

 

 

 

 

 

 

 

 

 

 六   Bash 分析命令行的方式

分割管道=》對各命令進行分析=》取出token(使用分隔符,如空白 tab 將命令分割成組成命令的單詞) =》替換別名 =》括號擴展 ({a,b}in  擴展成 ain,bin)=> ~ 符號擴展 (若是有家目錄符號,擴展成實際路徑) => 替換變量 =》 替換命令 =》 替換算術 =》 替換通配符

=》 根據函數,內置命令,搜尋路徑順序,找尋第一個token所表明的命令位於何處 =》 執行替換完成的指令

 

 

相關文章
相關標籤/搜索