linux 命令總結(轉載)

linux 命令總結(轉載)php

一、 永久更改ip ifconfig eth0 新ip 而後編輯/etc/sysconfig/network-scripts/ifcfg-eth0,修改iphtml

二、從Linux上遠程顯示Windows桌面java

安裝rdesktop包node

三、 手動添加默認網關 以root用戶,mysql

執行: route add default gw 網關的IP 想更改網關 linux

  • vi /etc/sysconfig/network-scripts/ifcfg-eth0 更改GATEWAY ios

  •  /etc/init.d/network restartweb

四、 查出22端口如今運行什麼程序 正則表達式

lsof -i :22 sql

五、查看本機的IP,gateway, dns

IP: 以root用戶登陸,執行ifconfig。

其中eth0是第一塊網卡,lo是默認的設備

Gateway: 以root用戶登陸,執行netstat -rn,

0.0.0.0開頭的一行的Gateway即爲默認網關

也能夠查看/etc/sysconfig/network文件,裏面有指定的地址!

DNS: more /etc/reslov.conf,內容指定以下: nameserver 202.206.32.1 nameserver 202.206.32.1

 

六、RH8.0命令行下輕鬆改變ping 的TTL值

#sysctl -w net.ipv4.ip_default_ttl=N (N=0~255),若N>255,則ttl=0

七、RH8.0命令行下輕鬆改變系統配置默認值

編輯/etc/sysctl.conf, 例如,將 net.ipv4.ip_forward = 0 變爲 net.ipv4.ip_forward = 1 重啓後生效,用sysctl -a查看可知

八、mount局域網上其餘windows機器共享出的目錄

mount -t smbfs -o username=guest,password=guest //machine/path /mnt/cdrom

九、容許|禁止root經過SSH登錄

修改sshd_config:PermitRootLogin no|yes

十、 讓root直接telnet登錄

編輯/etc/pam.d/login,去掉 auth required /lib/security/pam_securetty.so 這句話

十一、 改變telnet的端口

/etc/services這個文件裏可修改想要的端口號.重啓守護進程

 

十二、終端模式有問題

export TERM=vt100

1三、模仿超級終端,LINUX裏什麼程序鏈接路由器和交換機(alstone) minicom

1四、 ssh上來能不能不自動斷線

那是timetou的設置,修改TMOUT變量值

1五、用什麼工具作入侵檢測

snort

1六、Linux下檢測程序內存泄漏的工具

cchecker或是efence庫均可以

1七、linux下如何監視全部經過本機網卡的數據

tcpdump iptraf

1八、爲何root執行好多命令都說command not found 必定是telnet上來的,而後su成root的,修改su命令格式,應該是su - root 0025 關閉用戶的POP3權限(tiansgx) 把POP3的端口關了就能夠了。 在文件/etc/services中找到這一行 pop-3 110/tcp 把這一行前加個'#',把它註釋掉就能夠了。

1九、鎖定wu-ftp用戶目錄(wangla) 編輯ftpaccess文件 restricted-uid * 這一句很重要,限制了ftp用戶在本身的目錄裏。

20、服務器怎麼不讓telnet

服務器上必須啓動telnet服務 && 服務器的防火牆優先級應該設爲低

2一、防止任何人使用su命令成爲root

  • vi /etc/pam.d/su auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel

  • 在/etc/pam. d/su配置文件中定義了wheel組.

2二、網卡激活了,卻上不了網,怎麼辦?

trace一下,看看究竟是在那一塊被阻住的。

  • Ping本身

  • Ping網關

  • Ping DNS

  • trace DNS If All=ok then nslookup www.sina.com.cn

 

Ping sina's address Tra sina' address 基本上就能夠知道結果了

2三、在redhat9下配samba,win2000能訪問,win98不能訪問?

若是是wind98必需修改註冊表:

HKEY_LOCAL_MACHINE/system/correntcontrolset/services/Vxd/VNETSUP下建個D值:EnablePlainTextpasswd,鍵值1

2四、如何獲得網卡的MAC地址

arp -a | awk '{print $4}'

2五、如何獲得網卡的IP地址

ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'

2六、如何全面卸載Linux?如何刪除它的分區?

  • 進入linux, 用fdisk刪除linux分區和swap區。

  • 從新啓動,在dos下運行fdisk /mbr,恢復主引導記錄。

2七、修改主機名

vi /etc/sysconfig/network

修改HOSTNAME一行爲HOSTNAME=主機名,重啓後也能生效

2八、啓動環境設置

Ret Hat Linux啓動到文字界面(不啓動xwindow)

將/etc/inittab中 id:5:initdefault: 一行中的5改成3

2九、redhat的自動升級更新問題

www.redhat.com/corp/support/errata/找到補丁,6.1之後的版本帶有一個工具up2date,它可以測定哪些rpm包須要升級,而後自動從redhat的站點下載並完成安裝。 升級除kernel外的rpm: up2date -u 升級包括kernel在內的rpm: up2date -u -f

30、windows下看linux分區的軟件

Paragon.Ext2FS.Anywhere.2.5.rarexplore2fs-1.00-pre4.zip

3一、mount用法

fat32的分區

mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom

ntfs的分區

mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom

iso文件

mount -o loop /abc.iso /mnt/cdrom

軟盤

mount /dev/fd0 /mnt/floppy

USB閃存

mount /dev/sda1 /mnt/cdrom

全部/etc/fstab內容

mount -a 能夠指定文件格式"-t 格式", 格式能夠爲vfat, ext2, ext3等.

 

 32.a 刪除名爲-a的文件

rm ./-a

rm -- -a 告訴rm這是最後一個選項,

參見getopt ls -i 列出inum,

而後用find . -inum inum_of_thisfile -exec rm '{}' \;

32.b 刪除名爲\a的文件

rm \\a

32.c 刪除名字帶的/和‘\0'文件

這些字符是正常文件系統所不容許的字符,但可能在文件名中產生,如unix下的NFS文件系統在Mac系統上使用 1.解決的方法,把NFS文件系統在掛到不過濾'/'字符的系統下刪除含特殊文件名的文件。 2.也可將錯誤文件名的目錄其它文件移走,ls -id 顯示含該文件目錄的inum,umount 文件系統, clri清除該目錄的inum,fsck,mount,check your lost+found,rename the file in it. 最好是經過WINDOWS FTP過去就能夠刪除任何文件名的文件了!

32.d 刪除名字帶不可見字符的文件

列出文件名並轉儲到文件:ls -l >aaa 而後編輯文件的內容加入rm命令使其內容成爲刪除上述文件的格式:

vi aaa [rm -r ******* ]

把文件加上執行權限 chmod +x aaa 執行 $aaa

32.e 刪除文件大小爲零的文件

rm -i `find ./ -size 0` find ./ -size 0 -exec rm {} \; find ./ -size |xargs rm -f

&很是有效 for file in *

#本身定義須要刪除的文件類型 do if [ ! -s ${file} ] then rm ${file} echo "rm $file Success!" fi done

3三、加裝xwindow

用linux光盤啓動,選擇升級,而後單獨選擇包,安裝便可

3四、刪除linux分區

作一張partition magic的啓動軟盤,啓動後刪除. 或者用win2000的啓動光盤啓動,而後刪除.

3五、如何退出man    

q

3六、 找回忘記了的root口令(lilo/grub) 三種辦法:

1.在系統進入單用戶狀態,直接用passwd root去更改

2.用安裝光盤引導系統,進行linux rescue狀態,將原來/分區掛接上來,做法以下: cd /mnt mkdir hd mount -t auto /dev/hdaX(原來/分區所在的分區號) hd cd hd chroot ./ passwd root 這樣能夠搞定

3.將本機的硬盤拿下來,掛到其餘的linux系統上,採用的辦法與第二種相同 rh8中

一. lilo

1. 在出現 lilo: 提示時鍵入 linux single 畫面顯示 lilo: linux single

2. 回車可直接進入linux命令行

3. #vi /etc/shadow 將第一行,即以root開頭的一行中root:後和下一個:前的內容刪除, 第一行將相似於 root::...... 保存

4. #reboot重啓,root密碼爲空

二. grub

1. 在出現grub畫面時,用上下鍵選中平時啓動linux的那一項(別選dos),而後按e鍵 2. 再次用上下鍵選中平時啓動linux的那一項(相似於kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),而後按e鍵

3. 修改如今見到的命令行,加入single,結果以下: kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/

4. 回車返回,而後按b鍵啓動,便可直接進入linux命令行

5. #vi /etc/shadow 將第一行,即以root開頭的一行中root:後和下一個:前的內容刪除, 第一行將相似於 root::...... 保存

6. #reboot重啓,root密碼爲空 0015 使ctrl + alt + del失效 vi /etc/inittab 將ca::ctrlaltdel:/sbin/shutdown -t3 -r now這行註釋掉,就能夠了

3七、如何看出redhat的版本是7仍是8

cat /proc/version或者cat /etc/redhat-release或者cat /etc/issue

3八、文件在哪一個rpm中

www.rpmfind.net上搜,或者rpm -qf 文件名獲得

3九、把man或info的信息存爲文本文件

tcsh 爲例: man tcsh | col -b > tcsh.txt info tcsh -o tcsh.txt -s

40、利用現存兩個文件,生成一個新的文件

1. 取出兩個文件的並集(重複的行只保留一份)

2. 取出兩個文件的交集(只留下同時存在於兩個文件中的文件)

3. 刪除交集,留下其餘的行

  • 1. cat file1 file2 | sort | uniq

  • 2. cat file1 file2 | sort | uniq -d

  • 3. cat file1 file2 | sort | uniq -u

4一、設置com1口,讓超級終端經過com1口進行登陸 確認有/sbin/agetty,編輯/etc/inittab,添加 7:2345:respawn:/sbin/agetty /dev/ttyS0 9600 9600bps是由於聯路由器缺省通常都是這種速率,也能夠設成 19200、38400、57600、115200 修改/etc/securetty,添加一行:ttyS0,確保root用戶能登陸 重啓機器,就能夠拔掉鼠標鍵盤顯示器(啓動時最好仍是要看看輸出信息)了

4二、 刪除目錄下全部文件包括子目錄

rm -rf 目錄名

4三、查看系統信息

cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)

cat /proc/interrupts - 中斷

cat /proc/ioports - 設備IO端口

cat /proc/meminfo - 內存信息(i.e. mem used, free, swap size)

cat /proc/partitions - 全部設備的全部分區

cat /proc/pci - PCI設備的信息

cat /proc/swaps - 全部Swap分區的信息

cat /proc/version - Linux的版本號 至關於 uname -r uname -a - 看系統內核等信息

4四、去掉多餘的回車符 sed 's/^M//' test.sh > back.sh, 注意^M是敲ctrl_v ctrl-m獲得的 或者 dos2unix filename

4五、切換X桌面

switchdesk KDE或者switchdesk GNOME

4六、通用的聲卡驅動程序

OSS www.opensound.com/ ALSA www.alsa-project.org/

4七、改變redhat的系統語言/字符集

修改 /etc/sysconfig/i18n 文件,如 LANG="en_US",xwindow會顯示英文界面, LANG="zh_CN.GB18030",xwindow會顯示中文界面。

還有一種方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件,如 LANG="en_US",xwindow會顯示英文界面, LANG="zh_CN.GB18030",xwindow會顯示中文界面。 這樣就能夠改變我的的界面語言,而不影響別的用戶

4八、把屏幕設置爲90列

stty cols 90

4九、使用md5sum文件 md5sum isofile > hashfile, 將 md5sum 檔案與 hashfile 檔案內容比對, 驗證雜湊值 是否一致 md5sum –c hashfile

50、一次解壓多個zip文件

unzip "*",注意引號不能少

5一、看pdf文件

使用xpdf或者安裝acrobat reader for linux

5二、查找權限位爲S的文件

find . -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

5三、裝中文輸入法 以redhat8爲例

xwindow及其終端下的不用說了吧,缺省就安裝了,用ctrl-space呼出。 如今討論純console,請下載zhcon.gnuchina.org/download/src/zhcon-0.2.1.tar.gz , 放在任一目錄中,tar xvfz zhcon-0.2.1.tar.gz, cd zhcon-0.2.1, ./configure, make, make install。安裝結束,要想使用,請運行zhcon,想退出,運行exit。

5四、把彈出的光盤收回來

#eject t

5五、cd光盤作成iso文件

cp /dev/cdrom xxxx.iso

5六、快速觀看開機的硬件檢測

dmesg | more

5七、查看硬盤的使用狀況

df -k 以K爲單位顯示

df -h 以人性化單位顯示,能夠是b,k,m,g,t..

5八、查看目錄的大小

du -sh dirname -s 僅顯示總計 -h 以K、M、G爲單位,提升信息的可讀性。KB、MB、GB是以1024爲換算單 位, -H以1000爲換算單位。

5九、查找或刪除正在使用某文件的進程

fuser filename fuser -k filename

60、安裝軟件

rpm -ivh aaa.rpm

tar xvfz aaa.tar.gz;

cd aaa;

./configure;

make;

make install

6一、字符模式下設置/刪除環境變量

bash下

設置:export 變量名=變量值

刪除:unset 變量名

csh下

設置:setenv 變量名 變量值

刪除:unsetenv 變量名

6二、ls如何看到.開頭的文件

ls -a

6三、rpm中的文件安裝到哪裏去了

rpm -qpl aaa.rpm

6四、使用src.rpm rpmbuild --rebuild *.src.rpm

6五、vim中顯示顏色或不顯示顏色 vi ~/.vimrc; 若是有syntax on,則顯示顏色,syntax off,則不顯示顏色

6六、linux是實時仍是分時操做系統

分時

6七、 make bzImage -j的j是什麼意思

-j主要是用在系統硬件資源比較大的時候,比較富裕的時候,用這個能夠來加快編譯的速度,如-j 3

6八、源碼包怎麼沒有

沒有安裝源代碼,把光盤上rpm -i *kernel*source*.rpm裝上,就能夠看到源代碼了。

6九、修改系統時間

date -s 「2003-04-14 cst」,cst指時區,時間設定用date -s 18:10

70、開機就mount上windows下的分區

自動將windows的d盤掛到/mnt/d上,用vi打開/etc/fstab,加入如下一行 /dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0 注意,先得手工創建一個/mnt/d目錄

7一、linux怎麼用這麼多內存

爲了提升系統性能和不浪費內存,linux把多的內存作了cache,以提升io速度

7二、FSTAB 最後的配置項裏邊最後兩個數字是什麼意思

第一個叫fs_freq,用來決定哪個文件系統須要執行dump操做,0就是不須要;

第二個叫fs_passno,是系統重啓時fsck程序檢測磁盤的順序號 1 是root文件系統,2 是別的文件系統。fsck按序號檢測磁盤,0表示該文件系統不被檢測 dump 執行ext2的文件系統的備份操做 fsck 檢測和修復文件系統

7三、linux中讓用戶的密碼必須有必定的長度,而且符合複雜度(eapass) vi /etc/login.defs,改PASS_MIN_LEN

7四、linux中的翻譯軟件

星際譯王 xdict

7五、不讓顯示器休眠

setterm -blank 0 setterm -blank n (n爲等待時間)

7六、用date查詢昨天的日期

date --date='yesterday'

7七、xwindow下如何截屏

Ksnapshot或者gimp

7八、解壓小全

tar xvfj example.tar.bz2

tar xvfz example.tar.gz

tar xvfz example.tgz

tar xvf example.tar

unzip example.zip

7九、在多級目錄中查找某個文件的方法

find /dir -name filename.ext du -a | grep filename.ext locate filename.ext

80、不讓普通用戶本身改密碼

[root@xin_fc etc]# chmod 511 /usr/bin/passwd

又想讓普通用戶本身改密碼

[root@xin_fc etc]# chmod 4511 /usr/bin/passwd

8一、顯卡實在配不上怎麼辦

http://www.redflag-linux.com/,下了xfree86 4.3安裝就能夠了.

8二、超強刪除格式化工具

PQMagic安全的、創建刪除格式化的小工具:

sfdisk.exe for msdos  http://www.wushuang.net/soft/sfdisk.zip

8三、如何讓xmms播放列表裏顯示正確的中文

 -*-*-*-*-*-iso8859-1,-misc-simsun-medium-r-normal--12-*-*-*-*-*-gbk-0,*-r-

把這個東西徹底拷貝到字體裏面

操做方法: 右鍵單擊xmms播放工具的任何地方 會看到一個"選項",而後選擇"功能設定"選擇"fonts" 而後把上面的字體完整的拷貝到"播放清單"和 "user x font

8四、linux下聽MP3

redhat光盤原帶的xmms不能播放MP3(無聲), 要下載安裝一個RPM包:xmms-mp3-1.2.7-13.p.i386.rpm安裝便可.

打開xmms,ctl-p,在font欄中 先在上半部的小框內打勾,再選擇 「fixed(misc) gbk-0 13」號字 體便可顯示中文歌曲名。在音頻輸出插件中選擇 "開放音頻系統驅動 程序 1.2.7 [lioOSS.so]便可正常播放MP3文件.

8五、安裝中文字體

先下載http://freshair.netchina.com.cn/~George/sm.sh

(參考文獻: http://www.linuxeden.com/edu/doctext.php?docid=2679 )

 SimSun18030.ttc在微軟網站可下載,

http://www.microsoft.com/china/windows2000/downloads/18 030.asp 它是個msi文件,在 mswindows中安裝,裝好後在windows目錄下的fonts 目錄裏面就能夠找到它。把simsun.ttc,SimSun18030.ttc,tahoma.ttf,tahomabd.ttf 拷貝到/usr/local/temp,而後下載的shell文件也放到這個目錄裏,而後打開終端 cd /usr/local/temp chmod 755 sm.sh ./sm.sh

8六、裝載windows分區的FAT3二、FAT16文件系統

root身份進入KDE,點擊桌面上的「起點」圖標,在/mnt目錄下創建以下文件夾:c,d,e,f,g,usb.分別用做windows下各分區和usb閃盤。   

用文本編輯器打開/etc/fstab 文件.加入以下:

/dev/hda1 /mnt/c vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda5 /mnt/d vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda6 /mnt/e vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda7 /mnt/f vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda8 /mnt/g vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/cdrom /mnt/cdrom udf,iso9660 noauto,iocharset=gb2312,owner,kudzu,ro 0 0

/dev/sda1 /mnt/usb vfat iocharset=gb2312,umask=0,codepage=936 0 0

存盤退出. 從新啓動後便可正常訪問FAT32或FAT16格式分區,解決顯示WINDOWS分區下和光盤中文文件名亂碼 問題.其中共六列,每列用Tab鍵分開。注意此方法只能mount上Fat 分區格式.sda1是閃盤。

8七、在X下使用五筆和拼音,區位輸入法

http://www.fcitx.org/ 上下載fcitx的rpm包安裝便可

8七、在Linux下如何解壓RAR文件

http://www.linuxeden.com/download/softdeta....php?softid=883下載RAR for Linux 3.2.0,解壓後make 而後能夠用unrar e youfilename.rar解壓rar文件

8八、硬盤安裝後怎麼添加/刪除rpm包

redhat-config-packages --isodir= 能夠指定iso文件所在的目錄

8九、字符下控制音量

aumix

90、用dd作iso

dd if=/dev/cdrom of=/tmp/aaa.iso

9一、 刪除幾天之前的全部東西(包括目錄名和目錄中的文件)

find . -ctime +3 -exec rm -rf {} \; find ./ -mtime +3 -print|xargs rm -f -r

9二、用戶的crontab在哪裏

/var/spool/cron/下以用戶名命名的文件

9三、以不一樣的用戶身份運行程序

su - username -c "/path/to/command" 有時候須要運行特殊身份的程序, 就可讓su來作

9四、如何清空一個文件

> filename

9五、爲何OpenOffice下不能顯示中文

更改字體設置 tools->options->font replacement Andale Sans UI -> simsun

9六、如何備份Linux系統

Symantec Ghost 7.5之後的版本支持Ext3 native複製

9七、linux上的partition magic

Linux下一個有用的分區工具: parted 能夠實時修改分區大小, 刪除/創建分區.

9八、/proc/sys/sem中每項表明什麼意思?

 /proc/sys/sem內容以下 250 32000 32 128 這4個參數依次爲

SEMMSL(每一個用戶擁有信號量最大數量),

SEMMNS(系統信號量最大數量),

SEMOPM(每次semop系統調用操做數),

SEMMNI(系統信號量集最大數量)

9九、 Grub 引導菜單裏 bigmem smp up 都是什麼意思?

smp: (symmetric multiple processor)對稱多處理器模式

bigmem: 支持1G 以上內存的優化內核

up:(Uni processor) 單處理器的模式

100、Oracle的安裝程序爲何顯示亂碼?

如今Oracle的安裝程序對中文的支持有問題,只能使用英文界面來安裝,在執行runinstaller以前,執行:export LANG=C;export LC_ALL=C

10一、 linux下文件和目錄的顏色表明什麼

藍色表示目錄;綠色表示可執行文件;紅色表示壓縮文件;淺藍 色表示連接文件;灰色表示其它文件;紅色閃爍表示連接的文件有問題了;黃色是設備文件,包括block, char, fifo。 用dircolors -p看到缺省的顏色設置,包括各類顏色和「粗體」,下劃線,閃爍等定義。

10二、mysql的數據庫存放在什麼地方

1. 若是使用rpm包安裝,應該在/var/lib/mysql目錄下,以數據庫名爲目錄名

2. 若是源碼安裝在/usr/local/mysql中,應該在/usr/local/mysql/var中,以數據庫名爲目錄名

10三、如何新增一塊硬盤

1、關機,物理鏈接硬盤 若是是IDE硬盤,注意主、從盤的設置;若是是SCSI硬盤,注意選擇一個沒有被使用的ID號。

2、開機,檢查硬盤有沒有被linux檢測到 dmesg |grep hd*(ide硬盤) dmesg |grep sd*(SCSI硬盤) 或者 less /var/log/dmesg 若是沒有檢測到新硬盤,重啓,檢查連線,看看bios有沒有認出它來。

3、分區 能夠使用fdisk,Sfdisk或者parted(GNU分區工具,linux下的partition magic) 4、格式化 mkfs 5、修改fstab vi /etc/fstab

 

10四、linux下怎麼看分區的卷標

e2label /dev/hdxn, where x=a,b,c,d....; n=1,2,3...

10五、RH8,9中安裝後如何添加新的語言包

.8.0中

1.放入第一張光盤

2.cd /mnt/cdrom/Redhat/RPMS

3.rpm -ivh ttfonts-ZH_CN-2.11-29.noarch.rpm(簡體中文,能夠用tab鍵來補齊後面的部分,以避免輸入有誤)

4.rpm -ivh ttfonts-ZH_TW-2.11-15.noarch.rpm(繁體中文) 若是還想裝日文、韓文,試試第二張光盤上的ttfonts*.rpm.

.9.0中

9.0不在第一張盤上,在第三張盤上.rpm包名分別爲: ttfonts-zh_CN-2.12-1.noarch.rpm(簡體中文) ttfonts-zh_TW-2.11-19.noarch.rpm

 

106 配置telnet服務

1. 安裝telnet-server軟件包。(略)
2. 設置telnet-server的啓動運行
   telnet server不做爲獨立的服務器程序運行,而是受xinetd程序的控制,啓動配置文件爲/etc/xinetd.d/telnet,默認xinetd程 序並不啓動該服務,可在chkconfig --list看出telnet是關閉的,/etc/xinetd.d/telnet中disable=yes可經過下面的方式啓動telnet server:
 1) chkconfig telnet on  //該命令修改了/etc/xinetd.d/telnet的配置,設置disable=no
 2) service xinetd restart
 再次chkconfig --list看到telnet server已經啓動。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107 讓bash命令行能夠輸入漢字,

編輯~/.inputrc,添加:
set meta-flag on
set convert-meta off
set output-meta on

讓less命令顯示漢字,在~\.bashrc中加入:
export LESSCHARSET=latin1

讓ls命令顯示漢字文件和目錄名,在~\.bashrc中加入:
alias ls='ls --show-control-chars --color=auto'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108 Linux下配置DHCP服務器

配置DHCP

   Redhat使用dhcpd進程提供DHCP服務,啓動時dhcpd自動讀它的配置文件/etc/dhcpd.conf。dhcpd將客戶的租用信息保 存在/var/lib/dhcp/dhcpd.leases文件中,該文件不斷被更新,從這裏面能夠查到IP地址分配的狀況。

  dhcpd爲了向一個子網提供服務,須要知道子網的網絡地址和網絡掩碼,而且還要知道地址分配的範圍,下面給出一個簡單的dhcpd.conf文件:

  subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.10 192.168.100.253;

  }

  此例中,dhcpd將給192.168.100.0網絡分配192.168.100.10到192.168.100.253的IP地址。

  租期時間能夠從0秒到無限長,能夠根據須要來定。缺省的租期時間爲一天,即86400秒。能夠爲主機定義兩個租期長度:

  default-lease-time 默認租期時間;

  max-lease-time 用戶能夠得到的最長租期時間。

  下面的配置將缺省的租期時間設置爲10分鐘,最長租用時間爲1小時:

  subnet 192.168.100.0 netmask 255.255.255.0 {

   range 192.168.100.10 192.168.100.253;

   default-lease-time 600;

   max-lease-time 3600;

  }

  DHCP還能夠向客戶提供更多的參數,這些參數能夠用option來指定,例如:

  subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.10 192.168.100.253;

   default-lease-time 600;

   max-lease-time 3600;

   option subnet-mask 255.255.255.0;

   option routers 192.168.100.254; 默認路由

   option domain-name-servers 202.102.134.68; DNS服務器

  }

如今你們對DHCP配置應該有個瞭解了,其實過程就是這麼簡單,中間就隔了一層窗戶紙。

  實際演練

  接下來給你們一個示例,把個人redhat9.0配置成一臺DHCP服務器。

  vi /etc/dhcpd.conf

  配置後,個人機器的該文件內容以下(註釋的部分都已經刪除掉了,至於原文,你們能夠對照/usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample文件):

  [root@rh9 test]# more /etc/dhcpd.conf

  ddns-update-style interim;

  ignore client-updates;

  subnet 192.168.0.0 netmask 255.255.255.0 {

   option routers 192.168.0.1;

   option subnet-mask 255.255.255.0;

   option broadcast-address 192.168.0.255;

   option domain-name-servers

  202.96.199.133, 202.96.133.134;

   range dynamic-bootp 192.168.0.1 192.168.0.255;

   default-lease-time 21600;

   max-lease-time 43200;

  }


解釋一下配置部分:

首先subnet定義了網絡的地址,而後option routers定義了網關地址;

subnet-mask定義子網掩碼;

broadcast-address定義廣播地址;

domain-name-servers定義DNS NAMESERVER的地址;

dynamic-bootp是給客戶端分配的地址,定義的是192.168.0.1-- 192.168.0.255整個網段地址;

最後2行是講分配出的地址的缺省租期時間設置爲10分鐘,最長租用時間爲1小時。

這樣,一個DHCP服務器就配置好了。

  咱們能夠測試一下結果:在另一個redhat linux7.2上,把IP設置成DHCP主機的IP地址,經過netconfig命令配置。

  檢查配置:

  [root@rh72 root]# more /etc/sysconfig/ network-scripts/ifcfg-eth0

  DEVICE=eth0

  ONBOOT=yes

  BOOTPROTO=dhcp

  [root@rh72 root]#

  肯定網卡已是DHCP的了。

  [root@rh72 root]# ifconfig

  eth0 Link encap:Ethernet HWaddr 00:0C:29:A3:C6:71

   inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0

  查看地址,發現ETH0已經分配了一個254的地址,說明DHCP服務器配置成功。

  小結

  至此,咱們已經完成了一臺Linux DHCP服務器的安裝和配置工做。在實際的使用過程當中,上述操做步驟應該能夠知足通常應用的需求,可是咱們還須要常常研究具體的命令參數,讓DHCP服務器能更好地爲咱們服務

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
109  VNC 虛擬網絡計算

  VNC(Virtual Network Computing,虛擬網絡計算),是用來顯示遠程計算機整個桌面的輕量型遠程控制程序。
1. 下載:http://www.uk.research.att.com/vnc
2. 使用方法:
1) 服務器端:
#vncserver
$vncserver
注意到每一個用戶均可以啓動本身的vncserver,每一個用戶能夠啓動多個vncserver,用顯示端口號:1,:2,:3等等來標識。
2) 客戶端:
a)在linux下,運行vncviewer命令便可,服務器地址的寫法形如192.168.3.119:1
b)在windows下,運行windows版本的vncviewer便可,用法與linux下相近。
c)用瀏覽器(平臺無關),做爲java applet來實現,以形如http://192.168.3.119:5801的方式來啓動
3) 密碼修改:
第一次啓動vncserver會提示輸入密碼,之後要修改的話,運行:
#vncpassword
4) 中止vnc server:
#vncserver -kill :1
#vncserver -kill :2
注意到vncserver只能由啓動它的用戶來關閉,即時是root也不能關閉其它用戶開啓的vncserver,除非用kill命令暴力殺死進程。
5) 指定顯示端口號啓動VNC server:
#vncserver :3
$vncserver :6
6) 設置VNC server分辨率:
#vncserver -geometry 800x600
#vncserver -geometry 640x480
7) 設置vncserver的色深:
8位爲256色,16位爲64k色
#vncserver -depth 8
#vncserver -depth 16
8) 穩定性設置:
vncserver默認在多個客戶機鏈接同一個vncserver的顯示端口時,vncserver端口舊鏈接,而爲新鏈接服務,可經過-dontdisconnect拒絕新鏈接請求而保持舊的鏈接。
9) 設置vncserver的同一個顯示端口能夠鏈接多個客戶機
#vncserver -alwaysshared
10) vnc的反向鏈接
大多數狀況下,vncserver總處於監聽狀態,vnc client主動向服務器發出請求從而創建鏈接。然而在一些特殊的場合,須要讓vnc客戶機處於監聽狀態,vncsrever主動向客戶機發出鏈接請求,此謂vnc的反向鏈接。主要步驟:
a) 啓動vnc client,使vncviewer處於監聽狀態
#vncviewer -listen
b) 啓動vncserver
#vncserver
c) 在vncserver端執行vncconnect命令,發起server到client的請求
#vncconnect -display :1 192.168.3.69
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
110 linux下操做光盤的幾條命令
1. 從光盤中製做iso文件:
#cp /dev/cdrom ISO文件名
同理能夠把上面的/dev/cdrom換成/dev/fd0、/dev/sda1等移動存儲設備的設備文件名製做軟盤、U盤的iso映象文件
2. 使用目錄文件製做iso文件
#mkisofs -r -o ISO文件名 路徑名
3. 刻錄光盤
先檢測光盤刻錄機的參數:
#cdrecord -scanbus
……
scsibus0:
  0,0,0 0)'SAMSUNG' 'CDRW/DVD DATA-348B' 'T501' Removable CDROM
……
而後刻錄:
#cdrecord -v speed=刻錄速度 dev=刻錄機設備號 ISO文件名
如:
#cdrecord -v speed=8 dev=0,0 /home/share/data.iso

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111 GRUB入門
LILO 須要知道你的內核在驅動器上的實際位置,可是GRUB卻不須要,它不只能讀文件系統還能識別內核映像,並且它還支持最新的 2.4.1 內核所帶的 Reiser 日誌文件系統。這意味着你沒必要在更新內核或者改變配置文件以後從新安裝GRUB。若是BIOS 支持LBA 的話,也沒有1024 柱面的問題。另外還支持網絡啓動和無盤客戶機。

然而,或許咱們對LILO 太熟悉了吧,也或許GRUB 還有不少須要完善?總之,安裝 GRUB 看起來並非一件很輕鬆的事情。下面咱們就詳細介紹GRUB 的安裝和配置。


安裝

在 /tmp 目錄下解開文件:

# tar zxvf grub-0.5.96.1.tar.gz

進入 "grub-0.5.96.1" 目錄,編譯程序:

# ./configure
# make
# make install

配置:

和許多咱們日常看到的多重啓動管理程序同樣,GRUB 供一個菜單界面(LILO 不是菜單界面的)。GRUB的
缺省安裝位置爲 /boot/grub ,配置文件也放在這個目錄下。缺省的配置文件名爲 menu.lst,這個文件的功能就像和 lilo.conf同樣,定義多重啓動選項以及磁盤映像。

咱們來看一個 menu.lst 文件的示範例子:

timeout 5
color black/yellow yellow/black
default 0
password freeos

title My Mandrake
kernel (hd0,1)/vmlinuz root=/dev/hda3 idebus=66

title My Red Hat
kernel (hd0,6)/boot/vmlinuz root=/dev/hda7 idebus=66

title W2K Pro
root (hd0,0)
makeactive
chainloader +1

讓咱們詳細分析一下各個選項的含義:

timeout - 缺省入口的顯示延遲時間(秒)
color - 菜單顯示的顏色組合,第一組顏色爲前景色和背景色,
第二組爲高亮時的組合。
default - 定義缺省的啓動入口,這裏的 0 就是使用定義的第一個入口。
password - 定義進入GRUB 高級特性時須要的口令。GRUB 利用其能讀取文件系統的特點,提供十分強大的功能。例如用戶能夠在grub 的啓動提示符下輸 'cat /etc/shadow' 來讀包含加密口令的文件,而不須要進入你的系統!因此,爲你的系統設置一個口令十分重要。

下面分析啓動入口,每個入口都應該以一個 'title' 的關鍵字開始,後面跟上對該啓動入口的描述。接下來就是 'kernel' 入口,

kernel (hd0,1)/vmlinuz root=/dev/hda3 hdc=ide-scsi

根 據 GRUB 對設備的命名規則,咱們能夠很容易的理解上面這行的含義:軟驅設備名爲 fdx ,硬盤爲 hdx,須要記住的是 GRUB 從0 開始計數,因此第一臺硬盤爲 hd0 而不是 hd1。設備名用括號括起來,硬盤上的分區用逗號鏈接。例如 (hd0,1) 表示第一臺硬盤上的第二個分區,而 (hd1,5) 就表示第二臺硬盤上的第一個邏輯分區。

GRUB 能讀取大多數文件系統,上面這一行指定 GRUB 尋找
位 於第一臺硬盤上第二基本分區上的 /vmlinuz 文件,你也須要指定 'root=/dev/hda3' (假設你的根文件系統位於/dev/hda3),不然內核就不能掛接上根文件系統,以後就是你本身想加入的其餘參數了。這些參數就和LILO 啓動時傳遞給內核的參數同樣,或者說和 lilo.conf 中 append 後面的參數同樣。

另一個比較特別的入口是啓動Windows 2000 的入口,root 入口指向 Windows 2000 的安裝位置(C:\),接下來的入口設置分區的激活標誌,最後的入口告訴 GRUB 搜索分區的第一個扇區來啓動那裏的操做系統。

以上是對GRUB 的一個典型的多重啓動設置的分析,在正式開始安裝GRUB 以前,建議你手頭有一張LILO 啓動盤或者一張應急啓動盤,以防不測。

以root 登陸,輸入"grub"命令之後,就會看到以下的畫面:

GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ]

grub>

以上看到的就是 grub 提示符,咱們要在這個提示符下面安裝GRUB。

grub> install (hd0,1)/boot/grub/stage1 d (hd0) (hd0,1)/boot/grub/stage2 p (hd0,1)/boot/grub/menu.lst

GRUB 分爲兩個主要的步驟, stage1 和 stage2。Stage1 是一段嵌入MBR 的迷你代碼。Stage2 是主要部分,在 stage1 把控制權傳遞給它後,就由它來接管全部事情。

install 後面指定stage1 的位置,咱們不只說明了其分區
位置:(hd0,1),由於 GRUB 能讀取文件系統,因此還說
明 了分區上目錄位置:/boot/grub/stage1,d 參數表示 stage1 將尋找 stage2 所在的磁盤。接着就是 GRUB 的安裝位置:(hd0) ,這裏就是指安裝在MBR。後面的參數指定 stage2 的位置:(hd0,1),和 stage1 的定義同樣。p 參數指定 menu.lst 文件的位置。

對於 /boot 做爲單獨的分區的例子,須要採用下面的命令行:

grub> install (hd0,1)/grub/stage1 d (hd0) (hd0,1)/boot/grub/stage2 p (hd0,1)/grub/menu.lst

以 上例子假設 /boot 位於 (hd0,1) (也就是hda2),而 / 位於(hd0,2) (也就是 hda3) ,咱們不能用 '(hd0,2)/boot/grub/stage1' ,由於GRUB 不知道 (hd0,1) 是 /boot ,因此必須首先指向掛接爲 /boot 的分區,而後把目錄指向那裏。

從新啓動系統之後,就能夠看到 GRUB 菜單了。看起來彷佛很繁瑣,這麼長的命令行,是的!對於那些 LILO 能正常使用的人來講,或許沒有必要來玩這個危險遊戲。可是,對於那些想使用 GRUB 加強功能的人來講,試一下 GRUB 或許會有意想不到的驚喜。個人朋友告訴我說他不能用 LILO 識別 1G 內存,但願 GRUB 能幫助辦到。本文旨在拋磚引玉,
GRUB 還有不少的功能有待您的開發。

若是在配置和安裝中遇到了麻煩,爲何不使用 info grub 或者 man grub 來尋求幫助呢?或者乾脆上
GRUB 的官方網站

http://www.gnu.org/software/grub/

尋找 FAQ 和其餘文檔呢?

GRUB 的下載地點:
ftp://alpha.gnu.org:/gnu/grub/


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
112 rpm命令參數列表
1.安裝一個包
    # rpm -ivh
2.升級一個包
    # rpm -Uvh
3.移走一個包
    # rpm -e
4.安裝參數
    --force 即便覆蓋屬於其它包的文件也強迫安裝
    --nodeps 若是該RPM包的安裝依賴其它包,即便其它包沒裝,也強迫安裝。
5.查詢一個包是否被安裝
    # rpm -q < rpm package name>
6.獲得被安裝的包的信息
    # rpm -qi < rpm package name>
7.列出該包中有哪些文件
    # rpm -ql < rpm package name>
8.列出服務器上的一個文件屬於哪個RPM包
    #rpm -qf
9.可綜合好幾個參數一塊兒用
    # rpm -qil < rpm package name>
10.列出全部被安裝的rpm package
    # rpm -qa
11.列出一個未被安裝進系統的RPM包文件中包含有哪些文件?
    # rpm -qilp < rpm package name>
   
RPM命令手冊
1、安裝

命令格式:

rpm -i ( or --install) options file1.rpm ... fileN.rpm

參數:

file1.rpm ... fileN.rpm 將要安裝的RPM包的文件名

詳細選項:

-h (or --hash) 安裝時輸出hash記號 (``#'')
--test 只對安裝進行測試,並不實際安裝。
--percent 以百分比的形式輸出安裝的進度。
--excludedocs 不安裝軟件包中的文檔文件
--includedocs 安裝文檔
--replacepkgs 強制從新安裝已經安裝的軟件包
--replacefiles 替換屬於其它軟件包的文件
--force 忽略軟件包及文件的衝突
--noscripts 不運行預安裝和後安裝腳本
--prefix 將軟件包安裝到由 指定的路徑下
--ignorearch 不校驗軟件包的結構
--ignoreos 不檢查軟件包運行的操做系統
--nodeps 不檢查依賴性關係
--ftpproxy 用 做爲 FTP代理
--ftpport 指定FTP的端口號爲

通用選項

-v 顯示附加信息
-vv 顯示調試信息
--root 讓RPM將指定的路徑作爲"根目錄",這樣預安裝程序和後安
裝程序都會安裝到這個目錄下
--rcfile 設置rpmrc文件爲
--dbpath 設置RPM 資料庫存所在的路徑爲

2、刪除

命令格式:

rpm -e ( or --erase) options pkg1 ... pkgN

參數

pkg1 ... pkgN :要刪除的軟件包

詳細選項

--test 只執行刪除的測試
--noscripts 不運行預安裝和後安裝腳本程序
--nodeps 不檢查依賴性

通用選項

-vv 顯示調試信息
--root 讓RPM將指定的路徑作爲"根目錄",這樣預安裝程序和後安裝
程序都會安裝到這個目錄下
--rcfile 設置rpmrc文件爲
--dbpath 設置RPM 資料庫存所在的路徑爲

3、升級

命令格式

rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm

參數

file1.rpm ... fileN.rpm 軟件包的名字

詳細選項

-h (or --hash) 安裝時輸出hash記號 (``#'')
--oldpackage 容許"升級"到一個老版本
--test 只進行升級測試
--excludedocs 不安裝軟件包中的文檔文件
--includedocs 安裝文檔
--replacepkgs 強制從新安裝已經安裝的軟件包
--replacefiles 替換屬於其它軟件包的文件
--force 忽略軟件包及文件的衝突
--percent 以百分比的形式輸出安裝的進度。
--noscripts 不運行預安裝和後安裝腳本
--prefix 將軟件包安裝到由 指定的路徑下
--ignorearch 不校驗軟件包的結構
--ignoreos 不檢查軟件包運行的操做系統
--nodeps 不檢查依賴性關係
--ftpproxy 用 做爲 FTP代理
--ftpport 指定FTP的端口號爲

通用選項

-v 顯示附加信息
-vv 顯示調試信息
--root 讓RPM將指定的路徑作爲"根目錄",這樣預安裝程序和後安裝程序都會安裝到這個目錄下
--rcfile 設置rpmrc文件爲
--dbpath 設置RPM 資料庫存所在的路徑爲

4、查詢

命令格式:

rpm -q ( or --query) options

參數:

pkg1 ... pkgN :查詢已安裝的軟件包

詳細選項

-p (or ``-'') 查詢軟件包的文件
-f 查詢屬於哪一個軟件包
-a 查詢全部安裝的軟件包
--whatprovides 查詢提供了 功能的軟件包
-g 查詢屬於 組的軟件包
--whatrequires 查詢全部須要 功能的軟件包

信息選項

顯示軟件包的所有標識
-i 顯示軟件包的概要信息
-l 顯示軟件包中的文件列表
-c 顯示配置文件列表
-d 顯示文檔文件列表
-s 顯示軟件包中文件列表並顯示每一個文件的狀態
--scripts 顯示安裝、卸載、校驗腳本
--queryformat (or --qf) 以用戶指定的方式顯示查詢信息
--dump 顯示每一個文件的全部已校驗信息
--provides 顯示軟件包提供的功能
--requires (or -R) 顯示軟件包所需的功能

通用選項

-v 顯示附加信息
-vv 顯示調試信息
--root 讓RPM將指定的路徑作爲"根目錄",這樣預安裝程序和後安裝程序都會安裝到這個目錄下
--rcfile 設置rpmrc文件爲
--dbpath 設置RPM 資料庫存所在的路徑爲

5、校驗已安裝的軟件包

命令格式:

rpm -V ( or --verify, or -y) options

參數

pkg1 ... pkgN 將要校驗的軟件包名

軟件包選項

-p Verify against package file
-f 校驗所屬的軟件包
-a Verify 校驗全部的軟件包
-g 校驗全部屬於組 的軟件包

詳細選項

--noscripts 不運行校驗腳本
--nodeps 不校驗依賴性
--nofiles 不校驗文件屬性

通用選項

-v 顯示附加信息
-vv 顯示調試信息
--root 讓RPM將指定的路徑作爲"根目錄",這樣預安裝程序和後安裝程序都會安裝到這個目錄下
--rcfile 設置rpmrc文件爲
--dbpath 設置RPM 資料庫存所在的路徑爲

6、校驗軟件包中的文件

語法:

rpm -K ( or --checksig) options file1.rpm ... fileN.rpm

參數:

file1.rpm ... fileN.rpm 軟件包的文件名

Checksig--詳細選項

--nopgp 不校驗PGP簽名

通用選項

-v 顯示附加信息
-vv 顯示調試信息
--rcfile 設置rpmrc文件爲


7、其它RPM選項

--rebuilddb 重建RPM資料庫
--initdb 建立一個新的RPM資料庫
--quiet 儘量的減小輸出
--help 顯示幫助文件
--version 顯示RPM的當前版本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
113 chsh 更換你登入時所用的shell
名稱
chsh - 更換你登入時所用的shell

語法
chsh [ -s shell ] [ -l ] [ -u ] [ -v ] [ username ]


描述
chsh 用來更換你登入時所用的shell 。在命令列沒指定shell。 chsh 會提示一個給你。

有效的shell

chsh
可用指定路徑全名的方式來指定任何一個可執行的檔案。 然而,若是此 shell並沒紀錄在 /etc/shells 檔上,則chsh會提出警告訊息。

選項
-s, --shell 變動你的登入shell.
-l, --list-shells
列出紀錄在 /etc/shells 的shell。
-u, --help
使用短訊。
-v, --version
版本資訊

相關文件
login(1) , passwd(5) , shells(5)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 在linux下一些經常使用的關機/重啓命令

有shutdown、halt、reboot、及init,它們均可以達到重啓系統的目的,但每一個命令的內部工做過程是不一樣的。

   1.shutdown

   shutdown命令安全地將系統關機。 有些用戶會使用直接斷掉電源的方式來關閉linux,這是十分危險的。由於linux與windows不一樣,其後臺運行着許多進程,因此強制關機可能會導 致進程的數據丟失﹐使系統處於不穩定的狀態﹐甚至在有的系統中會損壞硬件設備。

  而在系統關機前使用shutdown命令﹐系統管理員會通知全部登陸的用戶系統將要關閉。而且login指令會被凍結﹐即新的用戶不能再登陸。直接關機或 者延遲必定的時間才關機都是可能的﹐還可能重啓。這是由全部進程〔process〕都會收到系統所送達的信號〔signal〕決定的。這讓像vi之類的程 序有時間儲存目前正在編輯的文檔﹐而像處理郵件〔mail〕和新聞〔news〕的程序則能夠正常地離開等等。

  shutdown執行它的工做是送信號〔signal〕給init程序﹐要求它改變runlevel。Runlevel 0被用來停機〔halt〕﹐runlevel 6是用來從新激活〔reboot〕系統﹐而runlevel 1則是被用來讓系統進入管理工做能夠進行的狀態﹔這是預設的﹐假定沒有-h也沒有-r參數給shutdown。要想了解在停機〔halt〕或者從新開機 〔reboot〕過程當中作了哪些動做﹐你能夠在這個文件/etc/inittab裏看到這些runlevels相關的資料。

   shutdown 參數說明:
   [-t] 在改變到其它runlevel以前﹐告訴init多久之後關機。
   [-r] 重啓計算器。
   [-k] 並不真正關機﹐只是送警告信號給每位登陸者〔login〕。
   [-h] 關機後關閉電源〔halt〕。
   [-n] 不用init﹐而是本身來關機。不鼓勵使用這個選項﹐並且該選項所產生的後果每每不老是你所預期獲得的。
   [-c] cancel current process取消目前正在執行的關機程序。因此這個選項固然沒有時間參數﹐可是能夠輸入一個用來解釋的訊息﹐而這信息將會送到每位使用者。
   [-f] 在重啓計算器〔reboot〕時忽略fsck。
[-F] 在重啓計算器〔reboot〕時強迫fsck。
   [-time] 設定關機〔shutdown〕前的時間。
     

2.halt----最簡單的關機命令
   其實halt就是調用shutdown -h。halt執行時﹐殺死應用進程﹐執行sync系統調用﹐文件系統寫操做完成後就會中止內核。
   參數說明:
   [-n] 防止sync系統調用﹐它用在用fsck修補根分區以後﹐以阻止內核用老版本的超級塊〔superblock〕覆蓋修補過的超級塊。
   [-w] 並非真正的重啓或關機﹐只是寫wtmp〔/var/log/wtmp〕紀錄。
   [-d] 不寫wtmp紀錄〔已包含在選項[-n]中〕。
   [-f] 沒有調用shutdown而強制關機或重啓。
   [-i] 關機〔或重啓〕前﹐關掉全部的網絡接口。
   [-p] 該選項爲缺省選項。就是關機時調用poweroff。
  
3.reboot
reboot的工做過程差很少跟halt同樣﹐不過它是引起主機重啓﹐而halt是關機。它的參數與halt相差很少。

4.init
    init是全部進程的祖先﹐它的進程號始終爲1﹐因此發送TERM信號給init會終止全部的用戶進程﹑守護進程等。shutdown 就是使用這種機制。init定義了8個運行級別(runlevel),init 0爲關機﹐init 1爲重啓。關於init能夠長篇大論﹐這裏就再也不敘述。另外還有telinit命令能夠改變init的運行級別﹐好比﹐telinit -iS可以使系統進入單用戶模式﹐而且得不到使用shutdown時的信息和等待時間。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
115 Linux服務器的一些基本應用

現就以以下網絡架構爲例,來講一下linux服務器的配置。在正式配置以前先說一下這個服務器所要實現的功能:

1. 數據共享
2. 打印共享
3. 模擬NT域
4. ADSL共享
5. 內部DNS服務
6. DHCP服務
7. FTP服務
8. WWW服務
9. OPENSSH
10. 磁盤配額
11. 動態域名

網絡架構配置以下:

Network:10.10.0.0
Server IP:10.10.1.1
Server Subnet-mask:255.255.0.0
Client IP:10.10.1.10-10.10.1.100
Client Subnet-mask:255.255.0.0
Client getway:10.10.1.1
Client DNS:10.10.1.2,202.96.134.133

1、準備工做:

1. RedHat linux 7.2光盤一套
2. 以太ADSL拔號器及您的ADSL接入賬號
3. 兩塊網卡,最好是即插即用的,免跳線的請察明irq和io。
4. 除本機之外的其它機器

2、 RedHat linux 7.2安裝:

1.初學者建議用圖形界面,請用定製安裝。

2系統分區以下(10G):
swap:500M
/:2G
/var:1G
/home:2G
/tools:500M
/data:4G
分區的合理化請參考網上相關文章。

3.如果即插用網卡,系統能檢測到,請設置好ip地址,子網掩碼等,請分別設爲10.10.1.1和10.10.1.2,subnet-mask爲255.255.0.0;如果免跳線網卡,那就等裝好系統再設置。

4.軟件包選擇,要全選上也不要緊,只要有空間,如果空間有限有話,不妨定製一下軟件包,下面是個人選擇,僅供參考:
Printing Support
Network Support
Dialup Support
SMB:windows file server
WWW:web server
DNS:DNS name server
Software Development

5.如今就一路next安裝下去,最後不要忘了作一張啓動盤。

3、linux網絡環境配置

[1]重啓機器進入系統之後,去掉一些沒必要要的服務吧,留着它們啓動速度慢,並且也不安全,下面是我機器剛安裝好之後所保留的一些服務:
gpm/iptables/netfs/network/nfs/nfslock/portmap/syslog/xfs/xinetd
至其它的服務,等咱們配置好再加載吧。

[2]安裝linuxconf,配置網絡。
放入光盤1
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/RedHat/RPMS
rpm –ivh linuxconf-1.25r7-3.i386.rpm
請用setup/system services或是chkconfig –levlel 3 linuxconf on將linuxconf設置爲系統自啓動服務。
netconf選擇Host name and IP network devices進行主機名及網絡設置:
Host name + domain:cxserver
------第一張網卡----------
config mode:Manual
primary name + domain:abc
Ip address:10.10.1.2
Netmask:255.255.0.0
Net device:eth0
Kernel Module:ne
I/O port:0x300
Irq:3
------第二張網卡----------
config mode:Manual
primary name + domain:cxserver
Ip address:10.10.1.1
Netmask:255.255.0.0
Net device:eth0
Kernel Module:ne
I/O port:0x320
Irq:5
選擇Accept退出,從新啓動就會看到eth0和eth1兩網卡啓動成功,進入系統後可用ifconfig命令查看狀態,用ping命令測試其連通性,好比ping一部windows機器。

4、DNS服務器配置

爲了讓局域網內部用戶訪問服務器方便一點,配置一個DNS服務器是十分有必要的,畢竟一個名字總比一串數字好記,下面將服務器10.10.1.1配一個域名www.cx.com,ftp.cx.com:
須要配置的文件:
/etc/named.conf
/etc/resolv.conf
/var/named/named.hosts
/var/named/named.local
/var/named/named.10.10

[1]配置/etc/named.conf文件。此文件是dns引導文件,named進程在啓動時要讀取它。
vi /etc/named.conf
// generated by named-bootconf.pl
options {
directory "/var/named";
// query-source address * port 53;
};

zone "." IN {
type hint;
file "named.ca";
};
//----------------------手工添加以下兩節------------------------------
zone "cx.com" IN {
type master;
file "named.hosts";
};

zone "10.10.in-addr.arpa" IN {
type master;
file "named.10.10";
};
//------------------------------------------------------------------------------
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};

// include "/etc/rndc.key";

如下的三個文件是DNS數據庫文件,具體參數不做詳解,請參考相關資料。

[2]vi /var/named/named.local

$TTL 86400
@ IN SOA ns.cx.com. root.ns.cx.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.cx.com.

1 IN PTR localhost.

3]vi /var/named/named.hosts
@ IN SOA ns.cx.com. root.ns.cx.com. (
2002042302; serial
28800; refresh
14400; retry
3600000; expire
86400; minimu
)
IN NS ns.cx.com.
cx IN A 10.10.1.1
cx1 IN A 10.10.1.223
www IN CNAME ns.cx.com.
ftp IN CNAME cx

4]vi /var/named/named.10.10
@ IN SOA ns.cx.com. root.ns.cx.com. (
2002042302; serial
28800; refresh
14400; retry
3600000; expire
86400; minimu
)
IN NS ns.cx.com.
1 IN PTR ns.cx.com.
2 IN PTR ns1.cx.com.

5]編輯/etc/resolv.conf文件
vi /etc/resolv.conf
domain cx.com
nameserver 10.10.1.1

啓動服務:
/etc/rc.d/init.d/named start
chkconfig –level 3 named on #將dns服務設置成系統服務,開機自啓動
測試:ping cx.cx.com
ping www.cx.com
ping ftp.cx.com
或用nslookup,用法請參考nslookup –help。

5、 DHCP服務器配置

1]安裝dhcp。
放入光盤1或是光盤2
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/RedHat/RPMS
rpm –ivh dhcp-2.0p15-8.i386.rpm
請用setup/system services或是chkconfig –levlel 3 linuxconf on將linuxconf設置爲系統自啓動服務。

2]配置dhcpd.conf文件。
Vi /etc/dhcpd.conf
subnet 10.10.0.0 netmask 255.255.0.0{
range dynamic-bootp 10.10.2.0 10.10.2.100; #IP地址分配範圍
option routers 10.10.1.1; #默認網關
option subnet-mask 255.255.0.0; #默認子網掩碼
option domain-name "cx.com"; #默認域名
option domain-name-servers 10.10.1.1,202.X.X.X;
}
#最後一行:DNS服務器設置,之因此把10.10.1.1放在前面是想讓客戶機在做域名解析的時候優先選擇內部dns服務器,若域名不能解析,則用下一個dns服務器解析,202.X.X.X是石家莊地區ADSL上網用戶主DNS服務器.

3]啓動服務:/etc/rc.d/init.d/dhcpd start

4]使用:不論Win9x仍是2K都使用自動獲取IP地址,其它什麼都不用設。

6、 ADSL及防火牆配置

1]下載軟件:http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5.tar.gz

2]安裝軟件:
tar zxvf rp-pppoe-3.5.tar.gz
cd rp-pppoe-3.5
./go #開始安裝軟件

3]軟件安裝好後,會運行設置程序adsl-setup

USER NAME
>>> Enter your PPPoE user name (XXX):________ #此處填寫ADSL用戶賬號

INTERFACE
(default eth0):_____ #以太接口,eth0或者eth1

>>> Enter the demand value (default no): #能夠不填

DNS
>>> Enter the DNS information here: 202.X.X.X #本地電信提供的主域名服務器
>>> Enter the secondary DNS server address here: #本地電信提供的輔助域名服務器

PASSWORD
>>> Please enter your PPPoE password:
>>> Please re-enter your PPPoE password: #密碼

FIREWALLING
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
>>> Choose a type of firewall (0-2): 0
防 火牆設置,選擇2可以使主機設成局域網的internet網關,將客戶機網關設爲本機IP,DNS設爲電信提供的DNS服務器IP便可上網了,它是由 ipchains之ip假裝實現的,而rh7.2中的ipchains已經沒有了ip_masq_ftp模塊,因此客戶機沒法使用FTP服務,所以咱們在 這裏不用防火牆,選擇0。在rh72中已經有了iptables,它是ipchains的替代品,功能也更爲強大了,後面將寫一個腳本,用它來實現 ADSL共享。

>>> Accept these settings and adjust configuration files (y/n)? y #保存設置

4]接下來,編寫一個腳本/etc/rc.d/firewall
vi /etc/rc.d/firewall
#!/bin/sh
echo "Start iptables rules..."
/etc/rc.d/init.d/iptables stop
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables -N mine
iptables -A mine -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A mine -m state --state NEW -i ! ppp0 -j ACCEPT
//容許外部訪問www服務器
iptables -A mine -p tcp --dport 80 -i ppp0 -j ACCEPT
//容許外部使用openssh服務,openssh至關於telnet,可是它的數據傳輸是加密的,
//因此更安全,強烈推薦使用。
iptables -A mine -p tcp --dport 22 -i ppp0 -j ACCEPT
//容許外部訪問個人ftp服務器
iptables -A mine -p tcp --dport ftp -i ppp0 -j ACCEPT
iptables -A mine -p tcp --dport ftp-data -i ppp0 -j ACCEPT
//禁止外部ping我
iptables -A mine -p icmp --icmp-type echo-request -i ppp0 -j DROP
//
iptables -A mine -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:"
iptables -A mine -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:"
iptables -A mine -j DROP

iptables -A INPUT -j mine
iptables -A FORWARD -j mine

//iptables功能十分強大,這裏不做詳解,使用方法請參考相關資料。

5]將這個腳加入到/etc/rc.d/rc.local裏去,讓它開機時自動運行。
chmod 700 /etc/rc.d/firewall #將firewall設爲可執行文件
echo firewall >> /etc/rc.d/rc.local
固然也能夠用vi編輯/etc/rc.d/rc.local文件,在尾部加入一行firewall便可。

6]chkconfig –level 3 iptables on #開機時啓動iptables

7]好,重啓,用root登陸系統
用 adsl-start命令鏈接網絡,幾秒之後出現.Connected,OK,網絡已經連通,測試一下:前提:前面寫的防火牆腳本已經運行,內部局域網已 經連通,DHCP服務已經運行,將客戶端tcp/ip設置爲自動獲取IP地址,其它的什麼都不用填,重啓登陸之後,試試www/ftp/qq等服務,應該 都能使用。

8]存在的問題:
ping一下前面咱們設置的域名服務器吧,ping [urlwww.cx.com[/url],你會發現ping不通,爲何呢?在安裝設置adsl的時候,填入了本地電信dns服務器地址。咱們在運行 adsl-start的時候,會調用adsl-connect腳本,而它會重寫/etc/resolv.conf文件:
原來的:cat /etc/resolv.conf
domain cx.com
nameserver 10.10.1.0
如今的:cat /etc/resolv.conf
nameserver 202.X.X.X
在這種狀況下DNS服務器要是運行起來是不可能的。
解決方法:
修改/etc/resolv.conf文件:
vi /etc/resolv.conf
domain cx.com
nameserver 10.10.1.1
nameserver 202.X.X.X
修改/usr/sbin/adsl-connect腳本文件:
vi /usr/sbin/adsl-connect
找到下面幾行,並將其註釋掉:
---------------------------------------------------------------------------
if test "$DNSTYPE" = "SERVER" ; then
# Sorry, dude...
rm -f /etc/resolv.conf
ln -s /etc/ppp/resolv.conf /etc/resolv.conf
elif test "$DNSTYPE" = "SPECIFY" ; then
# Sorry, dude...
rm -f /etc/resolv.conf
echo "nameserver $DNS1" > /etc/resolv.conf
if test -n "$DNS2" ; then
echo "nameserver $DNS2" >> /etc/resolv.conf
fi
fi
-----------------------------------------------------------------------------

9]重啓,ADSL鏈接成功,DNS服務器正常.

7、文件(打印)服務器、模擬NT域的實現。

1]編輯/etc/samba/smb.conf文件
vi /etc/samba/smb.conf
[global]
workgroup = CX #把它當成NT登陸域
server string = Samba Server
netbios name = cxserver #服務器的netbios名字
hosts allow = 10.10.1. 10.10.2. 127. #只容許10.10.1.0、10.10.2.0網段訪問
printcap name = /etc/printcap
load printers = yes
printing = lprng
log file = /var/log/samba/%m.log
max log size = 0
security = user #安全等級爲user級,訪問資源須要身份驗證
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
domain master = yes
preferred master = yes
domain logons = yes #能夠登陸
dns proxy = no

[homes] #登陸後能夠看到用戶home目錄
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775

[printers] #如有打印機,在\\mineserver中可看到打印機,右鍵安裝
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[public] #共享/mnt/data/public文件夾,共享名爲public,admin組有寫權限
comment = software
path = /mnt/data/public
public = yes
wirte list = @admin

2]用testparm測試/etc/samba/smb.conf文件中語法是否正確

3]/etc/rc.d/init.d/smb start啓動服務,並用smbclient –L localhost測試服務器是否正常,如果提示輸入密碼,回車之後看到服務器信息,則服務器正常。

4]添加用戶和組
useradd test
groupadd admin
gpasswd –a test admin

5]設置smb用戶密碼
smbpasswd –a test
輸入密碼並驗證

6]用setup之Printer configuration配置一本地打印機,其過程請參考相關資料,這裏不過多贅述。

7]測試:
請設置windows機器的網絡屬性,登陸方式爲網絡用戶登陸,直接登陸到NT域,NT域爲cx,重啓後用前面添加的test賬號登陸,密碼爲smbpasswd –a test時設置的密碼,進行系統後用控制面板之」用戶及密碼」可修改登陸密碼。
打開網上鄰居,看是否能瀏覽到cxserver,亦可用\\cxserver訪問。
最後設置:chkconfig –level 3 smb on #讓smb開機自動運行

8、磁盤配額

前面咱們在配置文件共享的時候,有一個共享資源爲homes,如aa登陸,在\\cxserver中有一個aa文件夾,aa用戶對這個文件夾具讀寫權限,

如若咱們不限制aa的話,他有可能會將硬盤塞滿,任何一個管理員都不但願看到這種事情,下面咱們用quota來實現對用戶使用磁盤空間的限制。

1]首先明白一個概念,quota是針對分區的,因此咱們在前面安裝linux的時候單獨分了一個/home區。

2]而全部的用戶home目錄都在/home下,如今開始在home目錄下創建兩個文件:
cd /home
touch quota.user
touch quota.group
chmod 600 quota.user //只容許root對這兩個文件讀寫
chmod 600 quota.group

3]在/etc/rc.d/rc.local文件尾部加入quota啓動腳本:
if [ -x /sbin/quotacheck ]
then
echo "Checking quotas. This may take some time..."
/sbin/quotacheck -avug
echo "Done"
fi
if [ -x /sbin/quotaon ]
then
echo "Turning on quota"
/sbin/quotaon -avug
echo "OK"
fi

4]修改/etc/fstab文件中定義/home分區的那一行:
原內容: /dev/hda3 /home ext3 defaults 1 2
新內容: /dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
看得出來只是在defaults後面加了usrquota,grpquota而已。
注意啊,是usrquota而不是userquota,如果錯了,後果難以預料。

5]重啓,在啓動過程當中會出錯,主要是由於quota在/home目錄下打不到aquota.user和aquota.group兩個文件,不要緊,我們進了系統以再慢慢收拾它。

6]用root登陸,而後咱們生成aquota.user和aquota.group兩個文件:
convertquota -u /home
convertquota –g /home
若以上步驟不出錯的話,咱們用ls /home –al就會看到aquota.user,aquota.group兩
個文件了

7]再重啓,注意觀察,不會再出錯了。進入系統後就能夠對用戶home目錄進行限制了。好比如今有一個test用戶,咱們對他進行限制:
edquota –u test #此命令將進入一個vi編輯模式,其內容以下:
Filesystem blocks soft hard inodes soft hard
/dev/hda3 0 0 0 0 0 0
註解標識: A B C D E F
在講解各參數以前先說說限制的兩種方式:soft,hard
soft:又稱軟限制,當用戶到達這個限制之後,系統會給予警告,但仍可寫入。
hard:又稱硬限制,到達這個限制,就徹底禁止任何寫入啦。
ABC爲磁盤空間的限制設置,而DEF爲總文件個數的限制
A:已使用空間,無須要設置
B:用戶空間使用限制,爲軟限制,須要設置。
C:用戶空間使用限制,爲硬限制,須要設置。
D:已有文件總數,無須要設置。
E:文件總數限制,爲軟限制,須要設置。
F:文件總數限制,爲硬限制,須要設置。

咱們要限制test用戶使用空間100M,最多不能超過120M,文件總數爲2000個,
最多不能超過2500個,設置以下:
Filesystem blocks soft hard inodes soft hard
/dev/hda3 0 102400 122880 0 2000 2500
注:空間限制是以k爲單位的。

8]測試:進入本身的home目錄,而後拷貝文件,如果超過120M,就不容許再寫入了。

9]其它命令的使用:
複製相同調協至其它用戶:
edquota –p test –u username1 username2 username3 username4……
顯示某個用戶當前磁盤使用狀況:
quota –v username
顯示全部用戶當前磁盤使用狀況:
repquota –a
其它的一些命令請參考相關資料。

9、FTP服務器:

Rh72自帶了wu_ftp,可是因爲其毛病很多,因此咱們不用它,咱們用性能及安全性能均優於它的proftpd來代替它。

1]下載軟件:ftp://ftp.proftpd.org/distrib/sourc...pd-1.2.5.tar.gz

2]安裝:
tar zxvf proftpd-1.2.5.tar.gz
cd proftpd-1.2.5
./configure –prefix=/usr/local/proftpd //指定安裝在/usr/local/proftpd目錄下
make
make install
cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
chmod 700 /etc/rc.d/init.d/proftpd
chkconfig –level 3 proftpd on //設置爲系統自啓動服務
cp /usr/local/proftpd/sbin/proftpd /usr/sbin //將proftpd拷至/usr/sbin目錄下,讓系
統能自動搜索到,也省得再去加一個搜索路徑

3]配置/usr/local/proftpd/etc/proftpd.conf文件:
vi /usr/local/proftpd.conf
ServerName "Xchen FTP server" //服務器登陸提示
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nobody //原來爲nogroup,請改爲nobody
RequireValidShell off //手動添加此名,重要
//限定test組用戶只能訪問本身的home目錄,而不能向上瀏覽
DefaultRoot ~ test
//限定test組用戶只能訪問本身的/home/ftp目錄,不能向上瀏覽
DefaultRoot ~/ftp test
//限定music組用戶只能訪問/home/music目錄,不能向上瀏覽
DefaultRoot /home/ftp music
//除music組中bb用戶外都能訪問/home/music目錄,不能向上瀏覽
DefaultRoot /home/ftp music,!bb
//上面組須要本身創建:groupadd test,gpasswd –a username test
ServerIdent off //登陸時不顯示版本信息

AllowOverwrite on

// /home/ftp爲匿名用戶登陸目錄
User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg
DisplayFirstChdir .message

DenyAll



4]啓動服務:/etc/rc.d/init.d/proftpd start

5]測試,在客戶端用FTP軟件或命令行FTP程序進行訪問ftp.cx.com。

6]proftpd還有不少高級應用,請參考相關資料,這裏就很少贅述。

10、WWW服務

www服務用apache來實現,步驟極其簡單,固然,這裏說的是初級應用。由於咱們要實現的是簡單的www服務,因此只需更改下面幾個參數便可:

1]Vi /etc/httpd/conf/httpd.conf
ServerName www.cx.com
DocumentRoot 」/var/www」

2]拷貝網頁文件到/var/www目錄

3]啓動服務:/etc/rc.d/init.d/httpd start
將httpd設置爲系統自啓動服務:chkconfig –level 3 httpd on

4]測試:在ie中用http://www.cx.com測試。

爲何把www服務講得這麼簡單呢,主要是由於這種單一類型的網頁文件服務用得較少,如今大多數都要用cgi,asp,php,還有數據庫等,關於這方面配置還請參考相關資料,這裏不做詳解。

11、動態域名服務
  動態域名這個叫法不大穩當,應該叫動態ip for 域名纔對。到如今爲止,ftp和www服務咱們都實現了,在局域網內能夠用www.cx.com來訪問,可是咱們已經用ADSL連通了internet, 咱們怎樣讓外部訪問咱們的ftp,www服務器呢,總不成每都通知對方服務器的IP吧,因此就要用到動態域名服務,大體原理是每次ADSL拔號時將自身 IP更新到外部DNS服務器數據庫中所對應的那個域名,因此咱們每次訪問這個域名就能夠了,在這裏討論一下www.3322.org提供的動態服務的實 現。
1]登陸www.3322.org網站,註冊一個用戶,並申請一個動態域名xxxx.3322.org。
2]下載linux客戶端軟件:
http://www.3322.org/dyndnspage/ez-i...-linux-i386.tgz
3]安裝軟件:
tar zxvf ez-ipupdate-3.0.10-linux-i386.tgz
mv ez-ipupdate-3.0.10-linux-i386 /usr/local/ezip
4]編輯/usr/local/ezip/qdns.conf文件:
vi /usr/local/qdns.conf
service-type=qdns
user=username:password //用戶名及密碼,用冒號隔開
host=xxxxx.3322.org //你申請的域名
interface=ppp0 //接口爲ppp0
max-interval=2073600
cache-file=/tmp/ez-ipupdate.cache

5]將當前ip現新到咱們申請的域名:
cd /usr/local/ezip
ez-ipupdate –c qdns.conf
系統會提示數據更新成功,好,咱們來ping一下xxxx.3322.org,是ppp0的IP,再用http://xxx.3322.org試一下,成功!!!。

6]問題又來了,難道咱們每次啓動ADSL都要用手動更新一次嗎,你可能會想到用crontab讓它每隔幾分鐘更新一次,不過爲了ip更新而啓用crond服務彷佛有點小題大作,個人方法,修改/usr/sbin/adsl-start腳本:
vi /usr/sbin/adsl-start
找到倒數25行」tty –s && $ECHO 「 Connected ! 「,在其下增長一行:
/usr/local/ezip/ez-ipupdate –c /usr/local/ezip/qdns.conf
存盤退出,咱們讓ADSL拔號完成之後自動更新!

7]測試一下:
adsl-start
. Connected!
ez-ipupdate Version 3.0.10
Copyright (C) 1999-2000 Angus Mackay.
connected to members.3322.org (202.X.X.X) on port 80.
request successful
OK,數據更新成功。

好,如今你隨時隨地均可以用xxxx.3322.org訪問你的服務了,不錯吧。


12、openssh的設置
  若是你在家裏或者其它地方,怎樣控制你的服務器,你可能會想到用telnet,原本是能夠的,可是因爲telnet用的是明碼傳輸,容易給那些不懷好意者可乘之機,因此咱們用openssh來代替telnet。

1]卸載原來的2.9x版,2.9x版有bug,不安全:
rpm –e openssh

2]最新軟件包下載:

ftp://ftp.openbsd.org/pub/OpenBSD/O...sh-3.4p1.tar.gz

3]安裝軟件:
tar zxvf openssh-3.4p1.tar.gz
cd openssh-3.41
./configure --prefix=/usr/local/ssh \
--sysconfdir=/etc/ssh \
--with-tcp-wrappers \
--with-ipv4-default \
--with-md5-passwords
make
make install
注:安裝完成之後,會自動生成主機密鑰,還會提示須要sshd用戶賬號,可用useradd加一個sshd用戶。
install /contrib/redhat/sshd.pam /etc/pam.d/sshd
cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
chkconfig --level 3 sshd on ;配置成系統服務

4]配置openssh之/etc/ssh/ssh_config文件
vi /etc/ssh/ssh_config
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
BatchMode no
CheckHostIP yes
StrictHostKeyChecking ask
IdentityFile ~/.ssh/identity
Port 22
Cipher 3des
EscapeChar ~

5]配置openssh之/etc/ssh/sshd_config文件
vi /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 600
#PermitRootLogin yes #仍是不要讓root直接登陸爲妙!
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
RhostsAuthentication no
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts no
PasswordAuthentication yes
PermitEmptyPasswords no
Subsystem sftp /usr/local/ssh/libexec/sftp-server

6]配置用戶的加密密鑰
useradd test
passwd test
su test
ssh-keygen -d
出現提示請回車並輸入passwd,再次輸入passwd。
注:這個密碼是系統加密運算時用到的,登陸時還用原來密碼。

7]啓動服務
/etc/rc.d/init.d/sshd start

8]在客戶端用test賬號進行測試。



%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
116 linux幾條命令的基本用法
提示符爲#表示須要root權限,$表示通常用戶權限便可

1. linux下面命令行查找文件的兩個方法
1) find

$ find 路徑 -name 待查找文件 -print

-xdev參數把查詢操做限制在當前的文件系統之中:

$ find /mnt/dos -name *.sys -print -xdev

2) locate + updatedb:

# updatedb
$ locate 待查找文件

2. 使用whatis和apropos命令獲取命令簡介

# makewhatis //更新whatis數據庫
$ whatis w //查看命令w的功能
$ apropos search //查找有search功能的有哪些命令

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
117 在RedHat Linux環境中實現雙網卡綁定
 

用於雙網卡在同一網段內的狀況,能夠實現流量均衡或者備份

1. #cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-bond0
----------------------------------------------------------------

2 #vi ifcfg-bond0
將第一行改爲 DEVICE=bond0
----------------------------------------------------------------

3 # vi /etc/modules.conf
加入兩行
alias bond0 bonding
options bond0 miimon=100 mode=1

----------------------------------------------------------------

4 # vi /etc/rc.d/rc.local
加入兩行
ifenslave bond0 eth0 eth1
route add -net 192.168.0.0 netmask 255.255.255.0 bond0

----------------------------------------------------------------

5 reboot

重啓會看見:
................
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface bond1 OK
----------------------------------------------------------------

6. 檢查:
#netstat -r
192.168.0.0 255.255.255.0 0 40 0 0 bond0
192.168.0.0 255.255.255.0 0 40 0 0 eth0
192.168.0.0 255.255.255.0 0 40 0 0 eth1
這時候看看你的網卡後面的燈, 他們閃的頻率是同樣的..
當#ifdown eth0 時, 轉換有5-6秒的延時.
----------------------------------------------------------------
注意:
若是網絡不通須要從啓bind
# ifdown bind0
#ifup bind0
網卡綁定用在vncserver 或scp中就不靈了

118 route命令使用方法

route命令主要用於手動配置靜態路由表
例:增長一條經過網關到達令一子網的路由
#route add net remote_net_ip gateway_ip 1
  其中add表明要增長路由,net表示路由到達的是一個網絡而不是一臺主機,1表明遠端網絡需經過網關才能到達
(直接經過網絡接口相連時,該參數用0)
命令格式:
#route add -net remote_net_ip gateway_ip -netmask netmask
#route add -host host_ip local_interface_ip -interface
使用"delete","change"命令參數能夠對路由表中的路由信息進行刪除和修改
使用"netstat -rn"命令查看當前的路由信息

過修改文件/etc/defaultrouter能夠設置一些默認路由
$$$$$$$$$$$$$$$$$$$$$$$$$$$$

122   find命令詳細用法

名稱 : find
用法 : find
使用說明 :
將文件系統內符合 expression 的文件列出來。你能夠指要文件的名稱、類別、時間、大小、
權限等不一樣資訊的組合,只有徹底相符的纔會被列出來。
find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 以前的部份爲 path
,以後的是 expression。若是 path 是空字串則使用目前路徑,若是 expression 是空字串則使用
-print 爲預設 expression。
expression 中可以使用的選項有二三十個之多,在此只介紹最經常使用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n : 在過去 n 分鐘內被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去 n 天過讀取過的文件
-cmin n : 在過去 n 分鐘內被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去 n 天過修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 表明 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w
是二個位元組。-type c : 文件類型是 c 的文件。
d: 目錄
c: 字型裝置文件
b: 區塊裝置文件
p: 具名貯列
f: 通常文件
l: 符號連結
s: socket
-pid n : process id 是 n 的文件
你能夠使用 ( ) 將運算式分隔,並使用下列運算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
範例:
將目前目錄及其子目錄下全部延伸檔名是 c 的文件列出來。
# find . -name "*.c"
將目前目錄其其下子目錄中全部通常文件列出
# find . -ftype f
將目前目錄及其子目錄下全部最近 20 分鐘內更新過的文件列出
# find . -ctime -20
find . -name "*" -exec grep xxx {} ; -print |morexxx爲你想要找的字符串
 

121 Grep的用法

Grep的內容
Grep 打印出文件中符合指定模式的行。
安裝下列程序: egrep (指向grep的連接), fgrep (指向grep的連接) 和 grep
簡短說明
egrep 打印出匹配擴展規則表達式模式的行。
fgrep 對固定字符串列表進行匹配。
grep 對基本規則表達式進行匹配。
Grep 安裝依賴關係
Grep 依賴於: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.

Grep的用法
Grep : g (globally) search for a re (regular expression ) and p (print ) the results.

一、參數:
-I :忽略大小寫
-c :打印匹配的行數
-l :從多個文件中查找包含匹配項
-v :查找不包含匹配項的行
-n:打印包含匹配項的行和行標

二、RE(正則表達式)
\ 忽略正則表達式中特殊字符的原有含義
^ 匹配正則表達式的開始行
$ 匹配正則表達式的結束行
\< 從匹配正則表達式的行開始
\> 到匹配正則表達式的行結束
[ ] 單個字符;如[A] 即A符合要求
[ - ] 範圍 ;如[A-Z]即A,B,C一直到Z都符合要求
. 全部的單個字符
* 全部字符,長度能夠爲0

三、舉例
# ps -ef | grep in.telnetd
root 19955 181 0 13:43:53 ? 0:00 in.telnetd

# more size.txt size文件的內容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep '[a-b]' 範圍 ;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
# more size.txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep '' 單個字符;如[A] 即A符合要求
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

# grep '^root' /etc/group 匹配正則表達式的開始行
root::0:root


# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp

# grep '\uucp::5:root,uucp


# grep 'root$' /etc/group 匹配正則表達式的結束行
root::0:root
mail::6:root


# more size.txt | grep -i 'b1..*3' -i :忽略大小寫

b124230
b103303
B103303

# more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配項的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303

# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正則表達式中特殊字符的原有含義

15
# grep '\$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] && \
echo "$path\t$res\t$fstype\t$opts\t$desc" \
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' \
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && \
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"


# more size.txt

the test file
their are files
The end

# grep 'the' size.txt
the test file
their are files

# grep '\the test file
their are files

# grep 'the\>' size.txt
the test file

# grep '\' size.txt
the test file

# grep '\<[Tt]he\>' size.txt
the test file
The end

119 Emacs 安裝

1. 得到 Emacs
http://ftp.gnu.org/pub/gnu/emacs/
http://savannah.gnu.org/projects/emacs/
ftp://soft.eeatech.org:11021/incoming/other/

2. 安裝方法
PATH=%emacs%/bin

3. 基本配置
Emacs 的配置文件 .emacs or _emacs
HOME=%path%

120 UNIX awk使用手冊
什麼是awk?

你 可能對UNIX比較熟悉,但你可能對awk很陌生,這一點也不奇怪,的確,與其優秀的功能相比,awk還遠沒達到它應有的知名度。awk是什麼?與其它大 多數UNIX命令不一樣的是,從名字上看,咱們不可能知道awk的功能:它既不是具備獨立意義的英文單詞,也不是幾個相關單詞的縮寫。事實上,awk是三個 人名的縮寫,他們是:Aho、(Peter) Weinberg和(Brain)Kernighan。正是這三我的創造了awk---一個優秀的樣式掃描與處理工具。

AWK的功能是 什麼?與sed和grep很類似,awk是一種樣式掃描與處理工具。但其功能卻大大強於sed和grep。awk提供了極其強大的功能:它幾乎能夠完成 grep和sed所能完成的所有工做,同時,它還能夠能夠進行樣式裝入、流控制、數學運算符、進程控制語句甚至於內置的變量和函數。它具有了一個完整的語 言所應具備的幾乎全部精美特性。實際上,awk的確擁有本身的語言:awk程序設計語言,awk的三位建立者已將它正式定義爲:樣式掃描和處理語言。

爲何使用awk?

使 用awk的第一個理由是基於文本的樣式掃描和處理是咱們常常作的工做,awk所作的工做有些象數據庫,但與數據庫不一樣的是,它處理的是文本文件,這些文件 沒有專門的存儲格式,普通的人們就能編輯、閱讀、理解和處理它們。而數據庫文件每每具備特殊的存儲格式,這使得它們必須用數據庫處理程序來處理它們。既然 這種相似於數據庫的處理工做咱們常常會遇到,咱們就應當找處處理它們的簡便易行的方法,UNIX有不少這方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分優秀的一種。

使用awk的第二個理由是awk是一個簡單的工具,固然這是相對 於其強大的功能來講的。的確,UNIX有許多優秀的工具,例如UNIX自然的開發工具C語言及其延續C++就很是的優秀。但相對於它們來講,awk完成同 樣的功能要方便和簡捷得多。這首先是由於awk提供了適應多種須要的解決方案:從解決簡單問題的awk命令行到複雜而精巧的awk程序設計語言,這樣作的 好處是,你能夠沒必要用複雜的方法去解決原本很簡單的問題。例如,你能夠用一個命令行解決簡單的問題,而C不行,即便一個再簡單的程序,C語言也必須通過編 寫、編譯的全過程。其次,awk自己是解釋執行的,這就使得awk程序沒必要通過編譯的過程,同時,這也使得它與shell script程序可以很好的契合。最後,awk自己較C語言簡單,雖然awk吸取了C語言不少優秀的成分,熟悉C語言會對學習awk有很大的幫助,但 awk自己不需要會使用C語言——一種功能強大但須要大量時間學習才能掌握其技巧的開發工具。

使用awk的第三個理由是awk是一個容 易得到的工具。與C和C++語言不一樣,awk只有一個文件(/bin/awk),並且幾乎每一個版本的UNIX都提供各自版本的awk,你徹底沒必要費心去想 如何得到awk。但C語言卻不是這樣,雖然C語言是UNIX自然的開發工具,但這個開發工具倒是單獨發行的,換言之,你必須爲你的UNIX版本的C語言開 發工具單獨付費(固然使用D版者除外),得到並安裝它,而後你才能夠使用它。

基於以上理由,再加上awk強大的功能,咱們有理由說,如 果你要處理與文本樣式掃描相關的工做,awk應該是你的第一選擇。在這裏有一個可遵循的通常原則:若是你用普通的shell工具或shell script有困難的話,試試awk,若是awk仍不能解決問題,則便用C語言,若是C語言仍然失敗,則移至C++。

awk的調用方式

前面曾經說過,awk提供了適應多種須要的不一樣解決方案,它們是:

1、 awk命令行,你能夠象使用普通UNIX命令同樣使用awk,在命令行中你也能夠使用awk程序設計語言,雖然awk支持多行的錄入,可是錄入長長的命令 行並保證其正確無誤倒是一件使人頭疼的事,所以,這種方法通常只用於解決簡單的問題。固然,你也能夠在shell script程序中引用awk命令行甚至awk程序腳本。

2、使用-f選項調用awk程序。awk容許將一段awk程序寫入一個文本文件,而後在awk命令行中用-f選項調用並執行這段程序。具體的方法咱們將在後面的awk語法中講到。

3、利用命令解釋器調用awk程序:利用UNIX支持的命令解釋器功能,咱們能夠將一段awk程序寫入文本文件,而後在它的第一行加上:
#!/bin/awk -f
並賦予這個文本文件以執行的權限。這樣作以後,你就能夠在命令行中用相似於下面這樣的方式調用並執行這段awk程序了。

awk腳本文本名 待處理文件

awk的語法:

與其它UNIX命令同樣,awk擁有本身的語法:

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]

參數說明:

-F re:容許awk更改其字段分隔符。

parameter: 該參數幫助爲不一樣的變量賦值。

'prog': awk的程序語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程序語句段的標準形式爲:

'pattern {action}'

其 中pattern參數能夠是egrep正則表達式中的任何一個,它能夠使用語法/re/再加上一些樣式匹配技巧構成。與sed相似,你也能夠使用","分 開兩樣式以選擇某個範圍。關於匹配的細節,你能夠參考附錄,若是仍不懂的話,找本UNIX書學學grep和sed(本人是在學習ed時掌握匹配技術的)。 action參數老是被大括號包圍,它由一系統awk語句組成,各語句之間用";"分隔。awk解釋它們,並在pattern給定的樣式匹配的記錄上執行 其操做。與shell相似,你也能夠使用「#」做爲註釋符,它使「#」到行尾的內容成爲註釋,在解釋執行時,它們將被忽略。你能夠省略pattern和 action之一,但不能二者同時省略,當省略pattern時沒有樣式匹配,表示對全部行(記錄)均執行操做,省略action時執行缺省的操做——在 標準輸出上顯示。

-f progfile:容許awk調用並執行progfile指定有程序文件。progfile是一個文本文件,他必須符合awk的語法。

in_file:awk的輸入文件,awk容許對多個輸入文件進行處理。值得注意的是awk不修改輸入文件。若是未指定輸入文件,awk將接受標準輸入,並將結果顯示在標準輸出上。awk支持輸入輸出重定向。

awk的記錄、字段與內置變量:

前 面說過,awk處理的工做與數據庫的處理方式有相同之處,其相同處之一就是awk支持對記錄和字段的處理,其中對字段的處理是grep和sed不能實現 的,這也是awk優於兩者的緣由之一。在awk中,缺省的狀況下老是將文本文件中的一行視爲一個記錄,而將一行中的某一部分做爲記錄中的一個字段。爲了操 做這些不一樣的字段,awk借用shell的方法,用1,2,3...這樣的方式來順序地表示行(記錄)中的不一樣字段。特殊地,awk用0表示整個行(記 錄)。不一樣的字段之間是用稱做分隔符的字符分隔開的。系統默認的分隔符是空格。awk容許在命令行中用-F re的形式來改變這個分隔符。事實上,awk用一個內置的變量FS來記憶這個分隔符。awk中有好幾個這樣的內置變量,例如,記錄分隔符變量RS、當前工 做的記錄數NR等等,本文後面的附表列出了所有的內置變量。這些內置的變量能夠在awk程序中引用或修改,例如,你能夠利用NR變量在模式匹配中指定工做 範圍,也能夠經過修改記錄分隔符RS讓一個特殊字符而不是換行符做爲記錄的分隔符。

例:顯示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段:

awk -F % 'NR==7,NR==15 {printf 1 3 7}'

awk的內置函數

awk 之因此成爲一種優秀的程序設計語言的緣由之一是它吸取了某些優秀的程序設計語言(例如C)語言的許多優勢。這些優勢之一就是內置函數的使用,awk定義並 支持了一系列的內置函數,因爲這些函數的使用,使得awk提供的功能更爲完善和強大,例如,awk使用了一系列的字符串處理內置函數(這些函數看起來與C 語言的字符串處理函數類似,其使用方式與C語言中的函數也相差無幾),正是因爲這些內置函數的使用,使awk處理字符串的功能更增強大。本文後面的附錄中 列有通常的awk所提供的內置函數,這些內置函數也許與你的awk版本有些出入,所以,在使用以前,最好參考一下你的系統中的聯機幫助。

做 爲內置函數的一個例子,咱們將在這裏介紹awk的printf函數,這個函數使得awk與c語言的輸出相一致。實際上,awk中有許多引用形式都是從C語 言借用過來的。若是你熟悉C語言,你也許會記得其中的printf函數,它提供的強大格式輸出功能曾經帶咱們許多的方便。幸運的是,咱們在awk中又和它 重逢了。awk中printf幾乎與C語言中如出一轍,若是你熟悉C語言的話,你徹底能夠照C語言的模式使用awk中的printf。所以在這裏,咱們只 給出一個例子,若是你不熟悉的話,請隨便找一本C語言的入門書翻翻。

例:顯示文件myfile中的行號和第3字段:

awk '{printf"%03d%s\n",NR,1}' myfile

在命令行使用awk

按 照順序,咱們應當講解awk程序設計的內容了,但在講解以前,咱們將用一些例子來對前面的知識進行回顧,這些例子都是在命令行中使用的,由此咱們能夠知道 在命令行中使用awk是多麼的方便。這樣作的緣由一方面是爲下面的內容做鋪墊,另外一方面是介紹一些解決簡單問題的方法,咱們徹底沒有必要用複雜的方法來解 決簡單的問題----既然awk提供了較爲簡單的方法的話。

例:顯示文本文件mydoc匹配(含有)字符串"sun"的全部行。

awk '/sun/{print}' mydoc

因爲顯示整個記錄(全行)是awk的缺省動做,所以能夠省略action項。

awk '/sun/' mydoc

例:下面是一個較爲複雜的匹配的示例:

awk '/[Ss]un/,/[Mm]oon/ {print}' myfile

它將顯示第一個匹配Sun或sun的行與第一個匹配Moon或moon的行之間的行,並顯示到標準輸出上。

例:下面的示例顯示了內置變量和內置函數length()的使用:

awk 'length(0)>80 {print NR}' myfile

該命令行將顯示文本myfile中全部超過80個字符的行號,在這裏,用0表示整個記錄(行),同時,內置變量NR不使用標誌符''。

例: 做爲一個較爲實際的例子,咱們假設要對UNIX中的用戶進行安全性檢查,方法是考察/etc下的passwd文件,檢查其中的passwd字段(第二字 段)是否爲"*",如不爲"*",則表示該用戶沒有設置密碼,顯示出這些用戶名(第一字段)。咱們能夠用以下語句實現:

#awk -F: '2=="" {printf("%s no password!\n",1' /etc/passwd

在這個示例中,passwd文件的字段分隔符是「:」,所以,必須用-F:來更改默認的字段分隔符,這個示例中也涉及到了內置函數printf的使用。

awk的變量

如同其它程序設計語言同樣,awk容許在程序語言中設置變量,事實上,提供變量的功能是程序設計語言的其本要求,不提供變量的程序設計語言本人還從未見過。

awk 提供兩種變量,一種是awk內置的變量,這前面咱們已經講過,須要着重指出的是,與後面提到的其它變量不一樣的是,在awk程序中引用內置變量不須要使用標 志符""(回憶一下前面講過的NR的使用)。awk提供的另外一種變量是自定義變量。awk容許用戶在awk程序語句中定義並調用自已的變量。固然這種變量 不能與內置變量及其它awk保留字相同,在awk中引用自定義變量必須在它前面加上標誌符""。與C語言不一樣的是,awk中不須要對變量進行初始化, awk根據其在awk中第一次出現的形式和上下文肯定其具體的數據類型。當變量類型不肯定時,awk默認其爲字符串類型。這裏有一個技巧:若是你要讓你的 awk程序知道你所使用的變量的明確類型,你應當在在程序中給它賦初值。在後面的實例中,咱們將用到這一技巧。

運算與判斷:

做 爲一種程序設計語言所應具備的特色之一,awk支持多種運算,這些運算與C語言提供的幾本相同:如+、-、*、/、%等等,同時,awk也支持C語言中類 似++、--、+=、-=、=+、=-之類的功能,這給熟悉C語言的使用者編寫awk程序帶來了極大的方便。做爲對運算功能的一種擴展,awk還提供了一 系列內置的運算函數(如log、sqr、cos、sin等等)和一些用於對字符串進行操做(運算)的函數(如length、substr等等)。這些函數 的引用大大的提升了awk的運算功能。

做爲對條件轉移指令的一部分,關係判斷是每種程序設計語言都具有的功能,awk也不例外。awk 中容許進行多種測試,如經常使用的==(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)、>=(小於等於)等 等,同時,做爲樣式匹配,還提供了~(匹配於)和!~(不匹配於)判斷。

做爲對測試的一種擴充,awk也支持用邏輯運算符:!(非)、&&(與)、||(或)和括號()進行多重判斷,這大大加強了awk的功能。本文的附錄中列出了awk所容許的運算、判斷以及操做符的優先級。

awk的流程控制

流程控制語句是任何程序設計語言都不能缺乏的部分。任何好的語言都有一些執行流程控制的語句。awk提供的完備的流程控制語句相似於C語言,這給咱們編程帶來了極大的方便。

一、BEGIN和END:

在awk 中兩個特別的表達式,BEGIN和END,這二者均可用於pattern中(參考前面的awk語法),提供BEGIN和END的做用是給程序賦予初始狀態 和在程序結束以後執行一些掃尾的工做。任何在BEGIN以後列出的操做(在{}內)將在awk開始掃描輸入以前執行,而END以後列出的操做將在掃描徹底 部的輸入以後執行。所以,一般使用BEGIN來顯示變量和預置(初始化)變量,使用END來輸出最終結果。

例:累計銷售文件xs中的銷售金額(假設銷售金額在記錄的第三字段):

awk
>'BEGIN { FS=":";print "統計銷售金額";total=0}
>{print 3;total=total+3;}
>END {printf "銷售金額總計:%.2f",total}' sx
(注:>是shell提供的第二提示符,如要在shell程序awk語句和awk語言中換行,則需在行尾加反斜槓\)

在這裏,BEGIN預置了內部變量FS(字段分隔符)和自定義變量total,同時在掃描以前顯示出輸出行頭。而END則在掃描完成後打印出總合計。

二、流程控制語句
awk提供了完備的流程控制語句,其用法與C語言相似。下面咱們一一加以說明:

2.一、if...else語句:

格式:
if(表達式)
語句1
else
語句2

格式中"語句1"能夠是多個語句,若是你爲了方便awk判斷也方便你自已閱讀,你最好將多個語句用{}括起來。awk分枝結構容許嵌套,其格式爲:

if(表達式1)
{if(表達式2)
語句1
else
語句2
}
語句3
else {if(表達式3)
語句4
else
語句5
}
語句6

固然實際操做過程當中你可能不會用到如此複雜的分枝結構,這裏只是爲了給出其樣式罷了。

2.二、while語句

格式爲:

while(表達式)
語句

2.三、do-while語句

格式爲:

do
{
語句
}while(條件判斷語句)

2.四、for語句

格式爲:

for(初始表達式;終止條件;步長表達式)
{語句}

在awk 的 while、do-while和for語句中容許使用break,continue語句來控制流程走向,也容許使用exit這樣的語句來退出。break 中斷當前正在執行的循環並跳到循環外執行下一條語句。continue從當前位置跳到循環開始處執行。對於exit的執行有兩種狀況:當exit語句不在 END中時,任何操做中的exit命令表現得如同到了文件尾,全部模式或操做執行將中止,END模式中的操做被執行。而出如今END中的exit將致使程 序終止。

例:爲了

awk中的自定義函數

定義和調用用戶本身的函數是幾乎每一個高級語言都具備的功能,awk也不例外,但原始的awk並不提供函數功能,只有在nawk或較新的awk版本中才能夠增長函數。

函數的使用包含兩部分:函數的定義與函數調用。其中函數定義又包括要執行的代碼(函數自己)和從主程序代碼傳遞到該函數的臨時調用。

awk函數的定義方法以下:

function 函數名(參數表){
函數體
}

在gawk中容許將function省略爲func,但其它版本的awk不容許。函數名必須是一個合法的標誌符,參數表中能夠不提供參數(但在調用函數時函數名後的一對括號仍然是不可缺乏的),也能夠提供一個或多個參數。與C語言類似,awk的參數也是經過值來傳遞的。

在awk 中調用函數比較簡單,其方法與C語言類似,但awk比C語言更爲靈活,它不執行參數有效性檢查。換句話說,在你調用函數時,能夠列出比函數預計(函數定義 中規定)的多或少的參數,多餘的參數會被awk所忽略,而不足的參數,awk將它們置爲缺省值0或空字符串,具體置爲什麼值,將取決於參數的使用方式。

awk函數有兩種返回方式:隱式返回和顯式返回。當awk執行到函數的結尾時,它自動地返回到調用程序,這是函數是隱式返回的。若是須要在結束以前退出函數,能夠明確地使用返回語句提早退出。方法是在函數中使用形如:return 返回值 格式的語句。

例: 下面的例子演示了函數的使用。在這個示例中,定義了一個名爲print_header的函數,該函數調用了兩個參數FileName和PageNum, FileName參數傳給函數當前使用的文件名,PageNum參數是當前頁的頁號。這個函數的功能是打印(顯示)出當前文件的文件名,和當前頁的頁號。 完成這個功能後,這個函數將返回下一頁的頁號。

nawk
>'BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file,pageno);#調用函數print_header
>printf("當前頁頁號是:%d\n",pageno);
>}

>#定義函數print_header
>function print_header(FileName,PageNum){
>printf("%s %d\n",FileName,PageNum); >PageNum++;return PageNUm;
>}
>}' myfile

執行這個程序將顯示以下內容:

myfile 1
當前頁頁號是:2

awk高級輸入輸出

1.讀取下一條記錄:

awk的next語句致使awk讀取下一個記錄並完成模式匹配,而後當即執行相應的操做。一般它用匹配的模式執行操做中的代碼。next致使這個記錄的任何額外匹配模式被忽略。

2.簡單地讀取一條記錄

awk 的 getline語句用於簡單地讀取一條記錄。若是用戶有一個數據記錄相似兩個物理記錄,那麼getline將尤爲有用。它完成通常字段的分離(設置字段變 量0 FNR NF NR)。若是成功則返回1,失敗則返回0(到達文件尾)。若是需簡單地讀取一個文件,則能夠編寫如下代碼:

例:示例getline的使用

{while(getline==1)
{
#process the inputted fields
}
}

也能夠使getline保存輸入數據在一個字段中,而不是經過使用getline variable的形式處理通常字段。當使用這種方式時,NF被置成0,FNR和NR被增值。

用 戶也能夠使用getline<"filename"方式從一個給定的文件中輸入數據,而不是從命令行所列內容輸入數據。此時,getline將完成 通常字段分離(設置字段變量0和NF)。若是文件不存在,返回-1,成功,返回1,返回0表示失敗。用戶能夠從給定文件中讀取數據到一個變量中,也能夠用 stdin(標準輸入設備)或一個包含這個文件名的變量代替filename。值得注意的是當使用這種方式時不修改FNR和NR。

另外一種使用getline語句的方法是從UNIX命令接受輸入,例以下面的例子:

例:示例從UNIX命令接受輸入

{while("who -u"|getline)
{
#process each line from the who command
}
}

固然,也能夠使用以下形式:

"command" | getline variable

3.關閉文件:

awk中容許在程序中關閉一個輸入或輸出文件,方法是使用awk的close語句。

close("filename"

filename能夠是getline打開的文件(也能夠是stdin,包含文件名的變量或者getline使用的確切命令)。或一個輸出文件(能夠是stdout,包含文件名的變量或使用管道的確切命令)。

4.輸出到一個文件:

awk中容許用以下方式將結果輸出到一個文件:

printf("hello word!\n">"datafile"

printf("hello word!\n">>"datafile"

5.輸出到一個命令

awk中容許用以下方式將結果輸出到一個命令:

printf("hello word!\n"|"sort-t','"

awk與shell script混合編程

因 爲awk能夠做爲一個shell命令使用,所以awk能與shell批處理程序很好的融合在一塊兒,這給實現awk與shell程序的混合編程提供了可能。 實現混合編程的關鍵是awk與shell script之間的對話,換言之,就是awk與shell script之間的信息交流:awk從shell script中獲取所需的信息(一般是變量的值)、在awk中執行shell命令行、shell script將命令執行的結果送給awk處理以及shell script讀取awk的執行結果等等。

1.awk讀取Shell script程序變量

在awk中咱們能夠經過「'變量名'」的方式讀取sell scrpit程序中的變量。

例:在下面的示例中,咱們將讀取sell scrpit程序中的變量Name,該變量存放的是文本myfile的撰寫者,awk將打印出這我的名。

cat writename
:
# @(#)
#
.
.
.
Name="張三" nawk 'BEGIN {name="'Name'";\ printf("\t%s\t撰寫者%s\n",FILENAME,name";}\
{...}END{...}' myfile
.
.
.

2.將shell命令的執行結果送給awk處理

做爲信息傳送的一種方法,咱們能夠將一條shell命令的結果經過管道線(|)傳遞給awk處理:

例:示例awk處理shell命令的執行結果

who -u | awk '{printf("%s正在執行%s\n",2,1)}'

該命令將打印出註冊終端正在執行的程序名。

3.shell script程序讀awk的執行結果

爲 了實現shell script程序讀取awk執行的結果,咱們能夠採起一些特殊的方法,例如咱們能夠用變量名=`awk語句`的形式將awk執行的結果存放入一個 shell script變量。固然也能夠用管道線的方法將awk執行結果傳遞給shell script程序處理。

例:做爲傳送消息 的機制之一,UNIX提供了一個向其全部用戶傳送消息的命令wall(意思是write to all寫給全部用戶),該命令容許向全部工做中的用戶(終端)發送消息。爲此,咱們能夠經過一段shell批處理程序wall.shell來模擬這一程序 (事實上比較老的版本中wall就是一段shell批處理程序:

cat wall.shell
:
# @(#) wall.shell:發送消息給每一個已註冊終端
#
cat >/tmp/
#用戶錄入消息文本 who -u | awk '{print 2}' | while read tty
do
cat /tmp/>tty
done

在 這個程序裏,awk接受who -u命令的執行結果,該命令打印出全部已註冊終端的信息,其中第二個字段是已註冊終端的設備名,所以用awk命令析出該設備名,而後用while read tty語句循環讀出這些文件名到變量(shell script變量)tty中,做爲信息傳送的終結地址。

4.在awk中執行shell命令行----嵌入函數system()

system()是一個不適合字符或數字類型的嵌入函數,該函數的功能是處理做爲參數傳遞給它的字符串。system對這個參數的處理就是將其做爲命令處理,也就是說將其看成命令行同樣加以執行。這使得用戶在本身的awk程序須要時能夠靈活地執行命令或腳本。

例:下面的程序將使用system嵌入函數打印用戶編制好的報表文件,這個文件存放在名爲myreport.txt的文件中。爲簡約起見,咱們只列出了其END部分:

.
.
.
END {close("myreport.txt";system("lp myreport.txt";}

在這個示例中,咱們首先使用close語句關閉了文件myreport.txt文件,而後使用system嵌入函數將myreport.txt送入打印機打印。

寫 到這裏,我不得不跟朋友們說再見了,實在地說,這些內容仍然是awk的初步知識,電腦永遠是前進的科學,awk也不例外,本篇所能作的只是在你前行的漫漫 長途中鋪平一段小小開端,剩下的路還得靠你本身去走。老實說,若是本文真能給你前行的路上帶來些許的方便,那本人就滿足了!

如對本篇有任何疑問,請E-mail To:Chizlong@yeah.net或到主頁http://chizling.yeah.net中留言。


附錄:

1.awk的常規表達式元字符

\ 換碼序列
^ 在字符串的開頭開始匹配
在字符串的結尾開始匹配
. 與任何單個字符串匹配
[ABC] 與[]內的任一字符匹配
[A-Ca-c] 與A-C及a-c範圍內的字符匹配(按字母表順序)
[^ABC] 與除[]內的全部字符之外的任一字符匹配
Desk|Chair 與Desk和Chair中的任一個匹配
[ABC][DEF] 關聯。與A、B、C中的任一字符匹配,且其後要跟D、E、F中的任一個字符。
* 與A、B或C中任一個出現0次或屢次的字符相匹配
+ 與A、B或C中任何一個出現1次或屢次的字符相匹配
? 與一個空串或A、B或C在任何一個字符相匹配
(Blue|Black)berry 合併常規表達式,與Blueberry或Blackberry相匹配

2.awk算術運算符

運算符 用途
------------------
x^y x的y次冪
x**y 同上
x%y 計算x/y的餘數(求模)
x+y x加y
x-y x減y
x*y x乘y
x/y x除y
-y 負y(y的開關符號);也稱一目減
++y y加1後使用y(前置加)
y++ 使用y值後加1(後綴加)
--y y減1後使用y(前置減)
y-- 使用後y減1(後綴減)
x=y 將y的值賦給x
x+=y 將x+y的值賦給x
x-=y 將x-y的值賦給x
x*=y 將x*y的值賦給x
x/=y 將x/y的值賦給x x%=y 將x%y的值賦給x
x^=y 將x^y的值賦給x
x**=y 將x**y的值賦給x

3.awk容許的測試:

操做符 含義

x==y x等於y
x!=y x不等於y
x>y x大於y
x>=y x大於或等於y
xx<=y x小於或等於y?
x~re x匹配正則表達式re?
x!~re x不匹配正則表達式re?

4.awk的操做符(按優先級升序排列)

= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字符串連結,'x''y'變成"xy")
+ -
* / %
++ --

5.awk內置變量(預約義變量)

說明:表中v項表示第一個支持變量的工具(下同):A=awk,N=nawk,P=POSIX awk,G=gawk

V 變量 含義 缺省值
--------------------------------------------------------
N ARGC 命令行參數個數
G ARGIND 當前被處理文件的ARGV標誌符
N ARGV 命令行參數數組
G CONVFMT 數字轉換格式 %.6g
P ENVIRON UNIX環境變量
N ERRNO UNIX系統錯誤消息
G FIELDWIDTHS 輸入字段寬度的空白分隔字符串
A FILENAME 當前輸入文件的名字
P FNR 當前記錄數
A FS 輸入字段分隔符 空格
G IGNORECASE 控制大小寫敏感0(大小寫敏感)
A NF 當前記錄中的字段個數
A NR 已經讀出的記錄數
A OFMT 數字的輸出格式 %.6g
A OFS 輸出字段分隔符 空格
A ORS 輸出的記錄分隔符 新行
A RS 輸入的記錄他隔符 新行
N RSTART 被匹配函數匹配的字符串首
N RLENGTH 被匹配函數匹配的字符串長度
N SUBSEP 下標分隔符 "\034"

6.awk的內置函數

V 函數 用途或返回值
------------------------------------------------
N gsub(reg,string,target) 每次常規表達式reg匹配時替換target中的string
N index(search,string) 返回string中search串的位置
A length(string) 求串string中的字符個數
N match(string,reg) 返回常規表達式reg匹配的string中的位置
N printf(format,variable) 格式化輸出,按format提供的格式輸出變量variable。
N split(string,store,delim) 根據分界符delim,分解string爲store的數組元素
N sprintf(format,variable) 返回一個包含基於format的格式化數據,variables是要放到串中的數據
G strftime(format,timestamp) 返回一個基於format的日期或者時間串,timestmp是systime()函數返回的時間
N sub(reg,string,target) 第一次當常規表達式reg匹配,替換target串中的字符串
A substr(string,position,len) 返回一個以position開始len個字符的子串
P totower(string) 返回string中對應的小寫字符
P toupper(string) 返回string中對應的大寫字符
A atan(x,y) x的餘切(弧度)
N cos(x) x的餘弦(弧度)
A exp(x) e的x冪
A int(x) x的整數部分
A log(x) x的天然對數值
N rand() 0-1之間的隨機數
N sin(x) x的正弦(弧度)
A sqrt(x) x的平方根
A srand(x) 初始化隨機數發生器。若是忽略x,則使用system()
G system() 返回自1970年1月1日以來通過的時間(按秒計算)

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

linux 操做技巧 96例


1. 查看man文件...
nroff -man man/libnet.3 | less
有時候man文件不在系統目錄..這時候就能夠用上面的方式來查看非標準的man文件

2. 以不一樣的用戶身份運行程序...
su - username -c "where/is/command/line"
有時候須要運行特殊身份的程序...就可讓su來作...

3. 解壓bz文件
tar -jvxf some.bz
就是把tar的zvxf 改爲jvxf

4. 編輯/etc/inittab後直接生效的方法..
執行init q

5. 讓linux連續執行幾個命令,出錯中止
command1 && command2 && command3 ....

6. linux中的bg和fg管理
當咱們打ctrl+z的時候一個任務就被掛起(就是暫停),同時屏幕上返回一個數字,這時候能夠用 "bg %數字" 來把這個進程放到後臺執行...這個很適合在你忘了加&的時候進行補救...一樣 " fg %數字 "就能讓這個進程放到前臺來執行了...
job命令用來查看當前的被bg的進程...

7. ctrl+s與ctrl+q
ctrl-s 好象是從終端時代遺傳過來的東東, 流量控制, 用來暫停向終端發送數據的. ctrl-q 用來恢復恢復

8. 目錄統計教本
保存成total.sh ,而後用total.sh 絕對路徑,就會統計路徑下目錄的大小了
#!/bin/sh
du 1 --max-depth=1 | sort -n|awk '{printf "%7.2fM ----> %s\n",1/1024,2}'|sed 's:/.*/\([^/]\{1,\}\):\1:g'

9. grep不顯示自己進程
ps -aux|grep httpd|grep -v grep
經過再一次grep -v grep就能夠取消顯示你所執行的grep自己這個進程,-v參數是不顯示所列出的進程名.

10. 本身用的一個統計httpd的腳本
#!/bin/sh
while (true)
do
pstree |grep "*\[httpd\]"|sed 's/.*-\([0-9][0-9]*\)\*\[httpd\]/\1/'
sleep 3
done

11. 解壓rpm包中的文件
cat gnome-libs-1.4.1.2.90.22.i386.rpm | rpm2cpio | pax -r

12. 去掉apache的manual目錄中的全部.en的後綴名
進入到manual目錄
find ./ -regex .*\.en|awk -F. '{ printf "mv %s.%s.%s.%s %s.%s.%s\n",1,2,3,4,1,2,3}'|sh

13. linux裏如何映射windows裏的硬盤
mount -t smbfs -o username=xxx,password=xxx //winxp_ip_or_hostname/sharename /local_path
fc2中已經不須要-t smbfs這個參數了.

14. linux裏如何查看可用的硬盤設備
fdisk -l

15. 命令行下製做ISO
用法: mkisofs -a -I -J -r -o filename.iso /目錄
用途: 將linux下某個目錄中的全部文件作成iso鏡像.並且我加上了參數,能夠保證你作出來的光盤是在windows下也能夠用的 (iso是有文件大小限制的...具體多少偶忘記了)

16. Linux下ISO的虛擬方法
步驟以下:
1. 把 /dev/cdrom 刪除,而後運行 ln -s /dev/loop7 /dev/cdrom
2. losetup /dev/loop7 xxx.iso
3. mount /mnt/cdrom
如何換盤:
1. losetup -d /dev/loop7 ;目的是取消這個設備
2. losetup /dev/loop7 yyy.iso ;新的iso文件

17. hosts的用法
host 可以用來查詢域名,然而它能夠獲得更多的信息.host -t mx linux.com能夠查詢出linux.com的MX記錄,以及處理mail的host的名字.host -l linux.com會返回全部註冊在linux.com下的域名.host -a linux.com則會顯示這個主機的全部域名信息.

18. *.bz2文件如何解壓縮
使用tar -I 或者bunzip2命令均可以.

19. RPM常見用法
安裝rpm包時顯示進度並校驗包的正確性
用-vh參數:
如 rpm -ivh ipchains-1.3.6-1.i386.rpm 若是用glint或xrpm則沒必要.
直接經過ftp來安裝rpm包 如 rpm -i ftp://ftp.xxx.xxx
校驗全部的rpm包,查找丟失的文件 rpm -Va
查找一個文件屬於哪一個rpm包 如 rpm -qf /usr/bin/who
列出一個rpm包的描述信息 如 rpm -qpi mon-0.37j-1.i386.rpm
列出一個rpm包的文件信息 如 rpm -qpl mon-0.37j-1.i386.rpm

20. 查看系統監聽的服務
用法: netstat -ln
解釋: "l"表示顯示當前系統監聽的端口信息;"n"表示端口按照端口號來顯示,而不轉換爲service文件中定義的端口名;若但願瞭解各個端口都是由哪些進程監聽則能夠使用p參數.

21. 查看系統運行的進程
用法: ps -auxw
解釋: 其中參數"a"表示顯示系統中全部用戶的的進程;"u"表示輸出進程用戶所屬信息;"x"表示也顯示沒有控制檯的進程;若顯示行太長而被截斷則能夠使用f參數.

22. Linux賬號搬家
對於新帳號->
保證將要加入系統的新賬號放在新的位置上,這經過修改/etc/default/useradd文件中的HOME值來實現. 如: HOME=/home2 使新增賬號的主目錄建在/home2下.
將已有賬號移至新的位置->
首先,將已有賬號的主目錄連帶目錄屬性拷至新位置,可用下面命令:
cp -a /home /home2或cp -rpd /home /home2
而後,修改/etc/passwd文件中相應記錄的home_directory域爲/home2/username.
這樣兩步已將舊賬號移至新位置.確保無誤後,可刪去舊賬號的舊主目錄以騰出原文件系統的空間.

23. 啓動時屏幕顯示的信息
Linux 啓動時屏幕顯示的信息來不及看清就一閃而過,若是對這些信息感興趣的話能夠在啓動完後用命令 dmesg 查看.

24. GRUB引導恢復小法
用啓動盤或安裝盤(linux rescue)進linux
sh# grub
grub> root (hdx,y)
grub> setup (hd0)
重啓
說 明: 若是成功會有一個successful......這裏的x,若是是一個盤,就是0.若是你所安裝的linux的根分區在第二個硬盤上,那x就是1了;y 就是裝有linux系統所在的根分區.setup (hd0)就是把GRUB寫到硬盤的MBR上.若是我知道個人linux裝在第一個硬盤上,但我不知道裝在哪一個分區上,就能夠先輸入root (hd0,而後用[TAB]鍵來補齊,而後就明白了.

25. 測試磁盤性能
用法: hdparm -tT /dev/hd?
例如: hdparm -tT /dev/hda (測試第一個物理硬盤的速度)

26. 將內網的服務對外開放
將192.168.1.2上的8888端口映射到192.168.1.3的8888端口
#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8888 -j DNAT --to-destination 192.168.1.2:8888
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.2 -p tcp -m tcp --dport 8888 -j SNAT --to-source 192.168.1.3
#iptables -A INPUT -p tcp --dport 8888 -i eth0 -j ACCEPT (視狀況而加)

27. 關閉"討厭"的Linux按鍵Beep聲
vi /etc/.inputrc 增長下面一行
set bell-style none

28. 開機進入圖形/文本登錄方式
vi /etc/inittab
id:x:initdefault:
x=3:文本方式 x=5:圖形方式

29. 在GRUB中限制系統可以使用的內存數量
限制Linux只能使用120MB內存
title Red Hat Linux (2.4.19)
root (hd0,1)
kernel /boot/vmlinuz-2.4.19 ro root=/dev/hda2 mem=120M
initrd /boot/initrd-2.4.18-14.img

30. 如何查找某條命令的相關庫文件
在Linux環境下經過ldd命令便可實現,在控制檯執行:
ldd /bin/ls
便可獲得/bin/ls命令的相關庫文件列表.

31. 只列子目錄(文件)
ls -F | grep /
你也能夠在.bashrc(針對bash)中把該命令做成alias,之後只要敲入sub就能夠實現只列子目錄的功能.  alias sub = "ls -F | grep /" 一樣,ls -l | grep ^-則是隻列普通文件.

32. 計算目錄下的文件及子目錄
ls -al | wc -l

33. RedHat 下顯示彩色目錄列表
ls -color 能夠顯示彩色目錄列表,其中:  藍色→目錄  綠色→可執行文件  紅色→壓縮文件  淺藍色→連接文件  灰色→其餘文件
一樣你還能夠試試ls --color(比前面多-),看看二者的差異吧

34. 列目錄時顯示中文文件名
在沒有打補丁的Linux系統中,咱們用ls列目錄,發現中文文件名都成了?號.咱們能夠使用--show-control-chars命令選項來顯示.
ls --show-control-chars

35. 改變當前路徑下全部目錄和文件的全部權
chown -R owner[.group] *
也能夠用find命令來實現: find . -exec chown owner[.group] {} ;

36. 改變全部子目錄及文件的屬性
在你要改變屬性的目錄下,輸入命令:chmod -R 777 *
就能夠改變下面全部子目錄及文件的屬性,不過使用這個命令的時候要特別當心,要是在根目錄下打入這個命令,你全部文件的屬性都將改變,這就會引發很大的安全性問題.

37. 使用nohup命令
若是你想進程在你退出系統後還能執行,能夠使用nohup命令.
如:  nohup tar cf /dev/tape /home &
你退出後再從新登陸的話,使用ps命令會發現進程還在執行.

38. 從新啓動
Ctrl+Alt+Del 或 init 6 或 shutdown -r now

39. 快速查找文件
查找文件能夠用find,但最好是用locate.速度快,參數少.
locate filename
它是在一個數據庫裏面查找.因此,要記得常常用updatedb命令更新數據庫.通常地,咱們是在crontab裏面加一句,讓機子在天天深夜更新數據庫.
另外,快速查找命令文件,能夠使用whereis.
例如:  whereis rpm

40. 查找Linux命令
若是你想實現某種功能,可是不知道該使用什麼命令.你能夠試試apropos命令,它也許能幫你找到你想要的命令.例如: 你要"查找"文件,又不知道用什麼命令,你能夠敲入下面的命令:
apropos search

41. 在同一個命令行上同時執行多條命令
用分號分隔.如編譯一個源文件:
#./configure ; make ; make install

42. 用gzip(gunzip)壓縮(解壓)同一目錄下的多個文件
gzip * 或者 gunzip *

43. 在使用less或more時,直接啓動vi
在less或者more中打入v鍵,會當即啓動vi編輯器,能夠對文件進行編輯.

44. 在使用mail中啓動vi
若是你以爲用mail發送郵件編輯起來很不方便,你能夠在正文的頂格輸入~v,啓動vi進行編輯,編輯完後退出vi,回到mail.

45. 觀察文件大小變化
使用watch命令,能夠反覆執行命令.和ls配合,能夠達到觀察某文件大小變化的效果.
watch ls -| file.name

46. 觀看binary文件中的字符串
strings binaryfile

47. 重裝Win 9x後lilo失效沒法啓動Linux
只須先用軟盤啓動Linux而後運行一次lilo便可.對於RedHat能夠用命令mkbootdisk來製做啓動盤,例如:  mkbootdisk --device /dev/fd0 2.4.20
其中2.4.20是/lib/modules下的一個目錄.

48. 去掉引導區內的lilo信息
安裝lilo後若是硬盤數量或分區狀況有改變的話將致使硬盤不能啓動,這時只需用軟盤啓動DOS再運行fdisk/mbr便可.

49. 把DOS/Windows改成缺省操做系統
RedHat 把Linux做爲lilo缺省操做系統,即出現 boot: 提示符後直接回車啓動Linux.若是想改成DOS/Windows,修改文件/etc/lilo.conf,把有關啓動DOS的部分放在前面,再運行一 次lilo便可.也能夠在lilo.conf的配置文件前面加上 Default=dos 其中DOS是DOS/Windows的label

50. 如何使用.iso文件
許多Linux發行版本都有.iso的光盤鏡像文件,能夠用來刻錄光盤.咱們也能夠在Linux系統下直接使用.  mount -t iso9660 xxxxx.iso /any/path/if/u/like -o loop

51. 顯示文件的類型
用命令 file 能夠使你知道某個文件到底是ELF格式的可執行文件,仍是shell script文件或是其餘的什麼格式.  file filename

52. 解壓.tar.gz文件
xxxx.tar.gz文件使用tar帶zxvf參數,能夠一次解壓開.  tar zxvf xxxx.tar.gz

53. 後臺運行程序
能夠在程序後面加"&"符號,讓程序在後臺運行.例如: 你想用updatedb更新文件路徑數據庫,又不影響你其餘的工做.能夠:  updatedb &

54. 強行退出 X
有時候在 X 裏因爲程序出錯鼠標鍵盤都不起做用,這時候不用着急,由於在Linux下幾乎不會像在Win 95裏那樣惡性死機,你只須同時按下Ctrl+Alt+BackSpace鍵就能夠回到字符界面下了.

55. 壓縮可執行文件
能夠使用gzexe壓縮可執行文件,壓縮後的可執行文件仍然能夠直接執行.使用本方法能夠達到節省磁盤空間的目的(若是你真的須要的話).  gzexe gawk

56. 處理文件名內含有特殊字符的文件
如 果有一個文件名叫-file,若是想刪除它,鍵入 rm -file 會顯示invalid option,原來因爲文件名的第一個字符爲"-",Linux把文件名當作選項了,能夠加--解決這個問題,如rm -- -file.若是是其餘特殊字符的話能夠在特殊字符前加一個\,或者用雙引號把整個文件名括起來.

57. 快速進入目錄
鍵入 cd ~ 可進入用戶的home目錄;鍵入 cd - 可進入上一個進入的目錄.

想所有刪除以.開頭的file或dir時你會如何幹?
Wrong-> rm -r /tmp/.*
Correct-> rm -r /tmp/\.*

58. 修改網卡MAC地址
ifconfig eth0 down
ifconfig eth0 hw ether 00:AA:BB:CCD:EE
ifconfig eth0 up
上面的是臨時性的你能夠加入rc.local讓它開機自動執行

59. 查看網卡工做狀態
#mii-tool -v
eth0: no link
product info: vendor 00:00:00, model 0 rev 0
basic mode: autonegotiation enabled
basic status: no link
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
SIOCGMIIPHY on 'eth1' failed: Operation not supported

60. 如何解決sendmail和sm-client啓動爆慢的問題!
形成sendmail和sm-client啓動慢是由於解析的問題,解決方法將本身的主機名加入/etc/hosts中便可,例如個人主機名是linuxbox.localdomain則/etc/hosts中應該有一條
192.168.100.1 linuxbox.localdomain linuxbox

61. 信息加藍色標記的sed語法...
sed -e "s/^-.*/[color=blue]&[\/color]/g" tip>./new

62. 將一個服務加到自啓動運行等級中
chkconfig --add httpd
chkconfig --level 3 httpd on
就是把httpd加到chkconfig管理中,並加在第三層啓動

63. 在終端下調音量
aumix

64. 將man文件導出爲文件並去掉控制符
man command | col -b >col.txt

65. col -b就是去掉控制符的

66. 查看文件夾大小
du ./ --max-depth=1
--max-depth=1是控制顯示深度

67. 光驅彈出,彈入
eject -r 彈出
eject -t 彈入

68. 顯示最近登入用戶
last

69. chkconfig 能夠設置系統啓動配置
chkconfig httpd on
chkconfig vsftpd on
.......

70. service 能夠控制服務的起停
service vsftpd restart
service sendmail stop
......

71. 禁止文件寫(包括root)
chattr +i filename

72. 以實時滾動方式查看系統syslog
tail -f /var/log/messages

73. 清空日誌:
cat /dev/null > *.log
可加在crontab中完成日誌的清空做業。

74. 殺死全部俱指定名字的進程
killall processname

75. 查找含特定字符串的文件
例如查找當前目錄下含有"the string you want find..."字符串的文件
find <路徑> [-name xxx] | xargs grep "字串" ...

76. 查看進程
ps -e
ps -ef
是不一樣的.你會發現不一樣的當前run的name.若是發現不一樣,就說明有可能有人在你的機器做了一些動做

77. 利用xargs對管道輸出的信息使用特定程序進行處理
find ~root|xargs chmod a-x

78. 列出遠程主機(windows)的共享目錄
smbclient -L X.X.X.X(IP) -U 用戶名

79. 把遠程主機的共享目錄temp掛到/mnt
mount -t smbfs -o username=用戶名 //X.X.X.X(IP)/temp /mnt

80. 查看win32(fat)分區
fdisk -l (列出分區)(例)/dev/hda6 5000000 fat32
咱們要看到這個分區,則:
mkdir win_fat
mount -t vfat /dev/hda6 /win_fat

81. 查找
文件夾
find /path/ \( -type d -name ".*" -exec mv {} ./path \; \)
文件
find /path/ \( -type f -name ".*" -exec mv {} /path/ \; \)

82. 顯示該進程打開的文件
lsof -p pid

83. 顯示鏈接打開的文件
lsof -i ◎[ip|hostname] port

84. 顯示打開這個目錄的文件
lsof directory
(能夠在想umount某一目錄不成功的時候,查看是否是被別的文件打開了)

85. 顯示打開這個文件的進程
lsof file

86. 在ksh下用vi來編輯全部執行過的命令
ksh下執行set -o vi
或者在別的shell下執行ksh -o vi

87. more或者man的時候能夠直接使用vi中的一些操做
好比j,k,CTRL+f CTRL+b,/ 等等

88. 想把man的內容導出到文本麼?
man ls | col -b >a.txt

89. csh下"^"的一個小用法
% touch 11
% ^11^22
touch 22
%
不過只能替換第一個匹配到的字符串,第二個就匹配不到了

90. tar+compress
tar cvf - ./dir | compress -c >dir.tar.Z
uncompress -c dir.tar.Z|tar xvf -

91. 當前目錄下文件太多,用grep會報參數超長...
ls -al|wc -l
12323
grep 123123123 *
Arguments too long.
find . -name "*" | xargs grep 123123123

92. 搜索兩個字符串(AAA 與 BBB)很簡單, 用管道就成
grep AAA file |grep BBB = cat file|grep AAA|grep BBB
搜索兩個字符串(AAA 或 BBB),能夠作兩次 grep AAA file, grep BBB file
也能夠一鼓作氣:cat file |fgrep 'AAA (回車!)
grep -E 'AAA|BBB' file-name

93. 查看系統中已有的用戶
cut -f1 -d: /etc/passwd

94. touch filename
若是filename已存在,則改變文件的日期、時間;
若是filename不存在,則建立一個新的空文件。

95. du -sm 察看目錄大小

96. num-lock default on
any of /etc/rc.d/*
for t in 1 2 3 4 5 6 7 8
do
setleds +num < /dev/ttyt > /dev/null
done
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

122 一些奇怪的Unix 指令名字的由來awk = "Aho Weinberger and Kernighan"   這個語言以做者 Al Aho, Peter Weinberger 和 Brian Kernighan 的姓來命名。   grep = "Global Regular Expression Print"   grep 來自 ed 的列印全部符合某 pattern 指令   g/re/p   "re" 表明 regular expression   fgrep = "Fixed GREP".   fgrep □找固定的字串。"f" 不是表明 "fast" - 事實上, "fgrep foobar *.c" 一般比 "egrep foobar *.c" 來得慢(有點意外吧, 不信的話, 本身試試嘍)。   儘管如此,Fgrep 仍然有可取之處,在檔案中搜尋字串的時候,Fgrep 能處理的字串數目較 egrep 多。   egrep = "Extended GREP"   egrep 用比 grep 更 fancy 的 regular rexpression。許多人始終只用 egrep,由於它用的 algorithm 比 grep 或 fgrep 用的高級,並且一般是三個程式中最快的。   cat = "CATenate"   catenate 是一個艱深難懂的單字,意思是"把它連成一串", 這就是"cat" 這個指令對一個或多個檔案所作的處理。   請不要跟 C/A/T 混淆了,C/A/T 是指電腦輔助排版系統(Computer Aided Typesetter)。   gecos = "General Electric Comprehensive Operating Supervisor"   不過,當通用電器 (GE) 的大型系統部門賣給 Honeywell 的時候,Honeywell 就把 GECOS 的 E 拿掉了。   目前 Unix 的密碼檔裏面仍保有 "pw_gecos" 這個欄位。這個名字是從古早的年代沿用過來的。   Dennis Ritchie 曾經說過:   "有時候咱們會把印表輸出或整批工做丟到 GCOS 機器。密碼檔裏面的 gcos 欄位是用來隱藏 $IDENT 卡片上的資訊,這樣作不夠優雅"。   nroff = "New ROFF"   troff = "Typesetter new ROFF"   這些字都是從"roff"衍生的, roff 是重寫 Multics 上的 runoff 程式得來的 (runoff 的意思就是"印出文件")。  tee = T   這是管線工人的術語,表明 T 型的管線分叉器。   bss = "Block Started by Symbol" (由符號啓始的區塊)   Dennis Ritchie 曾說過:    這個縮寫也許有其餘說法,但事實上咱們採用這個縮寫的本意是"Block Started by Symbol"。它是 FAP 上的虛擬指令,FAP (Fortran Assembly [-er?] Program) 是指 IBM 704-709-7090-7094   這種機型的組譯器。這個指令可定義本身的標號,而且預留必定數目的字組空間。還有另外一個虛擬指令 BES,是 "Block Ended by Symbol",跟 BSS 指令幾乎同樣,不一樣點在於標號是定義在預留字組   空間尾端的位址 + 1 的地方。在這些機器上,Fortran 的陣列是以反方向儲存,並且陣列的索引是從 1 算起。   這種用法是合理的,由於這跟 UNIX 上標準的程式載入器同樣,程式碼當中並不是真的放入這一整塊預留空間,而是先用一個數目表示,在載入時才真的把所需的預留空間定出來。   biff = "BIFF"   這個指令是用來設定當您有新郵件進來時,是否要通知您。這是柏克萊大學校園內一隻狗的名字。   我能夠肯定這個名稱的起源,若是您有興趣的話,Biff 是 HeidiStettner 養的寵物,想當年 Heidi (還有我,跟 Bill Joy) 都仍是UCB 的研究生時,早期的 BSD 版本還在發展中。Biff 受到流連於   Evans Halls 這些人的喜好,也由於它會對前來的郵差吠叫而聞名;所以就以 biff 看成指令的名稱。   (這是卡內基美濃大學的 Eric Cooper 證明的)  rc (像是 ".cshrc" 或 "/etc/rc" 中的 rc 這兩個字母) = "RunCom"    "rc" 是取自 "runcom", 來自麻省理工學院在 1965 年發展的 CTSS系統。相關文獻曾記載這一段話: '具備從檔案中取出一系列命令來執行的功能;這稱爲 "run commands" 又稱爲 "runcom",而這種檔案又稱爲一個 runcom (a runcom)。'   Brian Kernighan 與 Dennis Ritchie 告訴 Vicki Brown 說: "rc" 也是Plan 9 做業系統 shell 的名字。   Perl = "Practical Extraction and Report Language"   Perl = "Pathologically Eclectic Rubbish Lister"   Perl是 Larry Wall 所發展的一種至關受歡迎的語言, Perl 在處文字,   process,與檔案時很是便利,能夠說是兼得 shell 與 C 之長。

相關文章
相關標籤/搜索