1. 程式人生 > >linux命令備忘錄

linux命令備忘錄

系統

硬體 | 狀態資訊 | 使用者 | 限制 | 執行級別 | 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.)的域名。可用  dighost 和  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     顯示所有可用網路介面
對於 Windows 可以使用 www.winpcap.org。使用 windump -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
    
注意: 我們使用 DSA 金鑰,使用 RSA 金鑰也是可以的。這個金鑰不受密碼保護。

在 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

檢查指紋

在首次連線時,SSH 會請求儲