加载中...

系统


正在运行的内核和系统信息

  1. # uname -a                           
  2. # 获取内核版本(和BSD版本)
  3. # lsb_release -a                     
  4. # 显示任何 LSB 发行版版本信息
  5. # cat /etc/SuSE-release              
  6. # 获取 SuSE 版本
  7. # cat /etc/debian_version            
  8. # 获取 Debian 版本

使用 /etc/DISTR-release 其中DISTR(发行代号)= lsb (Ubuntu), redhat, gentoo, mandrake, sun (Solaris), 等等。

  1. # uptime                             
  2. # 显示系统开机运行到现在经过的时间
  3. # hostname                           
  4. # 显示系统主机名
  5. # hostname -i                        
  6. # 显示主机的 IP 地址
  7. # man hier                           
  8. # 描述文件系统目录结构
  9. # last reboot                        
  10. # 显示系统最后重启的历史记录

硬件信息

内核检测到的硬件信息

  1. # dmesg                             
  2. # 检测到的硬件和启动的消息
  3. # lsdev                              
  4. # 关于已安装硬件的信息
  5. # dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 
  6. # 读取 BIOS 信息

Linux

  1. # cat /proc/cpuinfo                  
  2. # CPU 讯息
  3. # cat /proc/meminfo                  
  4. # 内存信息
  5. # grep MemTotal /proc/meminfo        
  6. # 显示物理内存大小
  7. # watch -n1 'cat /proc/interrupts'   
  8. # 监控内核处理的所有中断
  9. # free -m                            
  10. # 显示已用和空闲的内存信息 (-m 为 MB)
  11. # cat /proc/devices                  
  12. # 显示当前核心配置的设备
  13. # lspci -tv                          
  14. # 显示 PCI 设备
  15. # lsusb -tv                          
  16. # 显示 USB 设备
  17. # lshal                              
  18. # 显示所有设备属性列表
  19. # dmidecode                          
  20. # 显示从 BIOS 中获取的硬件信息

FreeBSD

  1. # sysctl hw.model                    # CPU 讯息
  2. # sysctl hw                          # 得到很多硬件信息
  3. # sysctl vm                          # 虚拟内存使用情况
  4. # dmesg | grep "real mem"            # 物理内存
  5. # sysctl -a | grep mem               # 内核内存的设置和信息
  6. # sysctl dev                         # 显示当前核心配置的设备
  7. # pciconf -l -cv                     # 显示 PCI 设备
  8. # usbdevs -v                         # 显示 USB 设备
  9. # atacontrol list                    # 显示 ATA 设备

显示状态信息

以下的命令有助于找出正在系统中运行着的程序。

  1. # top                                
  2. # 显示和更新使用 cpu 最多的进程
  3. # mpstat 1                           
  4. # 显示进程相关的信息
  5. # vmstat 2                           
  6. # 显示虚拟内存的状态信息
  7. # iostat 2                           
  8. # 显示 I/O 状态信息(2 秒 间隙)
  9. # systat -vmstat 1                   
  10. # 显示 BSD 系统状态信息(1 秒 间隙)
  11. # systat -tcp 1                      
  12. # 显示 BSD TCP 连接信息(也可以试试 -ip)
  13. # systat -netstat 1                  
  14. # 显示 BSD 当前网络连接信息
  15. # systat -ifstat 1                   
  16. # 显示 BSD 当前网卡带宽信息
  17. # systat -iostat 1                   
  18. # 显示 BSD CPU 和磁盘使用情况
  19. # tail -n 500 /var/log/messages      
  20. # 显示最新500条内核/系统日志的信息# tail /var/log/warn                 
  21. # 显示系统警告信息(看syslog.conf)

用户

  1. # id                                 
  2. # 显示当前用户和用户组的 ID
  3. # last                               
  4. # 列出目前与过去登入系统的用户相关信息
  5. # who                                
  6. # 显示目前登入系统的用户信息
  7. # groupadd admin                     
  8. # 建立新组"admin"和添加新用户 colin 并加入 admin 用户组(Linux/Solaris)
  9. # useradd -c "Colin Barschel" -g admin -m colin
  10. # userdel colin                      
  11. # 删除用户 colin(Linux/Solaris)
  12. # adduser joe                        
  13. # FreeBSD 添加用户 joe(交互式)
  14. # rmuser joe                         
  15. # FreeBSD 删除用户 joe(交互式)
  16. # pw groupadd admin                  
  17. # 在 FreeBSD 上使用 pw
  18. # pw groupmod admin -m newmember     
  19. # 添加新用户到一个组
  20. # pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh 
  21. # 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 中的信息。

  1. # echo "Sorry no login now" > /etc/nologin       
  2. # (Linux)
  3. # echo "Sorry no login now" > /var/run/nologin   
  4. # (FreeBSD)

限制

某些应用程序需要设置可打开最大文件和 socket 数量(像代理服务器,数据库)。 默认限制通常很低。

Linux

每 shell/脚本

shell 的限制是受 ulimit 支配的。使用 ulimit -a 可查看其状态信息。 举个例子,改变可打开最大文件数从 1024 到 10240,可以这么做:

  1. # ulimit -n 10240                    
  2. # 这只在shell中有用

ulimit 命令可以使用在脚本中来更改对此脚本的限制。

每 用户/进程

登录用户和应用程序的限制可以在 /etc/security/limits.conf 中配置。举个例子:

  1. # cat /etc/security/limits.conf
  2. *   hard    nproc   250              
  3. # 限制所有用户进程数asterisk hard nofile 409600          
  4. # 限制应用程序可打开最大文件数

系统级

用sysctl来设置内核限制。要使其永久,可以在 /etc/sysctl.conf 中进行配置。

  1. # sysctl -a                          
  2. # 显示所有系统限制
  3. # sysctl fs.file-max                 
  4. # 显示系统最大文件打开数
  5. # sysctl fs.file-max=102400          
  6. # 更改系统最大文件打开数
  7. # cat /etc/sysctl.conf
  8. fs.file-max=102400                   
  9. # 在 sysctl.conf 中的永久项
  10. # cat /proc/sys/fs/file-nr           
  11. # 在使用的文件句柄数

FreeBSD

每 shell/脚本

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

每 用户/进程

在 /etc/login.conf 中配置登录后的默认限制。未作限制的值为系统最大限制值。

系统级

内核限制同样使用 sysctl 来设置。永久配置,在 /etc/sysctl.conf 或 /boot/loader.conf 中。其语法与 Linux 相同,只是键值不同。

  1. # sysctl -a                          
  2. # 显示所有系统限制# sysctl kern.maxfiles=XXXX          
  3. # 最大文件描述符数kern.ipc.nmbclusters=32768           
  4. # 在 /etc/sysctl.conf 中的永久项kern.maxfiles=65536                  
  5. # Squid 通常用这个值kern.maxfilesperproc=32768
  6. kern.ipc.somaxconn=8192              
  7. # TCP 列队。apache/sendmail 最好用这个值# sysctl kern.openfiles              
  8. # 在使用的文件描述符数# sysctl kern.ipc.numopensockets     
  9. # 已经开启的 socket 数目

详情请看 FreeBSD 手册 11章。

Solaris

在 /etc/system 中的下列设置,会提高每个进程可以打开最大文件描述符的数量:

  1. set rlim_fd_max = 4096               
  2. # 一个进程可以打开文件描述符的"硬"限制set rlim_fd_cur = 1024               
  3. # 一个进程可以打开文件描述符的"软"限制

运行级别

Linux

一旦内核加载完成,内核会启动 init 进程,然后运行 rc 脚本,之后运行所有属于其运行级别的命令脚本。这些脚本都储存在 /etc/rc.d/rcN.d 中(N代表运行级别),并且都建立着到 /etc/init.d 子目录中命令脚本程序的符号链接。
默认运行级别配置在 /etc/inittab 中。它通常为 3 或 5:

  1. # grep default: /etc/inittab                                         
  2. id:3:initdefault:

可以使用 init 来改变当前运行级别。举个例子:

  1. # init 5                             
  2. # 进入运行级别 5

运行级别列表如下:

  • 0       系统停止

  • 1       进入单用户模式(也可以是 S)

  • 2       没有 NFS 特性的多用户模式

  • 3       完全多用户模式(正常操作模式)

  • 4       未使用

  • 5       类似于级别3,但提供 XWindow 系统登录环境

  • 6       重新启动系统

使用 chkconfig 工具控制程序在一个运行级别启动和停止。

  1. # chkconfig --list                   
  2. # 列出所有 init 脚本# chkconfig --list sshd              
  3. # 查看 sshd 在各个运行级别中的启动配置
  4. # chkconfig sshd --level 35 on       
  5. # 对 sshd 在级别 3 和 5 下创建启动项
  6. # chkconfig sshd off                 
  7. # 在所有的运行级别下禁用 sshd

Debian 和基于Debian 发行版像 Ubuntu 或 Knoppix 使用命令 update-rc.d 来管理运行级别脚本。默认启动为 2,3,4 和 5,停止为 0,1 和 6。

  1. # update-rc.d sshd defaults          
  2. # 设置 sshd 为默认启动级别
  3. # update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 .  
  4. # 用显示参数
  5. # update-rc.d -f sshd remove         
  6. # 在所有的运行级别下禁用 sshd
  7. # shutdown -h now (或者 # poweroff)  
  8. # 关闭停止系统

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.

  1. # /etc/rc.d/sshd status
  2. sshd is running as pid 552.
  3. # shutdown now                       
  4. # 进入单用户模式# exit                               
  5. # 返回到多用户模式# shutdown -p now                    
  6. # 关闭停止系统# shutdown -r now                    
  7. # 重新启动系统

同样可以使用进程 init 进入下列状态级别。举个例子: # init 6 为重启。

  • 0       停止系统并关闭电源 (信号 USR2)

  • 1       进入单用户模式 (信号 TERM)

  • 6       重新启动 (信号 INT)

  • c       阻止进一步登录 (信号 TSTP)

  • q       重新检查 ttys(5) 文件 (信号 HUP)

重设 root 密码

Linux 方法 1

在引导加载器(lilo 或 grub)中,键入如下启选项:

  1. init=/bin/sh

内核会挂载 root 分区,进程 init 会启动 bourne shell 而不是 rc,然后是运行级别。使用命令 passwd 设置密码然后重启。别忘了需要在单用户模式下做这些动作。
如果重启后 root 分区被挂载为只读,重新挂在它为读写:

  1. # mount -o remount,rw /
  2. # passwd                            
  3. # 或者删除 root 密码 (/etc/shadow)
  4. # sync; mount -o remount,ro /        
  5. # sync 在重新挂在为只读之前 sync 一下
  6. # reboot

FreeBSD 和 Linux 方法 2

FreeBSD 不会让你这么做。解决方案是用其他操作系统(像系统紧急修复光盘)挂载 root 分区,然后更改密码。

  • 用 live cd 或安装盘启动进入修复模式后,会得到一个 shell。

  • 用 fdisk 查找 root 分区。比如:fdisk /dev/sda

  • 挂载它并使用 chroot 命令:

  1. # mount -o rw /dev/ad4s3a /mnt
  2. # chroot /mnt                        
  3. # 改变程序执行时所参考的根目录位置为 /mnt# passwd
  4. # reboot

内核模块

Linux

  1. # lsmod                              
  2. # 列出所有已载入内核的模块# modprobe isdn                      
  3. # 载入 isdn 模块

FreeBSD

  1. # kldstat                            
  2. # 列出所有已载入内核的模块# kldload crypto                     
  3. # 载入 crypto 模块

编译内核

Linux

  1. # cd /usr/src/linux
  2. # make mrproper                      
  3. # 清除所有东西,包括配置文件
  4. # make oldconfig                     
  5. # 从当前内核配置文件的基础上创建一个新的配置文件
  6. # make menuconfig                    
  7. # 或者 xconfig (Qt) 或者 gconfig (GTK)
  8. # make                               
  9. # 创建一个已压缩的内核映像文件
  10. # make modules                       
  11. # 编译模块
  12. # make modules_install               
  13. # 安装模块
  14. # make install                       
  15. # 安装内核
  16. # reboot

FreeBSD

要改变和重建内核,需要拷贝源配置文件然后编辑它。当然也可以直接编辑 GENERIC 文件。

  1. # cd /usr/src/sys/i386/conf/
  2. # cp GENERIC MYKERNEL
  3. # cd /usr/src
  4. # make buildkernel KERNCONF=MYKERNEL
  5. # make installkernel KERNCONF=MYKERNEL

要重建完全的操作系统:

  1. # make buildworld                    
  2. # 构建完全的系统,但不是内核
  3. # make buildkernel                   
  4. # 使用 KERNCONF 配置文件编译内核
  5. # make installkernel
  6. # reboot
  7. # mergemaster -p                     
  8. # 建立临时根环境并比对系统配置文件
  9. # make installworld
  10. # mergemaster                        
  11. # 升级所有配置和其他文件
  12. # reboot

对于源的一些小改动,有时候简单的命令就足够了:

  1. # make kernel world                  
  2. # 编译并安装内核和系统
  3. # mergemaster
  4. # reboot

还没有评论.