UNIX系統(tǒng)

2022-03-04 14:16 更新

正在運(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 信息

Linux

# 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 中獲取的硬件信息

FreeBSD

# 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ài)信息

以下的命令有助于找出正在系統(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)限制通常很低。

Linux

每 shell/腳本

shell 的限制是受 ulimit 支配的。使用 ulimit -a 可查看其狀態(tài)信息。 舉個(gè)例子,改變可打開(kāi)最大文件數(shù)從 1024 到 10240,可以這么做:

# ulimit -n 10240                    
# 這只在shell中有用

ulimit 命令可以使用在腳本中來(lái)更改對(duì)此腳本的限制。

每 用戶/進(jìn)程

登錄用戶和應(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ù)

系統(tǒng)級(jí)

用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ù)

FreeBSD

每 shell/腳本

在 csh 或 tcsh 中使用 limits 命令,在 sh 或 bash 中使用 ulimit 命令。

每 用戶/進(jìn)程

在 /etc/login.conf 中配置登錄后的默認(rèn)限制。未作限制的值為系統(tǒng)最大限制值。

系統(tǒng)級(jí)

內(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章。

Solaris

在 /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)文件描述符的"軟"限制

運(yùn)行級(jí)別

Linux

一旦內(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)

FreeBSD

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)

重設(shè) root 密碼

Linux 方法 1

在引導(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 和 Linux 方法 2

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

內(nèi)核模塊

Linux

# lsmod                              
# 列出所有已載入內(nèi)核的模塊# modprobe isdn                      
# 載入 isdn 模塊

FreeBSD

# kldstat                            
# 列出所有已載入內(nèi)核的模塊# kldload crypto                     
# 載入 crypto 模塊

編譯內(nèi)核

Linux

# 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

FreeBSD

要改變和重建內(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
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)