正在運行的內核和系統信息:
# 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), 等等。
注:
# cat /etc/issue #紅帽系列也可以通過issue文件查看
Red HatEnterprise Linux Server release 6.3 (Santiago)
# uptime # 顯示系統開機運行到現在經過的時間
# hostname # 顯示系統主機名
# hostname -i #顯示主機的 IP 地址
注:
hostname -i選項是解析主機名獲取ip地址的,它依賴主機名解析,如果你的主機名是隨便命名的,如kumu.com,那麼你獲得的ip地址可能就是互聯網的IP,而不是你自己本身的,這個選項是有爭議的,一般推薦使用-I選項獲取,如下實例:#hostname -I //不依賴主機名解析,獲取的是真實機器的IP值
man注解:
-I, --all-ip-addresses
# man hier #描述文件系統目錄結構
注:
使用man hier會顯示每個系統目錄的注解,非常清晰,很實用
# last reboot #顯示系統最後重啟的歷史記錄
內核檢測到的硬件信息
# dmesg # 檢測到的硬件和啟動的消息注:
關於lsdev經常在Redhat系列中是沒有該軟件包的,可以使用lspci -v和lsscsi其他命令查看
# lsscsi //查看scsi設備[1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0
[2:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
# lspci -v //列出pci硬件設備
00:00.0 Host bridge: IntelCorporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
Subsystem:VMware Virtual Machine Chipset
… …
如果是debian系的可以嘗試安裝apt-get install procinfo
# cat /proc/cpuinfo# CPU訊息
注:
用命令判斷幾個物理CPU,幾個核等:
邏輯CPU個數:
# cat /proc/cpui
物理CPU個數:
# cat /proc/cpui
每個物理CPU中Co
# cat /proc/cpui
是否為超線程?
如果有兩個邏輯CPU
每個物理CPU中邏輯CPU(可能是cor
# cat /proc/cpui
# cat /proc/meminfo#內存信息
# grep MemTotal /proc/meminfo#顯示物理內存大小
# watch -n1 'cat /proc/interrupts'#監控內核處理的所有中斷
# free -m # 顯示已用和空閒的內存信息 (-m為 MB)2
# cat /proc/devices#顯示當前核心配置的設備
# lspci -tv # 顯示 PCI 設備
# lsusb -tv # 顯示 USB 設備
# lshal # 顯示所有設備屬性列表
# dmidecode #顯示從 BIOS中獲取的硬件信息
以下命令有助於找出正在系統中運行著的程序
# top # 顯示和更新使用 cpu 最多的進程
注:
top小技巧,執行top命令之後,可以敲擊如下按鍵,實現不同功能
1(數字1):列出所有的單個CPU負載情況
z:top顯示顏色
P:按CPU占用高低順序列出程序
M:按內存占用高低順序列出程序
x:類似高亮顯示,在z顯示模式下才有效果
如下效果圖:
top顯示Swap利用率,使用top命令後按f鍵,然後按p鍵,回車之後即可看到Swap狀態
d:top默認的刷新時間是3s,使用d鍵可以自定義刷新時間
top類似上下翻頁的方法:
shift < 下翻頁
shift >上翻頁
top默認按cpu占用排序,這也是可以修改,按F(大寫)即可選擇相應排序,之後回車即可
c:顯示進程命令的全路徑與參數
W:將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法
# mpstat 1 # 顯示進程相關的信息
# vmstat 2 # 顯示虛擬內存的狀態信息
# iostat 2 # 顯示 I/O 狀態信息(2 秒 間隙)
# 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)
使用 nologin 來臨時阻止所有用戶登錄(root除外)。用戶登錄時將會顯示nologin 中的信息。
# echo "Sorry no login now" > /etc/nologin # (Linux)
某些應用程序需要設置可打開最大文件和socket 數量(像代理服務器,數據庫)。默認限制通常很低。
注:
關於ulimit使用可閱讀IBM文檔:通過 ulimit 改善系統性能
筆者之前也寫過有關文件描述符文章介紹:Linux下文件描述符
關於RHEL6中ulimit的nproc限制
ulimit用於限制 shell 啟動進程所占用的資源,支持以下各種類型的限制:所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。
作為臨時限制,ulimit可以作用於通過使用其命令登錄的 shell 會話,在會話終止時便結束限制,並不影響於其他 shell 會話。而對於長期的固定限制,ulimit 命令語句又可以被添加到由登錄 shell 讀取的文件中,作用於特定的 shell 用戶。
[root@kumu ~]# ulimit -a //顯示當前所有限制的詳細信息
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1829
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
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 # 在使用的文件句柄數
一旦內核加載完成,內核會啟動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
同樣可以使用進程init 進入下列狀態級別。舉個例子: # init 6 為重啟。
0 停止系統並關閉電源 (信號USR2)
1 進入單用戶模式 (信號TERM)
6 重新啟動 (信號INT)
c 阻止進一步登錄 (信號TSTP)
q 重新檢查 ttys(5) 文件 (信號HUP)
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
(關於第一種方法筆者會專文介紹)
Linux方法2:
通過livecd或者安裝盤(包括CD、網絡rescue都可以)
Linux方法3:
當然也可以通過單人模式修改
# lsmod # 列出所有已載入內核的模塊
# modprobe isdn # 載入 isdn 模塊
# insmod isdn # 載入isdn 模塊,和modprobe類似,功能沒有modprobe強大
# rmmod isdn # 移除某個模塊
# cd /usr/src/linux
# make mrproper # 清除所有東西,包括配置文件
# make oldconfig # 從當前內核配置文件的基礎上創建一個新的配置文件
# make menuconfig # 或者 xconfig (Qt) 或者 gconfig (GTK)
# make # 創建一個已壓縮的內核映像文件
# make modules # 編譯模塊
# make modules_install # 安裝模塊
# make install # 安裝內核
# reboot
對於Redhat如下:
# pwd
/usr/src/kernels/2.6.32-131.0.15.el6.i686
# makemenuconfig