linux命令備忘錄
阿新 • • 發佈:2018-12-14
系統
硬體 | 狀態資訊 | 使用者 | 限制 | 執行級別 | root 密碼 | 編譯核心
正在執行的核心和系統資訊# uname -a # 獲取核心版本(和BSD版本)
# lsb_release -a # 顯示任何 LSB 發行版版本資訊
# cat /etc/SuSE-release # 獲取 SuSE 版本
# cat /etc/debian_version # 獲取 Debian 版本
使用 /etc/
DISTR
-release 其中
DISTR(發行代號)=
lsb (Ubuntu), redhat, gentoo, mandrake, sun (Solaris), 等等。
# uptime # 顯示系統開機執行到現在經過的時間
# hostname # 顯示系統主機名
# hostname -i # 顯示主機的 IP 地址
# man hier # 描述檔案系統目錄結構
# last reboot # 顯示系統最後重啟的歷史記錄
硬體資訊
核心檢測到的硬體資訊# dmesg # 檢測到的硬體和啟動的訊息
# lsdev # 關於已安裝硬體的資訊
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # 讀取 BIOS 資訊
Linux
# cat /proc/cpuinfo # CPU 訊息
# cat /proc/meminfo # 記憶體資訊
# grep MemTotal /proc/meminfo # 顯示實體記憶體大小
# watch -n1 'cat /proc/interrupts' # 監控核心處理的所有中斷
# free -m # 顯示已用和空閒的記憶體資訊 (-m 為 MB)
# cat /proc/devices # 顯示當前核心配置的裝置 # lspci -tv # 顯示 PCI 裝置 # lsusb -tv # 顯示 USB 裝置 # lshal # 顯示所有裝置屬性列表 # dmidecode # 顯示從 BIOS 中獲取的硬體資訊
FreeBSD
# sysctl hw.model # CPU 訊息
# sysctl hw # 得到很多硬體資訊
# sysctl vm # 虛擬記憶體使用情況
# dmesg | grep "real mem" # 實體記憶體
# sysctl -a | grep mem # 核心記憶體的設定和資訊
# sysctl dev # 顯示當前核心配置的裝置 # pciconf -l -cv # 顯示 PCI 裝置 # usbdevs -v # 顯示 USB 裝置 # atacontrol list # 顯示 ATA 裝置
顯示狀態資訊
以下的命令有助於找出正在系統中執行著的程式。# top # 顯示和更新使用 cpu 最多的程序
# mpstat 1 # 顯示程序相關的資訊
# vmstat 2 # 顯示虛擬記憶體的狀態資訊
# iostat 2 # 顯示 I/O 狀態資訊(2 秒 間隙)
# systat -vmstat 1 # 顯示 BSD 系統狀態資訊(1 秒 間隙)
# systat -tcp 1 # 顯示 BSD TCP 連線資訊(也可以試試 -ip) # systat -netstat 1 # 顯示 BSD 當前網路連線資訊 # systat -ifstat 1 # 顯示 BSD 當前網絡卡頻寬資訊 # systat -iostat 1 # 顯示 BSD CPU 和磁碟使用情況 # tail -n 500 /var/log/messages # 顯示最新500條核心/系統日誌的資訊 # tail /var/log/warn # 顯示系統警告資訊(看syslog.conf)
使用者
# id # 顯示當前使用者和使用者組的 ID
# last # 列出目前與過去登入系統的使用者相關資訊
# who # 顯示目前登入系統的使用者資訊
# groupadd admin # 建立新組"admin"和新增新使用者 colin 並加入 admin 使用者組(Linux/Solaris)
# useradd -c "Colin Barschel" -g admin -m colin
# userdel colin # 刪除使用者 colin(Linux/Solaris)
# adduser joe # FreeBSD 新增使用者 joe(互動式) # rmuser joe # FreeBSD 刪除使用者 joe(互動式) # pw groupadd admin # 在 FreeBSD 上使用 pw # pw groupmod admin -m newmember # 新增新使用者到一個組 # pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh # pw userdel colin; pw groupdel admin
加密過的密碼儲存在 /etc/shadow (Linux and Solaris) 或 /etc/master.passwd (FreeBSD) 中. 如果手動修改了 master.passwd,需要執行
# pwd_mkdb -p master.passwd
來重建資料庫。
使用 nologin 來臨時阻止所有使用者登入(root除外)。使用者登入時將會顯示 nologin 中的資訊。
# echo "Sorry no login now" > /etc/nologin # (Linux)
# echo "Sorry no login now" > /var/run/nologin # (FreeBSD)
限制
某些應用程式需要設定可開啟最大檔案和 socket 數量(像代理伺服器,資料庫)。 預設限制通常很低。Linux
每 shell/指令碼
shell 的限制是受ulimit
支配的。使用
ulimit -a
可檢視其狀態資訊。 舉個例子,改變可開啟最大檔案數從 1024 到 10240,可以這麼做:
# ulimit -n 10240 # 這隻在shell中有用
ulimit
命令可以使用在指令碼中來更改對此指令碼的限制。
每 使用者/程序
登入使用者和應用程式的限制可以在/etc/security/limits.conf
中配置。舉個例子:
# cat /etc/security/limits.conf
* hard nproc 250 # 限制所有使用者程序數
asterisk hard nofile 409600 # 限制應用程式可開啟最大檔案數
系統級
用sysctl來設定核心限制。要使其永久,可以在/etc/sysctl.conf
中進行配置。
# sysctl -a # 顯示所有系統限制
# sysctl fs.file-max # 顯示系統最大檔案開啟數
# sysctl fs.file-max=102400 # 更改系統最大檔案開啟數
# cat /etc/sysctl.conf
fs.file-max=102400 # 在 sysctl.conf 中的永久項
# cat /proc/sys/fs/file-nr # 在使用的檔案控制代碼數
FreeBSD
每 shell/指令碼
在 csh 或 tcsh 中使用limits
命令,在 sh 或 bash 中使用
ulimit
命令。
每 使用者/程序
在/etc/login.conf
中配置登入後的預設限制。未作限制的值為系統最大限制值。
系統級
核心限制同樣使用 sysctl 來設定。永久配置,在/etc/sysctl.conf
或
/boot/loader.conf
中。其語法與 Linux 相同,只是鍵值不同。
# sysctl -a # 顯示所有系統限制
# sysctl kern.maxfiles=XXXX # 最大檔案描述符數
kern.ipc.nmbclusters=32768 # 在 /etc/sysctl.conf 中的永久項
kern.maxfiles=65536 # Squid 通常用這個值
kern.maxfilesperproc=32768
kern.ipc.somaxconn=8192 # TCP 列隊。apache/sendmail 最好用這個值
# sysctl kern.openfiles # 在使用的檔案描述符數 # sysctl kern.ipc.numopensockets # 已經開啟的 socket 數目
詳情請看 FreeBSD 手冊 11章。
Solaris
在/etc/system
中的下列設定,會提高每個程序可以開啟最大檔案描述符的數量:
set rlim_fd_max = 4096 # 一個程序可以開啟檔案描述符的"硬"限制
set rlim_fd_cur = 1024 # 一個程序可以開啟檔案描述符的"軟"限制
執行級別
Linux
一旦核心載入完成,核心會啟動init
程序,然後執行
rc
指令碼,之後執行所有屬於其執行級別的命令指令碼。這些指令碼都儲存在 /etc/rc.d/rcN.d 中(N代表執行級別),並且都建立著到 /etc/init.d 子目錄中命令指令碼程式的符號連結。
預設執行級別配置在 /etc/inittab 中。它通常為 3 或 5:
# grep default: /etc/inittab id:3:initdefault:可以使用
init
來改變當前執行級別。舉個例子:
# init 5 # 進入執行級別 5
執行級別列表如下:
- 0 系統停止
- 1 進入單使用者模式(也可以是 S)
- 2 沒有 NFS 特性的多使用者模式
- 3 完全多使用者模式(正常操作模式)
- 4 未使用
- 5 類似於級別3,但提供 XWindow 系統登入環境
- 6 重新啟動系統
chkconfig
工具控制程式在一個執行級別啟動和停止。
# chkconfig --list # 列出所有 init 指令碼
# chkconfig --list sshd # 檢視 sshd 在各個執行級別中的啟動配置
# chkconfig sshd --level 35 on # 對 sshd 在級別 3 和 5 下建立啟動項
# chkconfig sshd off # 在所有的執行級別下禁用 sshd
Debian 和基於Debian 發行版像 Ubuntu 或 Knoppix 使用命令
update-rc.d
來管理執行級別指令碼。預設啟動為 2,3,4 和 5,停止為 0,1 和 6。
# update-rc.d sshd defaults # 設定 sshd 為預設啟動級別
# update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 . # 用顯示引數
# update-rc.d -f sshd remove # 在所有的執行級別下禁用 sshd
# shutdown -h now (或者 # poweroff) # 關閉停止系統
FreeBSD
BSD 啟動步驟不同於 SysV, 她沒有執行級別。她的啟動狀態(單使用者,有或沒有 XWindow)被配置在/etc/ttys
中。所有的系統指令碼都位於
/etc/rc.d/
中,第三方應用程式位於
/usr/local/etc/rc.d/
中。service 的啟動順序被配置在
/etc/rc.conf
和
/etc/rc.conf.local
中。預設行為可在
/etc/defaults/rc.conf
中進行配置。 這些指令碼至少響應 start|stop|status.
# /etc/rc.d/sshd status
sshd is running as pid 552.
# shutdown now # 進入單使用者模式
# exit # 返回到多使用者模式
# shutdown -p now # 關閉停止系統
# shutdown -r now # 重新啟動系統
同樣可以使用程序
init
進入下列狀態級別。舉個例子:
# init 6
為重啟。
- 0 停止系統並關閉電源 (訊號
USR2
) - 1 進入單使用者模式 (訊號
TERM
) - 6 重新啟動 (訊號
INT
) - c 阻止進一步登入 (訊號
TSTP
) - q 重新檢查 ttys(5) 檔案 (訊號
HUP
)
重設 root 密碼
Linux 方法 1
在引導載入器(lilo 或 grub)中,鍵入如下啟選項:init=/bin/sh核心會掛載 root 分割槽,程序
init
會啟動 bourne shell 而不是
rc
,然後是執行級別。使用命令
passwd
設定密碼然後重啟。別忘了需要在單使用者模式下做這些動作。
如果重啟後 root 分割槽被掛載為只讀,重新掛在它為讀寫:
# mount -o remount,rw /
# passwd # 或者刪除 root 密碼 (/etc/shadow)
# sync; mount -o remount,ro / # sync 在重新掛在為只讀之前 sync 一下
# reboot
FreeBSD 和 Linux 方法 2
FreeBSD 不會讓你這麼做。解決方案是用其他作業系統(像系統緊急修復光碟)掛載 root 分割槽,然後更改密碼。- 用 live cd 或安裝盤啟動進入修復模式後,會得到一個 shell。
- 用 fdisk 查詢 root 分割槽。比如:fdisk /dev/sda
- 掛載它並使用 chroot 命令:
# mount -o rw /dev/ad4s3a /mnt
# chroot /mnt # 改變程式執行時所參考的根目錄位置為 /mnt
# passwd
# reboot
核心模組
Linux
# lsmod # 列出所有已載入核心的模組
# modprobe isdn # 載入 isdn 模組
FreeBSD
# kldstat # 列出所有已載入核心的模組
# kldload crypto # 載入 crypto 模組
編譯核心
Linux
# cd /usr/src/linux
# make mrproper # 清除所有東西,包括配置檔案
# make oldconfig # 從當前核心配置檔案的基礎上建立一個新的配置檔案
# make menuconfig # 或者 xconfig (Qt) 或者 gconfig (GTK)
# make # 建立一個已壓縮的核心映像檔案
# make modules # 編譯模組
# make modules_install # 安裝模組 # make install # 安裝核心 # reboot
FreeBSD
要改變和重建核心,需要拷貝源配置檔案然後編輯它。當然也可以直接編輯GENERIC
檔案。
# cd /usr/src/sys/i386/conf/ # cp GENERIC MYKERNEL # cd /usr/src # make buildkernel KERNCONF=MYKERNEL # make installkernel KERNCONF=MYKERNEL要重建完全的作業系統:
# make buildworld # 構建完全的系統,但不是核心
# make buildkernel # 使用 KERNCONF 配置檔案編譯核心
# make installkernel
# reboot
# mergemaster -p # 建立臨時根環境並比對系統配置檔案
# make installworld
# mergemaster # 升級所有配置和其他檔案
# reboot
對於源的一些小改動,有時候簡單的命令就足夠了:
# make kernel world # 編譯並安裝核心和系統
# mergemaster
# reboot
程序
列表 | 優先順序 | 後臺/前臺 | Top | Kill
程序列表
PID是每個程序唯一號碼。使用ps
獲取所有正在執行的程序列表。
# ps -auxefw # 所有正在執行程序的詳盡列表
然而,更典型的用法是使用管道或者
pgrep
:
# ps axww | grep cron
586 ?? Is 0:01.48 /usr/sbin/cron -s
# ps aux | grep 'ss[h]' # Find all ssh pids without the grep pid
# pgrep -l sshd # 查詢所有程序名中有sshd的程序ID
# echo $$ # The PID of your shell
# fuser -va 22/tcp # 列出使用埠22的程序
# fuser -va /home # 列出訪問 /home 分割槽的程序
# strace df # 跟蹤系統呼叫和訊號 # truss df # 同上(FreeBSD/Solaris/類Unix) # history | tail -50 # 顯示最後50個使用過的命令
優先順序
用renice
更改正在執行程序的優先順序。負值是更高的優先順序,最小為-20,其正值與 "nice" 值的意義相同。
# renice -5 586 # 更強的優先順序
586: old priority 0, new priority -5
使用
nice
命令啟動一個已定義優先順序的程序。 正值為低優先順序,負值為高優先順序。確定你知道
/usr/bin/nice
或者使用 shell 內建命令(
# which nice
)。
# nice -n -5 top # 更高優先順序(/usr/bin/nice)
# nice -n 5 top # 更低優先順序(/usr/bin/nice)
# nice +5 top # tcsh 內建 nice 命令(同上)
nice 可以影響 CPU 的排程,另一個實用命令
ionice
可以排程磁碟 IO。This is very useful for intensive IO application which can bring a machine to its knees while still in a lower priority. 此命令僅可在 Linux (AFAIK) 上使用。你可以選擇一個型別(idle - best effort - real time),它的 man 頁很短並有很好的解釋。
# ionice c3 -p123 # 給 pid 123 設定為 idle 型別
# ionice -c2 -n0 firefox # 用 best effort 型別執行 firefox 並且設為高優先順序
# ionice -c3 -p$$ # 將當前的程序(shell)的磁碟 IO 排程設定為 idle 型別
例中最後一條命令對於編譯(或除錯)一個大型專案會非常有用。每一個運行於此 shell 的命令都會有一個較低的優先順序,但並不妨礙這個系統。$$ 是你 shell 的 pid (試試 echo $$)。
前臺/後臺
當一個程序在 shell 中已執行,可以使用[Ctrl]-[Z] (^Z)
,
bg
和
fg
來 調入調出前後臺。舉個例子:啟動 2 個程序,調入後臺。使用
jobs
列出後臺列表,然後再調入一個程序到前臺。
# ping cb.vu > ping.log
^Z # ping 使用 [Ctrl]-[Z] 來暫停(停止)
# bg # 調入後臺繼續執行
# jobs -l # 後臺程序列表
[1] - 36232 Running ping cb.vu > ping.log
[2] + 36233 Suspended (tty output) top
# fg %2 # 讓程序 2 返回到前臺執行
使用
nohup
開啟一個持續執行的程序直到 shell 被關閉(避免結束通話)。
# nohup ping -i 60 > ping.log &
Top
top
程式用來實時顯示系統中各個程序的執行資訊。
# top當
top
在執行的時候,按下
h
鍵會顯示幫助畫面。常用鍵如下:
- u [使用者名稱] 只顯示屬於此使用者的程序。使用 + 或者空白可以檢視所有使用者
- k [PID] 結束 PID 程序
- 1 顯示所有程序狀態資訊(只有Linux)
- R 將當前排序倒轉
Kill命令與訊號
使用kill
或
killall
終止或傳送一個訊號給程序。
# ping -i 60 cb.vu > ping.log &
[1] 4712
# kill -s TERM 4712 # 同 kill -15 4712
# killall -1 httpd # 傳送 HUP 訊號終止程序 httpd
# pkill -9 http # 傳送 TERM 訊號終止包含 http 的程序
# pkill -TERM -u www # 傳送 TERM 訊號終止 www 所有者程序
# fuser -k -TERM -m /home # 終止所有訪問 /home 的程序(解除安裝該分割槽前)
下面是一些重要的訊號:
- 1
HUP
(掛起) - 2
INT
(中斷) - 3
QUIT
(退出) - 9
KILL
(KILL 訊號不能被捕捉,不能被忽略。) - 15
TERM
(軟體終止訊號)
檔案系統
磁碟資訊 | Boot | 磁碟使用情況 | 已開啟的檔案 | 掛載/重掛 | 掛載 SMB | 掛載映像檔案 | Burn ISO | Create image | Memory disk | Disk performance
許可權
用chmod
和
chown
更改訪問許可權和所有權。對於所有使用者的預設掩碼(umask)可以在 /etc/profile (Linux) 或 /etc/login.conf (FreeBSD) 中修改。其預設掩碼(umask)通常為 022。掩碼可以和777做減法,從而得到755的許可權。
1 --x 執行 # Mode 764 = 執行/讀/寫 | 讀/寫 | 讀
2 -w- 寫 # |---所有者|---使用者組|---其他使用者|
4 r-- 讀
ugo=a u=所有者, g=使用者組, o=其他使用者, a=所有使用者
# chmod [OPTION] MODE[,MODE] FILE # MODE 可以是 [ugoa]*([-+=]([rwxXst]))
# chmod 640 /var/log/maillog # 更改 maillog 訪問許可權為 -rw-r-----
# chmod u=rw,g=r,o= /var/log/maillog # 同上
# chmod -R o-r /home/* # 遞迴去除所有其他使用者的可讀許可權
# chmod u+s /path/to/prog # 在可執行位設定 SUID (知道你在幹什麼!)
# find / -perm -u+s -print # 查詢所有設定過 SUID 位的程式 # chown user:group /path/to/file # 改變檔案的所有者和檔案關聯的組 # chgrp group /path/to/file # 改變檔案關聯的組 # chmod 640 `find ./ -type f -print` # Change permissions to 640 for all files # chmod 751 `find ./ -type d -print` # Change permissions to 751 for all directories
磁碟資訊
# diskinfo -v /dev/ad2 # 顯示磁碟資訊(扇區/大小) (FreeBSD)
# hdparm -I /dev/sda # 顯示 IDE/ATA 磁碟資訊 (Linux)
# fdisk /dev/ad2 # 顯示和修改磁碟分割槽表
# smartctl -a /dev/ad2 # 顯示磁碟檢測資訊
Boot
FreeBSD
如果新核心不能引導,要引導一箇舊核心,停止啟動倒計時,做如下動作:# unload # load kernel.old # boot
系統掛載點/磁碟使用情況
# mount | column -t # 顯示系統已掛載分割槽情況
# df # 顯示磁碟剩餘空間和掛載的裝置
# cat /proc/partitions # 顯示所有裝置的所有分割槽(Linux)
磁碟使用情況
# du -sh * # 列出當前目錄下所有資料夾大小
# du -csh # 當前目錄下所有目錄大小總數
# du -ks * | sort -n -r # 由大到小排序顯示目錄大小
# ls -lSr # 由小到大顯示檔案列表
誰打開了那些檔案
對於找出哪些檔案阻止解除安裝分割槽並給出有代表性的錯誤是有幫助的:# umount /home/
umount: unmount of /home # 不能解除安裝,因為有一個檔案鎖定了 home
failed: Device busy
FreeBSD 和大多數 Unix
# fstat -f /home # 對於一個掛載點
# fstat -p PID # 對於一個應用程式程序 ID
# fstat -u user # 對於一個使用者
查詢已開啟日誌檔案(或其他已開啟檔案), 比如 Xorg:
# ps ax | grep Xorg | awk '{print $1}' 1252 # fstat -p 1252 USER CMD PID FD MOUNT INUM MODE SZ|DV R/W root Xorg 1252 root / 2 drwxr-xr-x 512 r root Xorg 1252 text /usr 216016 -rws--x--x 1679848 r root Xorg 1252 0 /var 212042 -rw-r--r-- 56987 w在 /var 中的只有一個 inum 為 212042 的檔案:
# find -x /var -inum 212042 /var/log/Xorg.0.log
Linux
使用fuser
或
lsof
在一個掛載點中查詢已開啟的檔案:
# fuser -m /home # 列出訪問 /home 的程序
# lsof /home
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tcsh 29029 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)
lsof 29140 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)
關於一個應用程式:
ps ax | grep Xorg | awk '{print $1}' 3324 # lsof -p 3324 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log關於單個檔案:
# lsof /var/log/Xorg.0.log COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log
掛載/重掛載一個檔案系統
舉個 cdrom 的例子。如果已經列於 /etc/fstab 中:# mount /cdrom或在 /dev/ 中查詢裝置,亦或使用
dmesg
命令
FreeBSD
# mount -v -t cd9660 /dev/cd0c /mnt # cdrom
# mount_cd9660 /dev/wcd0c /cdrom # 另外一個方法
# mount -v -t msdos /dev/fd0c /mnt # 軟碟機
/etc/fstab 中的一條:
# Device Mountpoint FStype Options Dump Pass# /dev/acd0 /cdrom cd9660 ro,noauto 0 0要允許使用者做這些,可以這麼做:
# sysctl vfs.usermount=1 # 或者在 /etc/sysctl.conf 中插入一條 "vfs.usermount=1"
Linux
# mount -t auto /dev/cdrom /mnt/cdrom # 典型的 cdrom 掛載命令
# mount /dev/hdc -t iso9660 -r /cdrom # IDE
# mount /dev/sdc0 -t iso9660 -r /cdrom # SCSI
/etc/fstab 中的條目:
/dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0
用 Linux 掛載一個 FreeBSD 分割槽
用 fdisk 查詢分割槽號,這通常是 root 分割槽,但也可能是其他 BSD slice。如果 FreeBSD 有許多 slice,他們不列於同一個 fdisk 分割槽表中,但可見於 /dev/sda* 或 /dev/hda* 中。# fdisk /dev/sda # 查詢 FreeBSD 分割槽
/dev/sda3 * 5357 7905 20474842+ a5 FreeBSD
# mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt
/dev/sda10 = /tmp; /dev/sda11 /usr # 其他 slice
重掛載
不用解除安裝一個裝置來重掛載。 對fsck
來說是必須的。舉個例子:
# mount -o remount,ro / # Linux
# mount -o ro / # FreeBSD
從 cdrom 拷貝原始資料進一個 iso 映像檔案:
# dd if=/dev/cd0c of=file.iso
給即時燒錄(on-the-fly)新增 swap
假設你需要很多的 swap (即刻),如一個 2GB 檔案 /swap2gb (只限 Linux)。# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb # 建立交換區
# swapon /swap2gb # 啟用這個 swap。現在可以使用了
# swapoff /swap2gb # 當使用完畢,釋放這個 swap
# rm /swap2gb
掛載一個 SMB 共享
假設我們要訪問計算機 smbserver 上的名叫 myshare 的 SMB 共享,在 window PC 上鍵入的地址是 \\smbserver\myshare\。我掛載到 /mnt/smbshare 上。注意 cifs 必須是 IP 或 DNS 名,不是 Windows 名字。Linux
# smbclient -U user -I 192.168.16.229 -L //smbshare/ # 列出共享
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare
# mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share
此外,mount.cifs 軟體包可以儲存認證到一個檔案中。例如,
/home/user/.smb
:
username=winuser password=winpwd現在可以像下面那樣掛載:
# mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare
FreeBSD
使用 -I 來獲取 IP (或 DNS 名);smbserver 是 Windows 名。# smbutil view -I 192.168.16.229 //[email protected] # 列出共享 # mount_smbfs -I 192.168.16.229 //[email protected]/myshare /mnt/smbshare
掛載映象檔案
Linux loop-back
# mount -t iso9660 -o loop file.iso /mnt # 掛載 CD 映象檔案
# mount -t ext3 -o loop file.img /mnt # 用 ext3 檔案系統掛載映象檔案
FreeBSD
用於儲存裝置 (如果需要做 # kldload md.ko 動作):# mdconfig -a -t vnode -f file.iso -u 0
# mount -t cd9660 /dev/md0 /mnt
# umount /mnt; mdconfig -d -u 0 # 清除 md 裝置
用於虛擬節點:
# vnconfig /dev/vn0c file.iso; mount -t cd9660 /dev/vn0c /mnt
# umount /mnt; vnconfig -u /dev/vn0c # 清除 vn 裝置
Solaris and FreeBSD
用於 loop-back 檔案介面或 lofi:# lofiadm -a file.iso
# mount -F hsfs -o ro /dev/lofi/1 /mnt
# umount /mnt; lofiadm -d /dev/lofi/1 # 清除 lofi 裝置
建立並燒錄 ISO 映象檔案
這將會拷貝 CD 或者 DVD 的扇區。當不用conv=notrunc
,映象檔案會等於 CD 內容大小而非 CD 容量大小。看下面和 dd 例子。
# dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc使用 mkisofs 把目錄中所有檔案建立成 CD/DVD 映象檔案。克服檔名限制:-r 開啟 Rock Ridge 擴充套件用於 Unix 系統,-J 開啟 Joliet 擴充套件用於微軟系統。-L 允許 ISO9660 檔名第一個字元為句點。
# mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir對於 FreeBSD,mkisofs 可以到 port 的 sysutils/cdrtools 中找到。
燒錄 ISO 映象檔案
FreeBSD
FreeBSD 預設情況下沒有在 ATAPI 驅動上啟用 DMA。DMA 可用 sysctl 命令啟用,其引數如下,或者在 /boot/loader.conf 中新增如下條目:hw.ata.ata_dma="1" hw.ata.atapi_dma="1"
burncd
用於 ATAPI 驅動(
burncd
為基本系統的一部分),
cdrecord
(在 sysutils/cdrtools 中)用於 SCSI 驅動。
# burncd -f /dev/acd0 data imagefile.iso fixate # ATAPI 驅動
# cdrecord -scanbus # 查詢 burner 裝置描述符(如 1,0,0)
# cdrecord dev=1,0,0 imagefile.iso
Linux
對於 Linux,同樣使用cdrecord
如上文所述。此外,它還可以使用本地 ATAPI 介面查詢裝置描述符:
# cdrecord dev=ATAPI -scanbus然後同上面一樣燒錄 CD/DVD。
dvd+rw-tools
dvd+rw-tools 工具包(FreeBSD: ports/sysutils/dvd+rw-tools)可以做上面的一切,其還包括 growisofs 工具來燒錄 CD 或 DVD。本例項所引用的 DVD 裝置/dev/dvd
可能是指向
/dev/scd0
(Linux)的符號連線,或者
/dev/cd0
(FreeBSD),或者
/dev/rcd0c
(NetBSD/OpenBSD),或者
/dev/rdsk/c0t1d0s2
(Solaris)。對於本例項 FreeBSD 手冊 18.7 章 上有一份很好的文件。
# -dvd-compat 選項將完結光碟,光碟便不可再附加資料
# growisofs -dvd-compat -Z /dev/dvd=imagefile.iso # 燒錄已存在的 iso 映象檔案
# growisofs -dvd-compat -Z /dev/dvd -J -R /p/to/data # 直接燒錄
轉換 Nero .nrg 檔案成 .iso
Nero 簡單的添加了 300KB 的頭到一個常規的 iso 映象檔案中。我們可用 dd 工具來去除它。# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300
轉換 bin/cue 映象成 .iso
bchunk
程式可以做到這一點。在 FreeBSD 中,它在 port 的 sysutils/bchunk 中。
# bchunk imagefile.bin imagefile.cue imagefile.iso
建立基於檔案的映象檔案
舉個例子,一個使用檔案 /usr/vdisk.img 的 1GB 分割槽。這裡我們使用 vnode 0,但也可為 1。FreeBSD
# dd if=/dev/random of=/usr/vdisk.img bs=1K count=1M
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0 # 建立裝置 /dev/md1
# bsdlabel -w /dev/md0
# newfs /dev/md0c
# mount /dev/md0c /mnt
# umount /mnt; mdconfig -d -u 0; rm /usr/vdisk.img # 清除 md 裝置
這個基於檔案的映象檔案可以在 /etc/rc.conf 和 /etc/fstab 中配置成啟動期間自動掛載。可用
# /etc/rc.d/mdconfig start
(先用
# mdconfig -d -u 0
命令刪除 md0 裝置) 測試你的設定。
需要注意的是,那個自動設定僅工作於這個基於檔案的映象檔案不在 root 分割槽中。原因是 /etc/rc.d/mdconfig 指令碼早於啟動就執行了,並且 root 分割槽仍然是隻讀的。指令碼 /etc/rc.d/mdconfig2 之後,映象檔案將位於 root 分割槽外掛載。
/boot/loader.conf:
md_load="YES"/etc/rc.conf:
# mdconfig_md0="-t vnode -f /usr/vdisk.img" # /usr 不在 root 分割槽中
/etc/fstab: (行後的兩個 0 0 很重要,它告訴 fsck 忽略這個裝置,現在還不存在。)
/dev/md0 /usr/vdisk ufs rw 0 0也可能在增加映象檔案的大小之後,如增大到 300MB。
# umount /mnt; mdconfig -d -u 0
# dd if=/dev/zero bs=1m count=300 >> /usr/vdisk.img
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0
# growfs /dev/md0
# mount /dev/md0c /mnt # 檔案分割槽現在為 300MB
Linux
# dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024
# mkfs.ext3 /usr/vdisk.img
# mount -o loop /usr/vdisk.img /mnt
# umount /mnt; rm /usr/vdisk.img # 清楚
Linux with losetup
/dev/zero
比
urandom
更快,但對於加密來說卻不夠安全。
# dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024
# losetup /dev/loop0 /usr/vdisk.img # 建立並聯結 /dev/loop0
# mkfs.ext3 /dev/loop0
# mount /dev/loop0 /mnt
# losetup -a # 檢視已經掛載的 loop 裝置
# umount /mnt
# losetup -d /dev/loop0 # Detach
# rm /usr/vdisk.img
建立基於記憶體的檔案系統
基於記憶體的檔案系統對於重量級 IO 應用程式來說非常快。怎樣建立一個掛載到 /memdisk 的 64M 分割槽:FreeBSD
# mount_mfs -o rw -s 64M md /memdisk
# umount /memdisk; mdconfig -d -u 0 # 清除該 md 裝置
md /memdisk mfs rw,-s64M 0 0 # /etc/fstab 條目
Linux
# mount -t tmpfs -osize=64m tmpfs /memdisk
磁碟效能
在 ad4s3c (/home) 分割槽上讀寫一個 1GB 的檔案。# time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000
# time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file
# hdparm -tT /dev/hda # 僅限 Linux
網路
路由 | 額外 IP | 更改 MAC 地址 | 埠 | 防火牆 | IP 轉發 | NAT | DNS | DHCP | 通訊量 | QoS | NIS
除錯 (也可看流量分析)
Linux
# ethtool eth0 # 顯示乙太網狀態(replaces mii-diag)
# ethtool -s eth0 speed 100 duplex full # 把網絡卡 eth0 速度改為 100兆/秒,採用全雙工
# ethtool -s eth0 autoneg off # 禁用自動協商模式
# ethtool -p eth1 # 閃爍網路介面 LED 燈 - 如果支援的話,非常實用
# ip link show # 在 Linux 上顯示所有網路介面(同 ifconfig 類似)
# ip link set eth0 up # 使裝置啟用(或Down掉)。同 "ifconfig eth0 up" # ip addr show # 在 Linux 上顯示所有 IP 地址(與 ifconfig 類似) # ip neigh show # 與 arp -a 類似
其他系統
# ifconfig fxp0 # 檢視 "media" 欄位(FreeBSD)
# arp -a # 檢視路由(或主機) ARP 條目(所有系統)
# ping cb.vu # 第一個要試的事情...
# traceroute cb.vu # 列印到目的地的路由路徑
# ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100兆/秒 全雙工(FreeBSD)
# netstat -s # 對每個網路協議做系統級分析
另一些命令,雖然不總是預設安裝,但很好找:
# arping 192.168.16.254 # 在網路層上 Ping
# tcptraceroute -f 5 cb.vu # 使用 tcp 替換 icmp 來跟蹤,透過防火牆
路由
列印路由表
# route -n # Linux 或使用 "ip route"
# netstat -rn # Linux, BSD 和 UNIX
# route print # Windows
新增刪除路由
FreeBSD
# route add 212.117.0.0/16 192.168.1.1 # route delete 212.117.0.0/16 # route add default 192.168.1.1永久的新增路由可在 /etc/rc.conf 配置檔案中設定
static_routes="myroute" route_myroute="-net 212.117.0.0/16 192.168.1.1"
Linux
# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254
# ip route add 192.168.20.0/24 via 192.168.16.254 # 等同於上面命令
# route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0
# route add default gw 192.168.51.254
# ip route add default via 192.168.51.254 dev eth0 # 等同於上面命令
# route delete -net 192.168.20.0 netmask 255.255.255.0
Solaris
# route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254
# route add default 192.168.51.254 1 # 1 = 通過此路由跳數減 1
# route change default 192.168.50.254 1
永久條目配置在
/etc/defaultrouter
中。
Windows
# Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253 # Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254使用
add -p
來是路由設定永久有效。
配置額外的 IP 地址
Linux
# ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # 第一個 IP
# ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # 第二個 IP
# ip addr add 192.168.50.254/24 dev eth0 # 等價命令
# ip addr add 192.168.51.254/24 dev eth0 label eth0:1
FreeBSD
# ifconfig fxp0 inet 192.168.50.254/24 # 第一個 IP
# ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # 第二個 IP
永久條目設定在 /etc/rc.conf 中
ifconfig_fxp0="inet 192.168.50.254 netmask 255.255.255.0" ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0"
Solaris
用ifconfig -a
命令檢查設定
# ifconfig hme0 plumb # 啟用網絡卡
# ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up # 第一個 IP
# ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up # 第二個 IP
更改 MAC 地址
通常在你更改之前先停下網路介面。不要告訴我為什麼你想改變 MAC 地址......# ifconfig eth0 down
# ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux
# ifconfig fxp0 link 00:01:02:03:04:05 # FreeBSD
# ifconfig hme0 ether 00:01:02:03:04:05 # Solaris
# sudo ifconfig en0 ether 00:01:02:03:04:05 # Mac OS X Tiger
# sudo ifconfig en0 lladdr 00:01:02:03:04:05 # Mac OS X Leopard
對於 Windows 已經有許多工具了。像 etherchange。或者看看 "Mac Makeup", "smac"。
使用中的埠
監聽開啟的埠:# netstat -an | grep LISTEN
# lsof -i # 列出所有因特網連線(Linux)
# socklist # 列出開啟的 socket (Linux)
# sockstat -4 # 使用 socket 的應用程式列表(FreeBSD)
# netstat -anp --udp --tcp | grep LISTEN # Linux
# netstat -tup # 列出活躍的連線(Linux)
# netstat -tupl # 列出系統中正在監聽的埠(Linux) # netstat -ano # Windows
防火牆
檢查正在執行的防火牆(只是典型配置):Linux
# iptables -L -n -v # 狀態資訊
Open the iptables firewall
# iptables -P INPUT ACCEPT # 開啟所有
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -Z # 把所有鏈的包及位元組的計數器清空
# iptables -F # 清空所有鏈
# iptables -X # 刪除所有鏈
FreeBSD
# ipfw show # 狀態資訊
# ipfw list 65535 # 如果顯示 "65535 deny ip from any to any",那防火牆已被禁用
# sysctl net.inet.ip.fw.enable=0 # 禁用
# sysctl net.inet.ip.fw.enable=1 # 啟用
路由 IP 轉發
Linux
檢視然後啟用 IP 轉發:# cat /proc/sys/net/ipv4/ip_forward # 檢視 IP 轉發 0=禁用, 1=啟用
# echo 1 > /proc/sys/net/ipv4/ip_forward
或者編輯 /etc/sysctl.conf:
net.ipv4.ip_forward = 1
FreeBSD
檢視並啟用:# sysctl net.inet.ip.forwarding # 檢視 IP 轉發 0=禁用, 1=啟用
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet.ip.fastforwarding=1 # 專用路由器或防火牆
Permanent with entry in /etc/rc.conf:
gateway_enable="YES" # 如果主機是閘道器則設定為 YES。
Solaris
# ndd -set /dev/ip ip_forwarding 1 # 檢視 IP 轉發 0=禁用, 1=啟用
NAT - 網路地址轉換
Linux
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 啟用 NAT
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \
--to 192.168.16.44:22 # 轉發埠 20022 到內部 IP 埠(ssh)
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \
--to 192.168.16.254:993:995 # 轉發 993-995 範圍埠
# ip route flush cache
# iptables -L -t nat # 檢視 NAT 狀態資訊
使用 -D 替換 -A 來刪除埠轉發。
FreeBSD
# natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0
Or edit /etc/rc.conf with:
firewall_enable="YES" # 設定 YES 來啟用防火牆功能
firewall_type="open" # 防火牆型別(看 /etc/rc.firewall)
natd_enable="YES" # 啟用 natd (如果 firewall_enable == YES)。
natd_interface="tun0" # 公共的網路介面或要使用的 IP 地址。
natd_flags="-s -m -u -dynamic -f /etc/natd.conf"
埠轉發:
# cat /etc/natd.conf
same_ports yes
use_sockets yes
unregistered_only
# redirect_port tcp insideIP:2300-2399 3300-3399 # 埠範圍
redirect_port udp 192.168.51.103:7777 7777
DNS
在 unix 上,對於所有的網路介面的 DNS 條目都儲存在 /etc/resolv.conf 檔案中。主機域也儲存在這個檔案中。最小化配置如下:nameserver 78.31.70.238 search sleepyowl.net intern.lab domain sleepyowl.net檢查系統域名:
# hostname -d # 等同於 dnsdomainname
Windows
在 Windows 上,DNS 配置於每個網路介面。要顯示配置的 DNS 和清空 DNS 快取可是使用:# ipconfig /? # 顯示幫助
# ipconfig /all # 顯示所有資訊包括 DNS
# ipconfig /flushdns # 清除 DNS 快取
轉發查詢
Dig 是你測試 DNS 設定的好朋友。舉個例子,用於測試的 DNS 伺服器為213.133.105.2 ns.second-ns.de
。檢視哪個伺服器客戶端接收應答(簡單應答).
# dig sleepyowl.net sleepyowl.net. 600 IN A 78.31.70.238 ;; SERVER: 192.168.51.254#53(192.168.51.254)路由器 192.168.51.254 應答了,並返回了一條 A 條目(記錄)。任何條目都可查詢,DNS 伺服器可用 @ 來選定:
# dig MX google.com
# dig @127.0.0.1 NS sun.com # 測試本地伺服器
# dig @204.97.212.10 NS MX heise.de # 查詢外部
# dig AXFR @ns1.xname.org cb.vu # 檢視區傳送(zone transfer)
程式 host 也很強大。
# host -t MX cb.vu # 獲取郵件 MX 記錄
# host -t NS -T sun.com # 通過 TCP 連接獲取 NS 記錄
# host -a sleepyowl.net # 獲取所有
反向查詢
查詢屬於一個 IP 地址(in-addr.arpa.)的域名。可用dig
,
host
和
nslookup
命令查詢:
# dig -x 78.31.70.238 # host 78.31.70.238 # nslookup 78.31.70.238
/etc/hosts
單個主機可以配置於檔案 /etc/hosts 來代替本地正在執行的named
反向域名查詢。格式很簡單,舉個例子:
78.31.70.238 sleepyowl.net sleepyowl對於 hosts 檔案和 DNS 查詢之間的優先順序,可在
/etc/nsswitch.conf
和
/etc/host.conf
中配置 order 名稱解析。這個檔案同樣存在於 Windows 上,通常在:
C:\WINDOWS\SYSTEM32\DRIVERS\ETC
DHCP
Linux
一些發行版(SuSE)使用 dhcpcd 作為客戶端。預設網路介面是 eth0。# dhcpcd -n eth0 # 觸發更新(並不總是可以工作)
# dhcpcd -k eth0 # 釋放並關閉
租約(lease)的全部資訊儲存在:
/var/lib/dhcpcd/dhcpcd-eth0.info
FreeBSD
FreeBSD (和 Debian) 使用dhclient
。要配置一個網路介面(如:bge0)執行:
# dhclient bge0租約(lease)的全部資訊儲存在:
/var/db/dhclient.leases.bge0使用
/etc/dhclient.conf設定 prepend 選項或強制不同的選項:
# cat /etc/dhclient.conf interface "rl0" { prepend domain-name-servers 127.0.0.1; default domain-name "sleepyowl.net"; supersede domain-name "sleepyowl.net"; }
Windows
dhcp 租約(lease)使用ipconfig
來更新:
# ipconfig /renew # 更新所有介面卡
# ipconfig /renew LAN # 更新名叫 "LAN" 的介面卡
# ipconfig /release WLAN # 釋放名叫 "WLAN" 的介面卡
是的,這是一個使用簡單名稱重新命名你的介面卡的好主意!
通訊量分析(Traffic analysis)
Bmon 是一個小的流量監控控制檯,而且可以顯示不同的網路介面的流量。用 tcpdump 嗅探(sniff)
# tcpdump -nl -i bge0 not port ssh and src \(192.168.16.121 or 192.168.16.54\)
# tcpdump -l > dump && tail -f dump # 緩衝輸出
# tcpdump -i rl0 -w traffic.rl0 # 把資料報文寫入二進位制檔案
# tcpdump -r traffic.rl0 # 從檔案讀取資料報文(也可以使用 ethereal)
# tcpdump port 80 # 兩個經典命令
# tcpdump host google.com
# tcpdump -i eth0 -X port \(110 or 143\) # 檢視埠 110(POP) 或 143(IMAP)的資料報文
# tcpdump -n -i eth0 icmp # 只捕獲 ping # tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 為全部包, -A 為 ASCII
另一些重要選項:
-A
顯示每個包清晰文字(除了報頭)-X
顯示包的 ASCII 文字-l
使標準輸出變為緩衝行形式-D
顯示所有可用網路介面
用 nmap 掃描
Nmap 是一個用於 OS 探測的埠掃描工具,她通常在許多發行版上有安裝,並且同樣可用於 Windows。如果你不掃描你的伺服器,駭客們會為你做這些...# nmap cb.vu # 掃描主機上所有保留的 TCP 埠
# nmap -sP 192.168.16.0/24 # 找出在 0/24 上主機所使用的 IP
# nmap -sS -sV -O cb.vu # 做祕密 SYN 掃描來探測系統和系統服務的版本資訊
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0)
25/tcp open smtp Sendmail smtpd 8.13.6/8.13.6
80/tcp open http Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4.
[...]
Running: FreeBSD 5.X
Uptime 33.120 days (since Fri Aug 31 11:41:04 2007)
其他非標準但好用的工具有
hping
(www.hping.org),她是一個 IP 分組組裝/分析器,和
fping
(fping.sourceforge.net)。fping 可以在一個迴圈佇列(round-robin fashion)中掃描多種主機。
流量控制(QoS)
流量控制管理著一個網路的佇列、流量監控、排程以及其他流量設定(traffic parameters)。以下簡單實用的示例使用 Linux 和 FreeBSD 的能力來更好的利用頻寬。上傳限制
DSL 或有線調變解調器有一個很長的列隊來提高上傳吞吐量(upload throughput)。然而用一個快速的裝置(如乙太網)填充這個列隊將大大減少互動性。這就是限制裝置上傳速度有用的原因,以匹配調變解調器的實際能力,這可以有效提高互動性。設定大約為 modem 最大速度的 90%。Linux
給 512K 上傳速度的 modem。# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540
# tc -s qdisc ls dev eth0 # 狀態
# tc qdisc del dev eth0 root # 刪除佇列
# tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540
FreeBSD
FreeBSD 使用dummynet
來控制頻寬,其配置工具為 ipfw。Pipe 用來設定限制頻寬的單位[K|M]{位元/秒|位元組/秒},0 意味著沒有限制。使用同樣的 pipe 數字可重新配置它。舉個例子,限制上傳頻寬為 500K。
# kldload dummynet # 如有必要載入這個模組
# ipfw pipe 1 config bw 500Kbit/s # 建立一個頻寬限制的 pipe
# ipfw add pipe 1 ip from me to any # 轉移所有上傳進入這個 pipe
服務質量 (Quality of service)
Linux
使用tc
的優先順序佇列來優化 VoIP。在 voip-info.org 或 www.howtoforge.com 上可以看到完整的例子。假設 VoIP 使用 UDP 埠 10000:11024 並且使用 eth0 裝置(也可為 ppp0 或 so)。下列命令定義了三個佇列,並且用 QoS
0x1e
(設定所有位) 強制 VOIP 流量到佇列 1。預設流量流入佇列 3,Qos
Minimize-Delay 流入佇列 2。
# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0
# tc qdisc add dev eth0 parent 1:1 handle 10: sfq
# tc qdisc add dev eth0 parent 1:2 handle 20: sfq
# tc qdisc add dev eth0 parent 1:3 handle 30: sfq
# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \
match ip dport 10000 0x3C00 flowid 1:1 # 使用服務端埠範圍
match ip dst 123.23.0.1 flowid 1:1 # 或/和使用伺服器 IP
狀態和移除:
# tc -s qdisc ls dev eth0 # queue status
# tc qdisc del dev eth0 root # delete all QoS
計算埠範圍和掩碼 (mask)
用你所計算的埠掩碼來定義 tc 過濾器的埠範圍。查詢 2^N 埠範圍結尾,推斷範圍並轉換成十六進位制。這就是你的掩碼 (mask)。例如 10000 -> 11024,它的範圍是 1024。# 2^13 (8192) < 10000 < 2^14 (16384) # 結尾是 2^14 = 16384
# echo "obase=16;(2^14)-1024" | bc # 掩碼是 0x3C00
FreeBSD
假設最大連線頻寬為 500Kbit/s,我們使用優先順序 100:10:1 定義 3 個佇列給 VoIP:ssh:剩餘所有。# ipfw pipe 1 config bw 500Kbit/s
# ipfw queue 1 config pipe 1 weight 100
# ipfw queue 2 config pipe 1 weight 10
# ipfw queue 3 config pipe 1 weight 1
# ipfw add 10 queue 1 proto udp dst-port 10000-11024
# ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # 或/和使用伺服器 IP
# ipfw add 20 queue 2 dsp-port ssh
# ipfw add 30 queue 3 from me to any # 剩餘所有
狀態和移除:
# ipfw list # 規則資訊
# ipfw pipe list # 管道資訊
# ipfw flush # 刪除除預設外所有規則
NIS 除錯
一些可工作在已配置好的 NIS 客戶端上的命令:# ypwhich # 獲取提供 NIS 服務的伺服器名
# domainname # 已配置的 NIS 域名
# ypcat group # 列印 NIS 對映 group
# cd /var/yp && make # 重建 yp 資料庫
ypbind 正在執行嗎?
# ps auxww | grep ypbind
/usr/sbin/ypbind -s -m -S servername1,servername2 # FreeBSD
/usr/sbin/ypbind # Linux
# yppoll passwd.byname
Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007
The master server is servername.domain.net.
Linux
# cat /etc/yp.conf ypserver servername domain domain.net broadcast
SSH SCP
公鑰認證 | 指紋 | SCP | 隧道(Tunneling)
Public key authentication
使用公鑰認證而不是密碼連線主機。方法是附加你的公鑰檔案到遠端主機。本例中我們用客戶端產生的 key 從 host-client 連線到 host-server。- 使用 ssh-keygen 生成金鑰對。私鑰放在
~/.ssh/id_dsa
,公鑰在~/.ssh/id_dsa.pub
。 - 拷貝你的公鑰到伺服器的
~/.ssh/authorized_keys2
。
# ssh-keygen -t dsa -N '' # cat ~/.ssh/id_dsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys2"
使用來自 ssh.com 的 Windows 客戶端
ssh.com 的非商業性版本的客戶端可下載自它主 FTP 站點:ftp.ssh.com/pub/ssh/。 用 ssh.com 客戶端產生的金鑰需要在 OpenSSH 伺服器上進行轉換。可以使用 ssh-keygen 命令來完成。- 使用 ssh.com 客戶端建立一對金鑰:Settings - User Authentication - Generate New....
- 我使用 DSA 金鑰型別;金鑰長度為 2048。
- 拷貝 ssh.com 客戶端產生的公鑰到伺服器的 ~/.ssh 目錄。
- 她的金鑰對在 C:\Documents and Settings\%USERNAME%\Application Data\SSH\UserKeys。
- 在伺服器上使用 ssh-keygen 轉換公鑰:
# cd ~/.ssh # ssh-keygen -i -f keyfilename.pub >> authorized_keys2
在 Windows 上使用 Putty
Putty 是一個簡單並且自由的(MIT許可) ssh Windows 客戶端。- 使用 puTTYgen 程式建立金鑰對。
- 儲存金鑰對(比如:C:\Documents and Settings\%USERNAME%\.ssh).
- 拷貝公鑰到伺服器的 ~/.ssh 目錄:
# scp .ssh/puttykey.pub [email protected]:.ssh/
- 使用 ssh-keygen 在 OpenSSH 伺服器上轉換這個公鑰:
# cd ~/.ssh # ssh-keygen -i -f puttykey.pub >> authorized_keys2
- 在 Putty 中設定指向私鑰的位置:Connection - SSH - Auth