『壹』 unix shell命令分割文件
awk'{print>substr($0,1,2)".txt"}'
『貳』 lunix下shell命令怎樣使用
想要什麼上網去看看吧,哥們可以多看看鳥哥的私房菜,http://linux-vbird.bluedata.org/
『叄』 Unix / 類 Unix shell 中有哪些很酷很冷門很少用很有用的命令
1、lsof: 列出所有打開的文件。舉例:'lsof -p 456,123' 列出進程456和123所有打開的文件。'lsof -i 6' 列出所有IPv6協議的網路文件。
2、nl: 將輸出的每一行加上行號。例如:'cat 1.txt | nl',輸出1.txt的文件並加上行號
3、CTRL+a 和 CTRL+e: 到命令行首(ctrl+a)和行末(ctrl+e),在小鍵盤上特別有用,不用費心思找HOME和END鍵
4、ALT+.:列出上一個命令的最後一個參數。這個命令我最常用。例如'mkdir mydir',然後'cd ALT+.'。很好用
5、CTRL+R: 這個也很常用,搜索命令歷史相當方便。
6、grep/sed/cut/tr/: 這幾個命令的組合能夠很方便的解析很多文件,就不一一舉例了。個人不常用awk,覺得'sed'就夠用了。
7、find/xargs: 這個我也很常用,在一堆文件中查找某個特定字元串。這個常常和6中列出命令組合使用。
8、ls -d */: 這個命令僅列出當前目錄下所有的一級子目錄,不包括'.'開頭的隱藏目錄,如果想列出隱藏目錄,使用'ls -d .*'。'find -type d -maxdepth 1'也有類似的效果。
9、id: 列出本用戶所屬的所有用戶組。
『肆』 請問 unix 的shell命令集 都有哪些
UNIX系統常用命令
UNIX系統常用命令格式:
command [flags] [argument1] [argument2] ...
其中flags以-開始,多個flags可用一個-連起來,如ls -l -a 與ls -la相同。
根據命令的不同,參數分為可選的或必須的;所有的命令從標准輸入接受輸入,輸出
結果顯示在標准輸出,而錯誤信息則顯示在標准錯誤輸出設備。可使用重定向功能對
這些設備進行重定向。
命令在正常執行結果後返回一個0值,如果命令出錯可未完全完成,則返回一個
非零值(在shell中可用變數$?查看). 在shell script中可用此返回值作為控制邏輯
的一部分。
註:不同的UNIX版本的flags可能有所不同。
1、與用戶相關的命令
1.1 login
(在LINUX Redhat下此命令功能與Solaris/BSD不同,執行login會退出當前任務).
login:
Password:
相關文件:
在下面的這些文件中設定shell運行時必要的路徑,終端類型,其他變數或特殊程序.
$HOME/.profile (Bourne shell, sh, bash)
$HOME/.cshrc (csh, tcsh)
$HOME/.tcshrc (tcsh)
/etc/passwd文件中列出每個用戶的shell
/etc/csh.cshrc
/etc/csh.login
/etc/profile (Bourne shell, bash)
/etc/login (Bourne shell, bash)
csh: /etc/csh.cshrc和$HOME/.cshrc每次執行都會讀取,
而/etc/csh.login和$HOME/.login只有注冊shell才執行
修改相應文件後使用 source .cshrc使能相關修改,如果修改了path則
還需使用rehash刷新可執行文件hash表。
tcsh: $HOME/.tcshrc, 沒有些文件讀取.cshrc
sh: /etc/profile和$HOME/.profile注冊shell
bash: /etc/profile和$HOME/.bash_profile注冊shell讀取
.bashrc互動式非注冊shell才讀取。
在sh/bash下手工執行相關文件:
. /etc/profile
相關文件執行順序
sh: /etc/profile -> $HOME/.profile
csh/tcsh: /etc/csh.cshrc -> /etc/csh.login -> $HOME/.cshrc
-> $HOME/.login
變數的設置:
sh/bash: TERM=vt100; export TERM
OR: export TERM=vt100 (bash)
csh: setenv TERM vt100
常用變數:
(1)Backspace $HOME/.profile $HOME/.cshrc
stty erase ^H
(2)umask 新建文件或目錄的保護屬性
(3)TERM
(4)切忌PATH中加入 .
1.2. rlogin
與telnet類似,連接到遠程主機.
rlogin remotehost [ -l loginname ]
Or:
rsh [-l loginname] remotehost [command ]
相關文件:
遠程主機的 /etc/hosts.equiv 和 $HOME/.rhosts
相關網路配置文件:
/etc/inetd.conf文件中的r系統服務.Redhat下為shell, login, exec, 對應
的網路守護進程(daemon)為in.rshd, in.rlogind, in.rexecd.
建議: 從安全形度出發,關閉r系列服務.
1.3. telnet
telnet remotehost [port]
相關文件:
/etc/inetd.conf文件中的telnet服務.
/etc/issue.net
TIPS: strings /usr/sbin/in.telnetd |egrep issue
1.4. passwd 更改口令
1.5 exit 退出當前shell
2. 命令或文件的查找
相關shell變數:
csh/tcsh: $path
.cshrc set path=(/usr/bin /usr/local/bin $path)
sh/bash: $PATH
.profile .bash_profile
PATH=/usr/local/bin:$PATH; export PATH
2.1 which
Syntax: which command
which為bash/tcsh內帶命令
[hbwork@toshiba]$ which which
which: shell built-in command.
2.2 where(tcsh)
Syntax: where command
2.3 locate (LINUX)
Syntax: locate filename
相關命令: updatedb更改locate文件名資料庫
3. 查看命令的用法
man
相關文件:
/etc/man.config
4. 管理員常用命令
4.1 install
用於安裝一個新的命令或daemon等. 一般情況下可以不用,但很多軟體在其安裝
shell script中使用install將目標文件復制到相應的目錄並設置正確的屬性等.
NAME
install - files and set their attributes
SYNOPSIS
install [options] [-s] [--strip] source dest
install [options] [-s] [--strip] source... directory
install [options] [-d,--directory] directory...
Options:
[-c] [-g group] [-m mode] [-o owner] [--group=group]
[--mode=mode] [--owner=owner] [--help] [--version]
4.2 shutdown
不同的unix參數不盡相同,在linux下常用如下方式關機:
shutdown -h now
shutdown -r now (等同於reboot)
4.3 halt
poweroff
關機,在多用戶方式下(Runlevel 3)不建議使用,
4.4 ulimit
korn shell和bourne shell中可用此命令,在csh系列中相應的命令為limit.
用於限制每個進程可使用的系統資源,通常分兩種限制:
. Hard limits 系統所定義的資源,只有root能更改
. 軟限制 對新建進程所使用的限制,可增加到系統的Hard Limit.
Flags:
-a 列出軟限制
-Ha 列出Hard Limit
-c size 設置coremp size的塊大小
-t size cputime
-f size file size
4.5 umask 系統管理員用於設置用戶默認的umask值.
5.與進程相關的命令
進程基本概念: 進程與命令的執行相關,但並不是一一對應; 一條命令可能對應若干
個進程(如shell script, pipe等).但最簡單的命令與umask只有一個進程.
進程分類:
.互動式進程:可以前台或後台執行,前後台可切換
.批處理進程:不通過終端提交,一般將它們放在任務隊列中順序執行. 如通過
at 和 crontab提交的任務.
.deamon:永不終止的進程,等待響應來自其他進程的服務請求.如sendmail,
named(DNS), POP3及apache等.
進程的相關屬性:
PID
Real UID
Effective UID (SUID)
Real GID
Effective GID (SGID)
Priority(Nice Number)執行的優先順序
5.1 ps
Process Status, 列出當前運行的進程狀態,根據選項不同,可列出所有的或部分進程
. 無選項時只列出從當前終端上啟動的進程(SYSV)或當前用戶($USER)的進程(BSD),
不同的UNIX版本之間有差別. linux使用BSD版本的ps
. BSD版本ps命令使用方法:
ps
ps aux 列出系統中所有的進程的詳細情況
ps aux |egrep inetd
輸出信息內容:
PID
Terminal 如無相應終端則為-
cpu time
UserID or Username
進程啟動時間或日期
進程狀態(Stat: S(leep) R(unnable) D(uninterrupt sleep) Z(ombie)
W 進程沒有駐留頁面, N: 進程的nice值為負值
5.2 kill
kill [-signal] PID
kill -l 列出可用信號量
常用信息量:
-HUP (1) 重啟進程
ps ax |egrep inetd
kill -HUP pid_of_inetd
-KILL (9) 強制中止
PID取值含義:
>0 指特定進程(實際進程)
=0 同組用戶的所有process(PGID)
=-1 Effective UID = 執行命令用戶之uid
<0 && !=1 取絕對值之進程
5.3 nice
用於改變一個或多個進程的優先順序; 但只有root或提高進程的優先順序, 普通用戶只能
降低進程的優先順序.
nice用負數表示提高優先順序,而正數表明降低優先順序,通常此值范圍是-20~20.
如未指定提高優先順序,nice會降低或不改變進程的優先順序. 當然如果沒有許可權的話
進程的優先順序不會有任何改變.
一般情況下我們用nice來降低後台進程的優先順序(默認優先順序為10).
nice find . -name "*.c" -print &
nice 16 find . -name "*.c" -print &
5.4 wait
wait PID
等待作業結束,參數為pid,在shell script中有時用到.
5.5 nohup
nohup command &
5.6 sleep
sleep seconds
進程前後台切換: Ctrl-Z, fg, bg
6. 通訊
6.1 ftp
6.2 mailx
6.3 minicom (串口終端,MODEM)
7. 文件比較
cmp
comm
diff (用於比較文本文件)
diff3 (比較3個文件)
sdiff
8. 文件操作
touch 創建文件,修改文件日期等
chmod
chwon
chgrp
rm 慎用 rm -rf
mv 移動文件或改名
cp cp -r 復制目錄
cat
rcp 遠程復制
ln 默認情況下為硬連接,每個文件具有相同的inode
ln -s sourcefile targetfile
9. 目錄操作
mkdir [-p] [-m mode] directory
rmdir [-p] directory
10. 文件信息命令
ls
find
最基本的功能是查找一個文件名或目錄,常用格式如下:
find . -print (類似於 ls -lR)
find可使用如下屬性進行查找:
-name 查找文件名,含通配符*?的文件名用引號括起來
-perm 00x000 八進制文件屬性
-atime n n天之前訪問過的文件
-mtime n n天之間修改過的文件
-ctime n 文件的狀態在n前之間修改過
-exec command 如命令的返回代碼為零(找到相應的文件)則真,command必須以
\; 結果,此外在命令的執行中 {} 為查找到的文件路徑名
-ok command 與exec相類似,但在執行每個命令之間要求用戶確認
-print 列印當前路徑名
-newer filename 如文件的最後修改日期較filename新則為真
-type c c=[b,c,d,l,p,f]文件類型
-user username 如文件的屬主為username則為真
-nouser 文件屬主在/etc/passwd文件中不存在
-group grouname 文件組
邏輯運算符: -a -o !
示列:
find $HOME \( -name a.out -o -name "*.o" \) -atime +7 -exec rm {} \;
find . -atime 0 -print
find / .name .profile -print
find . -perm 777 -a -mtime 7 -exec chmod 755 {} \;
file
more
less
tail (tail -f filename)
head
wc
read 用於shell編程
col
pg (SYSV)
11. 編輯器
vi
ed
joe
12. 文件內容查找
grep
egrep
正規表達式: . * ^ $ + ? []
strings
13. 任務調度
at
atq 列出隊列中的任務
crontab
14. 存儲,歸納及壓縮
compress .Z
uncompress .Z
cpio
dd dd if=inputfile of=outputfile
dd if=boot.img of=/dev/fd0H1440
pack .z 30%-50%文本文件
pcat pact file.z
gzip .gz
gunzip
tar tar -[txc]vf targetfile [sourcefile]
tar -cvf target.tar sourcefilelist
tar -tvf target.tar [filename]
tar -xvf target.tar [filename]
GNU TAR:
tar -zcvf target.tar.gz sourcefilelist
tar -zxvf target.tar.gz [filelist]
tar -ztvf target.tar.gz [filelist]
zcat .Z
uuencode
uudecode
15. 其他命令
date
env
unix2dos (linux沒有)
dos2unix
uname
uptime
free
time
top
16. 文本處理
cut
fmt 每行格式轉化為72列,用於郵件格式化
fold 折行處理,一行到多行,一般為80列
join
paste
sort
tr
tr '\"' '' < file1
#!/bin/sh
for i in *
do
mv $i `echo $i |tr /[a-z]/[A-Z]/`
done
uniq 報告/刪除文件中相同的復制行
sed 流編輯器
sed 's/96/tt/' student.txt
awk
awk '{print $1" "$2}' sourcefile
awk -f class.awk student.txt > linux-student.txt
文件class.awk內容如下:
#
#class.awk
#
BEGIN {printf "%-12s%s\n","班級","學號 姓名";
printf "-------------------------------------------\n\n"}
/[1-9]+\B*$/ {class=$0}
/^9[5-8]+/ {printf "%-12s%s\n", class,$0 | "sort"}
#Enf of class.awk
awk -f traffic.awk traffic.txt
文件traffic.awk內容如下:
#
#traffic.awk
#
{ if ( $2 < 10000 ) t_0 += $2;
if ( $2 > 10000 && $2 < 50000) t_10 += $2;
if ( $2 > 50000 && $2 < 100000) t_50 += $2;
if ( $2 > 100000) t_100 += $2;
total += $2 }
END {printf "t_0 = %dKB %5.2f\%\n",t_0,t0*100/total;
printf "t_10 = %dKB %5.2f\%\n",t_10,t10*100/total;
printf "t_50 = %dKB %5.2f\% \n",t_50,t_50*100/total;
printf "t_100 = %dKB %5.2f\%\n",t_100,t_100*100/total;
printf "Total = %dKB\n", total}
#End of traffic.awk
17. 網路配置命令及故障排除命令
17.1 ifconfig
Interface Config , 網卡配置命令, 相關文件:/proc/net/dev
詳細使用說明: man ifconfig
示例:
#ifconfig
lo Link encap:Local Loopback
網卡標識 封裝類型: 本地回環
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
IP地址:127.0.0.1 廣播地址:127.255.255.255 子網掩碼:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
已啟動 接受廣播 本地回環 正在運行 最大傳輸單元: 3584 路由距離向量:1
RX packets:718 errors:0 dropped:0 overruns:0 frame:0
已接受數據包:718
TX packets:718 errors:0 dropped:0 overruns:0 carrier:0
已發送數據包:718
collisions:0
碰撞:0
eth0 Link encap:Ethernet HWaddr 00:80:C8:4C:6A:D0
網卡標識 封裝類型: Ethernet 硬體(MAC)地址: 00:80:C8:4C:6A:D0
inet addr:202.118.66.81 Bcast:202.118.66.255 Mask:255.255.255.0
IP地址:202.118.66.81 廣播地址:202.118.66.255 子網掩碼:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
已啟動 接受廣播 正在運行 多點廣播 最大傳輸單元: 1500 路由距離向量:1
RX packets:13900 errors:0 dropped:0 overruns:0 frame:0
已接受數據包:13900
TX packets:5859 errors:0 dropped:0 overruns:0 carrier:0
已發送數據包:5859
collisions:0
碰撞:0
Interrupt:10 Base address:0xe400
中斷(IRQ):10 埠地址: 0xe400
#ifconfig eth0 顯示eth0的相關信息
#ifconfig -a 顯示所有網路設備的配置信息
#ifconfig eth0 down Down掉eth0
#ifconfig eth0 202.118.66.81 broadcast 202.118.66.255 [up]
#ifconfig eth0 202.118.66.81 broadcast 202.118.66.255 netmask 255.255.255.0
#ifconfig eth0 up
17.2 route
路由表維護命令, 相關文件: /proc/net/route
$ /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
localnet * 255.255.255.0 U 0 0 49 eth0
192.168.1.0 * 255.255.255.0 U 0 0 655 eth1
192.168.2.0 * 255.255.255.0 U 0 0 498 eth2
192.168.3.0 * 255.255.255.0 U 0 0 825 eth3
127.0.0.0 * 255.0.0.0 U 0 0 13 lo
default olive.dlut.e. 0.0.0.0 UG 1 0 4834 eth0
#route add default gw 202.118.66.1
#route add default gw 202.118.66.1 eth0
#/sbin/route add -net 202.118.68.0 netmask 255.255.252.0 gw 202.118.66.16
#/sbin/rouet del default 202.118.66.1
#/sbin/route del -net 202.118.68.0 netmask 255.255.252.0 gw 202.118.66.16
17.3 netstat
顯示主機當前路由表, 相關文件: /proc/net/route
netstat -rn
/home/hbwork[102]netstat -rn
Routing Table:
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ ---------
202.118.70.27 202.118.66.16 UGHD 0 1
202.118.69.254 202.118.66.16 UGHD 0 1
202.118.68.243 202.118.66.16 UGHD 0 1
202.118.70.21 202.118.66.16 UGHD 0 0
202.118.71.10 202.118.66.16 UGHD 0 1
202.118.71.204 202.118.66.16 UGHD 0 1
202.118.68.160 202.118.66.16 UGHD 0 1
202.199.128.52 202.118.66.254 UGHD 0 2
202.118.68.66 202.118.66.16 UGHD 0 1
202.118.69.69 202.118.66.16 UGHD 0 1
202.118.69.228 202.118.66.16 UGHD 0 1
202.118.71.68 202.118.66.16 UGHD 0 1
202.118.70.37 202.118.66.16 UGHD 0 1
202.118.66.0 202.118.66.18 U 3 12259 hme0
224.0.0.0 202.118.66.18 U 3 0 hme0
default 202.118.66.1 UG 0 70354
127.0.0.1 127.0.0.1 UH 0 41316 lo0
Destionation: 目標網路或主機
Gateway: 下一個路由,認為距離目標較近的路由的IP地址,在數據傳送時將發往
這一IP地址.
Flags:
U Router is up, 目標可達
H Specific router,到特定主機的路由
G 此路由為其他路由進行間接訪問到的,如果沒有G標志則表明相應的
路由器或主機是直接連接在相應的路由器上的.
D 此路由是ICMP協議的路徑重定向信息所建立的.
M 由ICMP之重定向信息所修改
REFS: 在此路由上現在正在使用的鏈接數,這些連接可能是由連續時間較長的ftp或
telnet任務, 每個使用tcp的服務或應用在執行時此列值均加1.
Use: 自TCP/IP啟動以來通過此路由器的數據包量.
Interface: 網卡邏輯名,UNIX不同取名不同.
17.4 nslookup
Name Server Lookup, DNS伺服器診斷工具
使用示列:
[hbwork@helius hbwork]$ nslookup www.dlut.e.cn
Server: cedrus.dlut.e.cn
Address: 202.118.66.6
Name: peony.dlut.e.cn
Address: 202.118.66.18
Aliases: www.dlut.e.cn
[hbwork@helius hbwork]$ nslookup
Default Server: cedrus.dlut.e.cn
Address: 202.118.66.6
> www.dlut.e.cn
Server: cedrus.dlut.e.cn
Address: 202.118.66.6
Name: peony.dlut.e.cn
Address: 202.118.66.18
Aliases: www.dlut.e.cn
> set q=ns #查詢相應域的DNS伺服器
> dlut.e.cn #輸入要查詢的域名
Server: cedrus.dlut.e.cn #默認域名伺服器為cedrus.dlut.e.cn
Address: 202.118.66.6 #參考/etc/resolv.conf文件
dlut.e.cn nameserver = gingko.dlut.e.cn
dlut.e.cn nameserver = olive.dlut.e.cn
dlut.e.cn nameserver = cedrus.dlut.e.cn
gingko.dlut.e.cn internet address = 202.118.66.8
olive.dlut.e.cn internet address = 202.118.68.1
olive.dlut.e.cn internet address = 202.118.69.1
olive.dlut.e.cn internet address = 202.118.70.1
olive.dlut.e.cn internet address = 202.118.71.1
olive.dlut.e.cn internet address = 202.118.66.16
cedrus.dlut.e.cn internet address = 202.118.66.6
> dl.lnpta.net.cn #查詢dl.lnpta.net.cn的域名伺服器
Server: cedrus.dlut.e.cn
Address: 202.118.66.6
Non-authoritative answer:
dl.lnpta.net.cn nameserver = ns.lnpta.net.cn
Authoritative answers can be found from:
ns.lnpta.net.cn internet address = 202.96.64.68
> server ns.lnpta.net.cn
Default Server: ns.lnpta.net.cn
Address: 202.96.64.68
server: ns.lnpta.net.cn
Address: 202.96.64.68
Non-authoritative answer:
www.dlut.e.cn canonical name = peony.dlut.e.cn
> dlut.e.cn #查詢域dlut.e.cn的MX記錄
Server: ns.lnpta.net.cn
Address: 202.96.64.68
Non-authoritative answer:
dlut.e.cn preference = 1, mail exchanger = gingko.dlut.e.cn
Authoritative answers can be found from:
dlut.e.cn nameserver = gingko.dlut.e.cn
dlut.e.cn nameserver = CEDRUS.dlut.e.cn
dlut.e.cn nameserver = olive.dlut.e.cn
gingko.dlut.e.cn internet address = 202.118.66.8
CEDRUS.dlut.e.cn internet address = 202.118.66.6
olive.dlut.e.cn internet address = 202.118.71.1
olive.dlut.e.cn internet address = 202.118.66.16
olive.dlut.e.cn internet address = 202.118.68.1
olive.dlut.e.cn internet address = 202.118.69.1
olive.dlut.e.cn internet address = 202.118.70.1
> exit
17.5 ping
TCP/IP ICMP(Internet Control Message Protocol)診斷工具
ping [hostname|IpAddress]
Error Message: host unreachable
network unreachable
[hbwork@helius hbwork]$ ping 202.118.66.1
PING 202.118.66.1 (202.118.66.1): 56 data bytes
64 bytes from 202.118.66.1: icmp_seq=0 ttl=255 time=23.1 ms
64 bytes from 202.118.66.1: icmp_seq=1 ttl=255 time=2.1 ms
64 bytes from 202.118.66.1: icmp_seq=2 ttl=255 time=1.9 ms
--- 202.118.66.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 1.9/9.0/23.1 ms
17.6 hostname
顯示或設置主機名
17.7 domainname
顯示或設置主機域名
17.8 traceroute
Windows 95: tracert
traceroute hostname
traceroute destionation_ip_address
17.9 arp
顯示或設置相應主機/ip地址的mac地址
相關文件: /proc/net/arp
cat /proc/net/arp
$arp hostname
$arp -a
$arp ip_address
顯示或設置主機名需要root許可權
#arp -s hostname eth_address [temp] [pub]
#arp -d hostname
#arp -d ip_address
#arp -f mac_ip_map_file 常用文件名為/etc/ether
『伍』 Unix編程系統如何轉換成shell命令
Unix shell 不但是用戶交互界面,還是一門程序設計語言,系統注冊進入時就會執行一個Unix shell命令文件 .profile ,下面對Unix shell中的常用命令作簡單介紹。
$n shell 程序命令行中的第n 個參數,n為0-9,當n 為0時表示命令名
$# 命令行中參數的個數
$$ 本shell 命令的進程號
$! 最後一個後台進程的代號
$* 所有命令行參數
$@ 與$*相似,但其值不同
$HOME 注冊時進入的目錄
$PATH 命令的搜索目錄
$PS1 系統第一個提示符,一般為$
$PS2 系統第二個提示符,一般為>
shift [n] 將命令行參數往左移一位,但$0不變
變數名=字元串 將字元串賦予變數名,以後可用$變數名引用該變數
export 變數名表 將變數名表所列變數傳遞給子進程
read 變數名表 從標准輸入讀字元串,傳給指定變數
echo 變數名表 將變數名表指定的變數顯示到標准輸出
set 顯示設置變數
env 顯示目前所有變數
if 條件執行,語法是:
if 條件
then 指令
ficase 分支執行,語法是:
case 字元串變數 in
值1) 指令...
值2) 指令...
...
esacwhile 條件為真時循環,語法是:
while 條件
do
指令...
doneuntil 條件為假時循環,語法是:
until 條件
do
指令...
donefor 變數在表中時循環,語法是:
for 變數名 in 字組表
do
指令...
donebreak 從循環中退出,語法:break n
n 表示跳出循環的層數continue 繼續循環,語法:continue n
n 表示退到包含continue 語句的第n 層繼續循環exit 退出shell
func shell內部可定義函數,語法:
func 函數名()
{
指令...
}expr 將其後的串解釋為表達式並計算其值,運算符前後需有空格
trap 捕獲信號,語法 trap n ,捕獲信號 n (信號說明參見kill)test 條件測試,語法 test [選項] 參數選項
-f 文件 若文件存在且可讀則真
-w 文件 若文件存在且可寫則真
-x 文件 若文件存在且可執行則真
-f 文件 若文件存在且為普通文件則真
-d 文件 若文件存在且為目錄文件則真
-p 文件 若文件存在且為fifo文件則真
-s 文件 若文件存在且不空則真
-z 串 若串長度為0則真
-n 串 若串長度不為0則真串 若串不是空串則真
串1=串2 若串1等於串2則真
串1!=串2 若串1不等於串2則真
n1 -eq n2 若n1與n2數值相當則真
n1 -ne n2 若n1與n2數值不相當則真
n1 -lt n2 若n1小於n2則真
n1 -le n2 若n1小於等於n2則真
n1 -gt n2 若n1大於n2則真
n1 -ge n2 若n1大於等於n2則真
可用 與 -a 或 -o 非 ! 將條件表達式連接起來
『陸』 unix有多少種類型的shell 命令分別是什麼內核如何執行他們
一般大同小義
系統信息
arch 顯示機器的處理器架構(1)
uname -m 顯示機器的處理器架構(2)
uname -r 顯示正在使用的內核版本
dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 羅列一個磁碟的架構特性
hdparm -tT /dev/sda 在磁碟上執行測試性讀取操作
cat /proc/cpuinfo 顯示CPU info的信息
cat /proc/interrupts 顯示中斷
cat /proc/meminfo 校驗內存使用
cat /proc/swaps 顯示哪些swap被使用
cat /proc/version 顯示內核的版本
cat /proc/net/dev 顯示網路適配器及統計
cat /proc/mounts 顯示已載入的文件系統
lspci -tv 羅列 PCI 設備
lsusb -tv 顯示 USB 設備
date 顯示系統日期
cal 2007 顯示2007年的日歷表
date 041217002007.00 設置日期和時間 - 月日時分年.秒
clock -w 將時間修改保存到 BIOS
關機 (系統的關機、重啟以及登出 )
shutdown -h now 關閉系統(1)
init 0 關閉系統(2)
telinit 0 關閉系統(3)
shutdown -h hours:minutes & 按預定時間關閉系統
shutdown -c 取消按預定時間關閉系統
shutdown -r now 重啟(1)
reboot 重啟(2)
logout 注銷
文件和目錄
cd /home 進入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
cd 進入個人的主目錄
cd ~user1 進入個人的主目錄
cd - 返回上次所在的目錄
pwd 顯示工作路徑
ls 查看目錄中的文件
ls -F 查看目錄中的文件
ls -l 顯示文件和目錄的詳細資料
ls -a 顯示隱藏文件
ls *[0-9]* 顯示包含數字的文件名和目錄名
tree 顯示文件和目錄由根目錄開始的樹形結構(1)
lstree 顯示文件和目錄由根目錄開始的樹形結構(2)
mkdir dir1 創建一個叫做 'dir1' 的目錄'
mkdir dir1 dir2 同時創建兩個目錄
mkdir -p /tmp/dir1/dir2 創建一個目錄樹
rm -f file1 刪除一個叫做 'file1' 的文件'
rmdir dir1 刪除一個叫做 'dir1' 的目錄'
rm -rf dir1 刪除一個叫做 'dir1' 的目錄並同時刪除其內容
rm -rf dir1 dir2 同時刪除兩個目錄及它們的內容
mv dir1 new_dir 重命名/移動 一個目錄
cp file1 file2 復制一個文件
cp dir/* . 復制一個目錄下的所有文件到當前工作目錄
cp -a /tmp/dir1 . 復制一個目錄到當前工作目錄
cp -a dir1 dir2 復制一個目錄
ln -s file1 lnk1 創建一個指向文件或目錄的軟鏈接
ln file1 lnk1 創建一個指向文件或目錄的物理鏈接
touch -t 0712250000 file1 修改一個文件或目錄的時間戳 - (YYMMDDhhmm)
file file1 outputs the mime type of the file as text
iconv -l 列出已知的編碼
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)
文件搜索
find / -name file1 從 '/' 開始進入根文件系統搜索文件和目錄
find / -user user1 搜索屬於用戶 'user1' 的文件和目錄
find /home/user1 -name \*.bin 在目錄 '/ home/user1' 中搜索帶有'.bin' 結尾的文件
find /usr/bin -type f -atime +100 搜索在過去100天內未被使用過的執行文件
find /usr/bin -type f -mtime -10 搜索在10天內被創建或者修改過的文件
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 結尾的文件並定義其許可權
find / -xdev -name \*.rpm 搜索以 '.rpm' 結尾的文件,忽略光碟機、捷盤等可移動設備
locate \*.ps 尋找以 '.ps' 結尾的文件 - 先運行 'updatedb' 命令
whereis halt 顯示一個二進制文件、源碼或man的位置
which halt 顯示一個二進制文件或可執行文件的完整路徑
掛載一個文件系統
mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經存在
umount /dev/hda2 卸載一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出
fuser -km /mnt/hda2 當設備繁忙時強制卸載
umount -n /mnt/hda2 運行卸載操作而不寫入 /etc/mtab 文件- 當文件為只讀或當磁碟寫滿時非常有用
mount /dev/fd0 /mnt/floppy 掛載一個軟盤
mount /dev/cdrom /mnt/cdrom 掛載一個cdrom或dvdrom
mount /dev/hdc /mnt/cdrecorder 掛載一個cdrw或dvdrom
mount /dev/hdb /mnt/cdrecorder 掛載一個cdrw或dvdrom
mount -o loop file.iso /mnt/cdrom 掛載一個文件或ISO鏡像文件
mount -t vfat /dev/hda5 /mnt/hda5 掛載一個Windows FAT32文件系統
mount /dev/sda1 /mnt/usbdisk 掛載一個usb 捷盤或快閃記憶體設備
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 掛載一個windows網路共享
磁碟空間
df -h 顯示已經掛載的分區列表
ls -lSr |more 以尺寸大小排列文件和目錄
-sh dir1 估算目錄 'dir1' 已經使用的磁碟空間'
-sk * | sort -rn 以容量大小為依據依次顯示文件和目錄的大小
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小為依據依次顯示已安裝的rpm包所使用的空間 (fedora, redhat類系統)
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小為依據顯示已安裝的deb包所使用的空間 (ubuntu, debian類系統)
用戶和群組
groupadd group_name 創建一個新用戶組
groupdel group_name 刪除一個用戶組
groupmod -n new_group_name old_group_name 重命名一個用戶組
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 創建一個屬於 "admin" 用戶組的用戶
useradd user1 創建一個新用戶
userdel -r user1 刪除一個用戶 ( '-r' 排除主目錄)
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用戶屬性
passwd 修改口令
passwd user1 修改一個用戶的口令 (只允許root執行)
chage -E 2005-12-31 user1 設置用戶口令的失效期限
pwck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的用戶
grpck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的群組
newgrp group_name 登陸進一個新的群組以改變新創建文件的預設群組
文件的許可權 - 使用 "+" 設置許可權,使用 "-" 用於取消
ls -lh 顯示許可權
ls /tmp | pr -T5 -W$COLUMNS 將終端劃分成5欄顯示
chmod ugo+rwx directory1 設置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r )、寫(w)和執行(x)的許可權
chmod go-rwx directory1 刪除群組(g)與其他人(o)對目錄的讀寫執行許可權
chown user1 file1 改變一個文件的所有人屬性
chown -R user1 directory1 改變一個目錄的所有人屬性並同時改變改目錄下所有文件的屬性
chgrp group1 file1 改變文件的群組
chown user1:group1 file1 改變一個文件的所有人和群組屬性
find / -perm -u+s 羅列一個系統中所有使用了SUID控制的文件
chmod u+s /bin/file1 設置一個二進制文件的 SUID 位 - 運行該文件的用戶也被賦予和所有者同樣的許可權
chmod u-s /bin/file1 禁用一個二進制文件的 SUID位
chmod g+s /home/public 設置一個目錄的SGID 位 - 類似SUID ,不過這是針對目錄的
chmod g-s /home/public 禁用一個目錄的 SGID 位
chmod o+t /home/public 設置一個文件的 STIKY 位 - 只允許合法所有人刪除文件
chmod o-t /home/public 禁用一個目錄的 STIKY 位
文件的特殊屬性 - 使用 "+" 設置許可權,使用 "-" 用於取消
chattr +a file1 只允許以追加方式讀寫文件
chattr +c file1 允許這個文件能被內核自動壓縮/解壓
chattr +d file1 在進行文件系統備份時,mp程序將忽略這個文件
chattr +i file1 設置成不可變的文件,不能被刪除、修改、重命名或者鏈接
chattr +s file1 允許一個文件被安全地刪除
chattr +S file1 一旦應用程序對這個文件執行了寫操作,使系統立刻把修改的結果寫到磁碟
chattr +u file1 若文件被刪除,系統會允許你在以後恢復這個被刪除的文件
lsattr 顯示特殊的屬性
打包和壓縮文件
bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的文件
bzip2 file1 壓縮一個叫做 'file1' 的文件
gunzip file1.gz 解壓一個叫做 'file1.gz'的文件
gzip file1 壓縮一個叫做 'file1'的文件
gzip -9 file1 最大程度壓縮
rar a file1.rar test_file 創建一個叫做 'file1.rar' 的包
rar a file1.rar file1 file2 dir1 同時壓縮 'file1', 'file2' 以及目錄 'dir1'
rar x file1.rar 解壓rar包
unrar x file1.rar 解壓rar包
tar -cvf archive.tar file1 創建一個非壓縮的 tarball
tar -cvf archive.tar file1 file2 dir1 創建一個包含了 'file1', 'file2' 以及 'dir1'的檔案文件
tar -tf archive.tar 顯示一個包中的內容
tar -xvf archive.tar 釋放一個包
tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下
tar -cvfj archive.tar.bz2 dir1 創建一個bzip2格式的壓縮包
tar -xvfj archive.tar.bz2 解壓一個bzip2格式的壓縮包
tar -cvfz archive.tar.gz dir1 創建一個gzip格式的壓縮包
tar -xvfz archive.tar.gz 解壓一個gzip格式的壓縮包
zip file1.zip file1 創建一個zip格式的壓縮包
zip -r file1.zip file1 file2 dir1 將幾個文件和目錄同時壓縮成一個zip格式的壓縮包
unzip file1.zip 解壓一個zip格式壓縮包
RPM 包 - (Fedora, Redhat及類似系統)
rpm -ivh package.rpm 安裝一個rpm包
rpm -ivh --nodeeps package.rpm 安裝一個rpm包而忽略依賴關系警告
rpm -U package.rpm 更新一個rpm包但不改變其配置文件
rpm -F package.rpm 更新一個確定已經安裝的rpm包
rpm -e package_name.rpm 刪除一個rpm包
rpm -qa 顯示系統中所有已經安裝的rpm包
rpm -qa | grep httpd 顯示所有名稱中包含 "httpd" 字樣的rpm包
rpm -qi package_name 獲取一個已安裝包的特殊信息
rpm -qg "System Environment/Daemons" 顯示一個組件的rpm包
rpm -ql package_name 顯示一個已經安裝的rpm包提供的文件列表
rpm -qc package_name 顯示一個已經安裝的rpm包提供的配置文件列表
rpm -q package_name --whatrequires 顯示與一個rpm包存在依賴關系的列表
rpm -q package_name --whatprovides 顯示一個rpm包所佔的體積
rpm -q package_name --scripts 顯示在安裝/刪除期間所執行的腳本l
rpm -q package_name --changelog 顯示一個rpm包的修改歷史
rpm -qf /etc/httpd/conf/httpd.conf 確認所給的文件由哪個rpm包所提供
rpm -qp package.rpm -l 顯示由一個尚未安裝的rpm包提供的文件列表
rpm --import /media/cdrom/RPM-GPG-KEY 導入公鑰數字證書
rpm --checksig package.rpm 確認一個rpm包的完整性
rpm -qa gpg-pubkey 確認已安裝的所有rpm包的完整性
rpm -V package_name 檢查文件尺寸、 許可、類型、所有者、群組、MD5檢查以及最後修改時間
rpm -Va 檢查系統中所有已安裝的rpm包- 小心使用
rpm -Vp package.rpm 確認一個rpm包還未安裝
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 從一個rpm包運行可執行文件
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 從一個rpm源碼安裝一個構建好的包
rpmbuild --rebuild package_name.src.rpm 從一個rpm源碼構建一個 rpm 包
YUM 軟體包升級器 - (Fedora, RedHat及類似系統)
yum install package_name 下載並安裝一個rpm包
yum localinstall package_name.rpm 將安裝一個rpm包,使用你自己的軟體倉庫為你解決所有依賴關系
yum update package_name.rpm 更新當前系統中所有安裝的rpm包
yum update package_name 更新一個rpm包
yum remove package_name 刪除一個rpm包
yum list 列出當前系統中安裝的所有包
yum search package_name 在rpm倉庫中搜尋軟體包
yum clean packages 清理rpm緩存刪除下載的包
yum clean headers 刪除所有頭文件
yum clean all 刪除所有緩存的包和頭文件
DEB 包 (Debian, Ubuntu 以及類似系統)
dpkg -i package.deb 安裝/更新一個 deb 包
dpkg -r package_name 從系統刪除一個 deb 包
dpkg -l 顯示系統中所有已經安裝的 deb 包
dpkg -l | grep httpd 顯示所有名稱中包含 "httpd" 字樣的deb包
dpkg -s package_name 獲得已經安裝在系統中一個特殊包的信息
dpkg -L package_name 顯示系統中已經安裝的一個deb包所提供的文件列表
dpkg --contents package.deb 顯示尚未安裝的一個包所提供的文件列表
dpkg -S /bin/ping 確認所給的文件由哪個deb包提供
APT 軟體工具 (Debian, Ubuntu 以及類似系統)
apt-get install package_name 安裝/更新一個 deb 包
apt-cdrom install package_name 從光碟安裝/更新一個 deb 包
apt-get update 升級列表中的軟體包
apt-get upgrade 升級所有已安裝的軟體
apt-get remove package_name 從系統刪除一個deb包
apt-get check 確認依賴的軟體倉庫正確
apt-get clean 從下載的軟體包中清理緩存
apt-cache search searched-package 返回包含所要搜索字元串的軟體包名稱
查看文件內容
cat file1 從第一個位元組開始正向查看文件的內容
tac file1 從最後一行開始反向查看一個文件的內容
more file1 查看一個長文件的內容
less file1 類似於 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作
head -2 file1 查看一個文件的前兩行
tail -2 file1 查看一個文件的最後兩行
tail -f /var/log/messages 實時查看被添加到一個文件中的內容
文本處理
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合並一個文件的詳細說明文本,並將簡介寫入一個新文件中
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合並一個文件的詳細說明文本,並將簡介寫入一個已有的文件中
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關鍵詞"Aug"
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"開始的詞彙
grep [0-9] /var/log/messages 選擇 '/var/log/messages' 文件中所有包含數字的行
grep Aug -R /var/log/* 在目錄 '/var/log' 及隨後的目錄中搜索字元串"Aug"
sed 's/stringa1/stringa2/g' example.txt 將example.txt文件中的 "string1" 替換成 "string2"
sed '/^$/d' example.txt 從example.txt文件中刪除所有空白行
sed '/ *#/d; /^$/d' example.txt 從example.txt文件中刪除所有注釋和空白行
echo 'esempio' | tr '[:lower:]' '[:upper:]' 合並上下單元格內容
sed -e '1d' result.txt 從文件example.txt 中排除第一行
sed -n '/stringa1/p' 查看只包含詞彙 "string1"的行
sed -e 's/ *$//' example.txt 刪除每一行最後的空白字元
sed -e 's/stringa1//g' example.txt 從文檔中只刪除詞彙 "string1" 並保留剩餘全部
sed -n '1,5p;5q' example.txt 查看從第一行到第5行內容
sed -n '5p;5q' example.txt 查看第5行
sed -e 's/00*/0/g' example.txt 用單個零替換多個零
cat -n file1 標示文件的行數
cat example.txt | awk 'NR%2==1' 刪除example.txt文件中的所有偶數行
echo a b c | awk '{print $1}' 查看一行第一欄
echo a b c | awk '{print $1,$3}' 查看一行的第一和第三欄
paste file1 file2 合並兩個文件或兩欄的內容
paste -d '+' file1 file2 合並兩個文件或兩欄的內容,中間用"+"區分
sort file1 file2 排序兩個文件的內容
sort file1 file2 | uniq 取出兩個文件的並集(重復的行只保留一份)
sort file1 file2 | uniq -u 刪除交集,留下其他的行
sort file1 file2 | uniq -d 取出兩個文件的交集(只留下同時存在於兩個文件中的文件)
comm -1 file1 file2 比較兩個文件的內容只刪除 'file1' 所包含的內容
comm -2 file1 file2 比較兩個文件的內容只刪除 'file2' 所包含的內容
comm -3 file1 file2 比較兩個文件的內容只刪除兩個文件共有的部分
轉:http://www.jb51.net/
『柒』 Unix 中shell命令。結果重定向(>)和結果附加重定向(>>)有什麼區別
shell 使用三種標准 I/O 流:
stdout 是標准輸出流,顯示來自命令的輸出。它的文件描述符是 1。
stderr 是標准錯誤流,顯示來自命令的錯誤輸出。它的文件描述符是 2。
stdin 是標准輸入流,向命令提供輸入。它的文件描述符是 0。
輸入流向程序提供輸入,常常是來自終端鍵盤。輸出流列印文本字元,常常是在終端上。終端原來是 ASCII 打字機或顯示終端,但是現在常常是圖形桌面上的窗口。
對輸出進行重定向
對輸出進行重定向有兩種方法:
n>
將來自文件描述符 n 的輸出重定向到文件。必須對這個文件有寫許可權。如果文件不存在,就創建它。如果它存在,現有內容常常會丟失而沒有警告。
n>>
也將來自文件描述符 n 的輸出重定向到文件。同樣,必須對這個文件有寫許可權。如果文件不存在,就創建它。如果它存在,輸出就附加到現有文件後面。
n> 或 n>> 中的 n 是指文件描述符。如果忽略,就假設是標准輸出。清單 66 演示使用重定向將來自 ls 的標准輸出和標准錯誤分別放進兩個文件,這些文件是在 lpi103 目錄中創建的。還演示了如何將輸出附加到現有的文件中。
清單 66. 輸出重定向
『捌』 Unix / 類 Unix shell 中有哪些很酷很冷門很少用很有用的命令
1、lsof: 列出所有打開的文件。舉例:'lsof -p 456,123' 列出進程456和123所有打開的文件。'lsof -i 6' 列出所有IPv6協議的網路文件。
2、nl: 將輸出的每一行加上行號。例如:'cat 1.txt | nl',輸出1.txt的文件並加上行號
3、CTRL+a 和 CTRL+e: 到命令行首(ctrl+a)和行末(ctrl+e),在小鍵盤上特別有用,不用費心思找HOME和END鍵
4、ALT+.:列出上一個命令的最後一個參數。這個命令我最常用。例如'mkdir mydir',然後'cd ALT+.'。很好用
5、CTRL+R: 這個也很常用,搜索命令歷史相當方便。
6、grep/sed/cut/tr/: 這幾個命令的組合能夠很方便的解析很多文件,就不一一舉例了。個人不常用awk,覺得'sed'就夠用了。
7、find/xargs: 這個我也很常用,在一堆文件中查找某個特定字元串。這個常常和6中列出命令組合使用。
8、ls -d */: 這個命令僅列出當前目錄下所有的一級子目錄,不包括'.'開頭的隱藏目錄,如果想列出隱藏目錄,使用'ls -d .*'。'find -type d -maxdepth 1'也有類似的效果。
9、id: 列出本用戶所屬的所有用戶組。
10、Brace Expansion:已經有人說過了,我補充完整一點。"ls /usr/{,local}/bin",列出"/usr/bin"和"/usr/local/bin"下所有文件。這個機制稱為"Brace Expansion",再舉個例子:"diff .bashrc{,.backup}",顯示.bashrc和.bashrc.backup兩個文件之間的差異。
11、column: 也有人提過,放在這里算總結吧,一個常用的語法是'mount | column -t',或者 'df | column -t',讓輸出更加容易閱讀。
12、ssh/sshfs/scp: 善用ssh相關工具讓你的遠程工作起來更加方便。'ssh -X'打開X-forward功能。'ssh-keygen'和'ssh--id'讓你省去每次輸入密碼的麻煩。ssh [email protected] 「遠程命令"讓你的命令遠程執行。'sshfs [email protected]:/var/ /home/root/var' 將遠程目錄直接mount到本地目錄。"scp [email protected]:.vimrc ."將遠程伺服器中root用戶HOME目錄下的.vimrc文件拷貝到本地。
13、使用'<'號讀取文件到標准輸入:對於所有接受標准輸入的命令,使用'<文件名'可以將某個文件送入標准輸入,並且可以出現在命令的任何位置,例如:
"cat filename"
"<filename cat"
"cat <filename"
上面三個命令的效果是一模一樣的。