正在運(yùn)行的內(nèi)核和系統(tǒng)信息
# uname -a
# 獲取內(nèi)核版本(和BSD版本)
# lsb_release -a
# 顯示任何 LSB 發(fā)行版版本信息
# cat /etc/SuSE-release
# 獲取 SuSE 版本
# cat /etc/debian_version
# 獲取 Debian 版本
使用 /etc/DISTR
-release 其中DISTR(發(fā)行代號(hào))=
lsb (Ubuntu), redhat, gentoo, mandrake, sun (Solaris), 等等。
# uptime
# 顯示系統(tǒng)開(kāi)機(jī)運(yùn)行到現(xiàn)在經(jīng)過(guò)的時(shí)間
# hostname
# 顯示系統(tǒng)主機(jī)名
# hostname -i
# 顯示主機(jī)的 IP 地址
# man hier
# 描述文件系統(tǒng)目錄結(jié)構(gòu)
# last reboot
# 顯示系統(tǒng)最后重啟的歷史記錄
內(nèi)核檢測(cè)到的硬件信息
# dmesg
# 檢測(cè)到的硬件和啟動(dòng)的消息
# lsdev
# 關(guān)于已安裝硬件的信息
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
# 讀取 BIOS 信息
# cat /proc/cpuinfo
# CPU 訊息
# cat /proc/meminfo
# 內(nèi)存信息
# grep MemTotal /proc/meminfo
# 顯示物理內(nèi)存大小
# watch -n1 'cat /proc/interrupts'
# 監(jiān)控內(nèi)核處理的所有中斷
# free -m
# 顯示已用和空閑的內(nèi)存信息 (-m 為 MB)
# cat /proc/devices
# 顯示當(dāng)前核心配置的設(shè)備
# lspci -tv
# 顯示 PCI 設(shè)備
# lsusb -tv
# 顯示 USB 設(shè)備
# lshal
# 顯示所有設(shè)備屬性列表
# dmidecode
# 顯示從 BIOS 中獲取的硬件信息
# sysctl hw.model # CPU 訊息
# sysctl hw # 得到很多硬件信息
# sysctl vm # 虛擬內(nèi)存使用情況
# dmesg | grep "real mem" # 物理內(nèi)存
# sysctl -a | grep mem # 內(nèi)核內(nèi)存的設(shè)置和信息
# sysctl dev # 顯示當(dāng)前核心配置的設(shè)備
# pciconf -l -cv # 顯示 PCI 設(shè)備
# usbdevs -v # 顯示 USB 設(shè)備
# atacontrol list # 顯示 ATA 設(shè)備
以下的命令有助于找出正在系統(tǒng)中運(yùn)行著的程序。
# top
# 顯示和更新使用 cpu 最多的進(jìn)程
# mpstat 1
# 顯示進(jìn)程相關(guān)的信息
# vmstat 2
# 顯示虛擬內(nèi)存的狀態(tài)信息
# iostat 2
# 顯示 I/O 狀態(tài)信息(2 秒 間隙)
# systat -vmstat 1
# 顯示 BSD 系統(tǒng)狀態(tài)信息(1 秒 間隙)
# systat -tcp 1
# 顯示 BSD TCP 連接信息(也可以試試 -ip)
# systat -netstat 1
# 顯示 BSD 當(dāng)前網(wǎng)絡(luò)連接信息
# systat -ifstat 1
# 顯示 BSD 當(dāng)前網(wǎng)卡帶寬信息
# systat -iostat 1
# 顯示 BSD CPU 和磁盤(pán)使用情況
# tail -n 500 /var/log/messages
# 顯示最新500條內(nèi)核/系統(tǒng)日志的信息# tail /var/log/warn
# 顯示系統(tǒng)警告信息(看syslog.conf)
# id
# 顯示當(dāng)前用戶和用戶組的 ID
# last
# 列出目前與過(guò)去登入系統(tǒng)的用戶相關(guān)信息
# who
# 顯示目前登入系統(tǒng)的用戶信息
# 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
# 添加新用戶到一個(gè)組
# pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh
# pw userdel colin; pw groupdel admin
加密過(guò)的密碼存儲(chǔ)在 /etc/shadow (Linux and Solaris) 或 /etc/master.passwd (FreeBSD) 中. 如果手動(dòng)修改了 master.passwd,需要運(yùn)行 # pwd_mkdb -p master.passwd
來(lái)重建數(shù)據(jù)庫(kù)。
使用 nologin 來(lái)臨時(shí)阻止所有用戶登錄(root除外)。用戶登錄時(shí)將會(huì)顯示 nologin 中的信息。
# echo "Sorry no login now" > /etc/nologin
# (Linux)
# echo "Sorry no login now" > /var/run/nologin
# (FreeBSD)
某些應(yīng)用程序需要設(shè)置可打開(kāi)最大文件和 socket 數(shù)量(像代理服務(wù)器,數(shù)據(jù)庫(kù))。 默認(rèn)限制通常很低。
shell 的限制是受 ulimit
支配的。使用 ulimit -a
可查看其狀態(tài)信息。 舉個(gè)例子,改變可打開(kāi)最大文件數(shù)從 1024 到 10240,可以這么做:
# ulimit -n 10240
# 這只在shell中有用
ulimit
命令可以使用在腳本中來(lái)更改對(duì)此腳本的限制。
登錄用戶和應(yīng)用程序的限制可以在 /etc/security/limits.conf
中配置。舉個(gè)例子:
# cat /etc/security/limits.conf
* hard nproc 250
# 限制所有用戶進(jìn)程數(shù)asterisk hard nofile 409600
# 限制應(yīng)用程序可打開(kāi)最大文件數(shù)
用sysctl來(lái)設(shè)置內(nèi)核限制。要使其永久,可以在 /etc/sysctl.conf
中進(jìn)行配置。
# sysctl -a
# 顯示所有系統(tǒng)限制
# sysctl fs.file-max
# 顯示系統(tǒng)最大文件打開(kāi)數(shù)
# sysctl fs.file-max=102400
# 更改系統(tǒng)最大文件打開(kāi)數(shù)
# cat /etc/sysctl.conf
fs.file-max=102400
# 在 sysctl.conf 中的永久項(xiàng)
# cat /proc/sys/fs/file-nr
# 在使用的文件句柄數(shù)
在 csh 或 tcsh 中使用 limits
命令,在 sh 或 bash 中使用 ulimit
命令。
在 /etc/login.conf
中配置登錄后的默認(rèn)限制。未作限制的值為系統(tǒng)最大限制值。
內(nèi)核限制同樣使用 sysctl 來(lái)設(shè)置。永久配置,在 /etc/sysctl.conf
或 /boot/loader.conf
中。其語(yǔ)法與 Linux 相同,只是鍵值不同。
# sysctl -a
# 顯示所有系統(tǒng)限制# sysctl kern.maxfiles=XXXX
# 最大文件描述符數(shù)kern.ipc.nmbclusters=32768
# 在 /etc/sysctl.conf 中的永久項(xiàng)kern.maxfiles=65536
# Squid 通常用這個(gè)值kern.maxfilesperproc=32768
kern.ipc.somaxconn=8192
# TCP 列隊(duì)。apache/sendmail 最好用這個(gè)值# sysctl kern.openfiles
# 在使用的文件描述符數(shù)# sysctl kern.ipc.numopensockets
# 已經(jīng)開(kāi)啟的 socket 數(shù)目
詳情請(qǐng)看 FreeBSD 手冊(cè) 11章。
在 /etc/system
中的下列設(shè)置,會(huì)提高每個(gè)進(jìn)程可以打開(kāi)最大文件描述符的數(shù)量:
set rlim_fd_max = 4096
# 一個(gè)進(jìn)程可以打開(kāi)文件描述符的"硬"限制set rlim_fd_cur = 1024
# 一個(gè)進(jìn)程可以打開(kāi)文件描述符的"軟"限制
一旦內(nèi)核加載完成,內(nèi)核會(huì)啟動(dòng) init
進(jìn)程,然后運(yùn)行 rc
腳本,之后運(yùn)行所有屬于其運(yùn)行級(jí)別的命令腳本。這些腳本都儲(chǔ)存在 /etc/rc.d/rcN.d 中(N代表運(yùn)行級(jí)別),并且都建立著到 /etc/init.d 子目錄中命令腳本程序的符號(hào)鏈接。
默認(rèn)運(yùn)行級(jí)別配置在 /etc/inittab 中。它通常為 3 或 5:
# grep default: /etc/inittab
id:3:initdefault:
可以使用 init
來(lái)改變當(dāng)前運(yùn)行級(jí)別。舉個(gè)例子:
# init 5
# 進(jìn)入運(yùn)行級(jí)別 5
運(yùn)行級(jí)別列表如下:
0 系統(tǒng)停止
1 進(jìn)入單用戶模式(也可以是 S)
2 沒(méi)有 NFS 特性的多用戶模式
3 完全多用戶模式(正常操作模式)
4 未使用
5 類似于級(jí)別3,但提供 XWindow 系統(tǒng)登錄環(huán)境
6 重新啟動(dòng)系統(tǒng)
使用 chkconfig
工具控制程序在一個(gè)運(yùn)行級(jí)別啟動(dòng)和停止。
# chkconfig --list
# 列出所有 init 腳本# chkconfig --list sshd
# 查看 sshd 在各個(gè)運(yùn)行級(jí)別中的啟動(dòng)配置
# chkconfig sshd --level 35 on
# 對(duì) sshd 在級(jí)別 3 和 5 下創(chuàng)建啟動(dòng)項(xiàng)
# chkconfig sshd off
# 在所有的運(yùn)行級(jí)別下禁用 sshd
Debian 和基于Debian 發(fā)行版像 Ubuntu 或 Knoppix 使用命令 update-rc.d
來(lái)管理運(yùn)行級(jí)別腳本。默認(rèn)啟動(dòng)為 2,3,4 和 5,停止為 0,1 和 6。
# update-rc.d sshd defaults
# 設(shè)置 sshd 為默認(rèn)啟動(dòng)級(jí)別
# update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 .
# 用顯示參數(shù)
# update-rc.d -f sshd remove
# 在所有的運(yùn)行級(jí)別下禁用 sshd
# shutdown -h now (或者 # poweroff)
# 關(guān)閉停止系統(tǒng)
BSD 啟動(dòng)步驟不同于 SysV, 她沒(méi)有運(yùn)行級(jí)別。她的啟動(dòng)狀態(tài)(單用戶,有或沒(méi)有 XWindow)被配置在 /etc/ttys
中。所有的系統(tǒng)腳本都位于 /etc/rc.d/
中,第三方應(yīng)用程序位于/usr/local/etc/rc.d/
中。service 的啟動(dòng)順序被配置在 /etc/rc.conf
和/etc/rc.conf.local
中。默認(rèn)行為可在 /etc/defaults/rc.conf
中進(jìn)行配置。 這些腳本至少響應(yīng) start|stop|status.
# /etc/rc.d/sshd status
sshd is running as pid 552.
# shutdown now
# 進(jìn)入單用戶模式# exit
# 返回到多用戶模式# shutdown -p now
# 關(guān)閉停止系統(tǒng)# shutdown -r now
# 重新啟動(dòng)系統(tǒng)
同樣可以使用進(jìn)程 init
進(jìn)入下列狀態(tài)級(jí)別。舉個(gè)例子: # init 6
為重啟。
0 停止系統(tǒng)并關(guān)閉電源 (信號(hào) USR2
)
1 進(jìn)入單用戶模式 (信號(hào) TERM
)
6 重新啟動(dòng) (信號(hào) INT
)
c 阻止進(jìn)一步登錄 (信號(hào) TSTP
)
q 重新檢查 ttys(5) 文件 (信號(hào) HUP
)
在引導(dǎo)加載器(lilo 或 grub)中,鍵入如下啟選項(xiàng):
init=/bin/sh
內(nèi)核會(huì)掛載 root 分區(qū),進(jìn)程 init
會(huì)啟動(dòng) bourne shell 而不是 rc
,然后是運(yùn)行級(jí)別。使用命令 passwd
設(shè)置密碼然后重啟。別忘了需要在單用戶模式下做這些動(dòng)作。
如果重啟后 root 分區(qū)被掛載為只讀,重新掛在它為讀寫(xiě):
# mount -o remount,rw /
# passwd
# 或者刪除 root 密碼 (/etc/shadow)
# sync; mount -o remount,ro /
# sync 在重新掛在為只讀之前 sync 一下
# reboot
FreeBSD 不會(huì)讓你這么做。解決方案是用其他操作系統(tǒng)(像系統(tǒng)緊急修復(fù)光盤(pán))掛載 root 分區(qū),然后更改密碼。
用 live cd 或安裝盤(pán)啟動(dòng)進(jìn)入修復(fù)模式后,會(huì)得到一個(gè) shell。
用 fdisk 查找 root 分區(qū)。比如:fdisk /dev/sda
掛載它并使用 chroot 命令:
# mount -o rw /dev/ad4s3a /mnt
# chroot /mnt
# 改變程序執(zhí)行時(shí)所參考的根目錄位置為 /mnt# passwd
# reboot
# lsmod
# 列出所有已載入內(nèi)核的模塊# modprobe isdn
# 載入 isdn 模塊
# kldstat
# 列出所有已載入內(nèi)核的模塊# kldload crypto
# 載入 crypto 模塊
# cd /usr/src/linux
# make mrproper
# 清除所有東西,包括配置文件
# make oldconfig
# 從當(dāng)前內(nèi)核配置文件的基礎(chǔ)上創(chuàng)建一個(gè)新的配置文件
# make menuconfig
# 或者 xconfig (Qt) 或者 gconfig (GTK)
# make
# 創(chuàng)建一個(gè)已壓縮的內(nèi)核映像文件
# make modules
# 編譯模塊
# make modules_install
# 安裝模塊
# make install
# 安裝內(nèi)核
# reboot
要改變和重建內(nèi)核,需要拷貝源配置文件然后編輯它。當(dāng)然也可以直接編輯 GENERIC
文件。
# cd /usr/src/sys/i386/conf/
# cp GENERIC MYKERNEL
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
要重建完全的操作系統(tǒng):
# make buildworld
# 構(gòu)建完全的系統(tǒng),但不是內(nèi)核
# make buildkernel
# 使用 KERNCONF 配置文件編譯內(nèi)核
# make installkernel
# reboot
# mergemaster -p
# 建立臨時(shí)根環(huán)境并比對(duì)系統(tǒng)配置文件
# make installworld
# mergemaster
# 升級(jí)所有配置和其他文件
# reboot
對(duì)于源的一些小改動(dòng),有時(shí)候簡(jiǎn)單的命令就足夠了:
# make kernel world
# 編譯并安裝內(nèi)核和系統(tǒng)
# mergemaster
# reboot
更多建議: