正在運行的內核和系統信息
#?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章](http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-kernel-limits.html)。
## 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