您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页Linux常用技能

Linux常用技能

来源:化拓教育网

本博文旨在记录Linux使用过程中常遇到的一些问题和解决方案。 --- 笔者

1. 查看端口占用

当你需要使用某一端口时发现程序因为端口被占用而无法正常运行,你需要知道端口被什么程序占用,运行查看:

netstat -anpe | grep 端口

2. 查看命令行的运行参数

平时实验需要运行很多脚本程序,而且不同的脚本程序使用的脚本参数也不一样,有的很长有的很短,如果脚本有很多输出的话,脚本程序的设置很快就会被挤出程序以外,这时候你如果忘了正在运行的脚本使用的是什么设置怎么办?下面就教大家查看运行的程序及其参量:

  1. 使用top指令
top -u<username> -c

默认情况下top指令只显示程序名称(不包括参数),添加-c参数可以输出查看程序的参数。参数-u<username>仅用于基于用户名过滤输出列表,这样我们就可以在有限的屏幕空间上查看指定用户启动的程序。

  1. 使用 ps指令
ps -f -u<username> | grep <program>

指令ps用于查看当前运行的进程,默认情况下以简易模式输出当前机器上所有运行中的程序,一般而言运行的程序(包括系统程序和各用户运行的程序)数量比较大,不利于快速查看,我们可以通过设置-u参数来根据用户过滤出指定用户启动的活动程序,还能通过grep指令进一步实现按关键字过滤。参数-f可强制ps指令打印出程序参数。

  1. 查看/proc/<pid>/cmdline 信息
cat /proc/<pid>/cmdline

Linux系统中/proc目录是一个很特殊的目录,它保存着系统运行时信息。

/proc is very special in that it is also a virtual filesystem. It's sometimes referred to as a process information pseudo-file system. It doesn't contain 'real' files but runtime system information (e.g. system memory, devices mounted, hardware configuration, etc). For this reason it can be regarded as a control and information centre for the kernel. In fact, quite a lot of system utilities are simply calls to files in this directory. For example, 'lsmod' is the same as 'cat /proc/modules' while 'lspci' is a synonym for 'cat /proc/pci'. By altering files located in this directory you can even read/change kernel parameters (sysctl) while the system is running. Each of the numbered directories corresponds to an actual process ID.

3. 查看CPU占用前10的进程

使用top指令查看系统运行进程的时候,默认打印所有用户的活动进程,如果指定用户或组别,那么也只能显示指定用户和组别的活动进程,使用top指令难以实现本节所要实现的目的。下面我们一步步介绍怎么才能实现查看CPU占用前10的进程:

  1. 首先获取活动进程信息
## 通过`ps`指令活动活动进程信息
ps -aux
  1. 获取指定信息
    上一步中指令会打印所有用户的活动进程信息,包含内容很丰富,实际上我们查看前10进程的时候并不需要那么多详细的信息,而且信息太详细显示起来也比较麻烦,所以我们要有选择地显示感兴趣的信息:
## 仅显示nice值,用户,进程id,cpu用量,内存用量,cpu时间,进程启动至今总时长 和 进程名称
ps -au -o ni,user,pid,pcpu,pmem,cputime,etime,comm
  1. 获取指定用户的进程信息
    步骤2中的方法获得的信息虽然少了许多,但打印的进程单还是很长,其中有许多是root运行的系统启动的进程。我们在查看进程的时候更多的是关心用户启动的进程,这时候就要对进程按用户进行过滤:
  • 按用户过滤
ps -U user1,user2 -u user1,user2 -o ni,user,pid,pcpu,pmem,cputime,etime,comm
  1. 进程按照CPU用量排序并取前十
    这里还有些额外的处理,首先步骤3输出中包含标题,需要去除标题信息:
  • 去除标题,得到实际统计数据
ps -U user1,user2 -u user1,user2  -o ni,user,pid,pcpu,pmem,cputime,etime,comm | grep -v PID
  • 按CPU用量逆向排序
ps -U user1,user2 -u user1,user2 -o ni,user,pid,pcpu,pmem,cputime,etime,comm | grep -v PID | sort -rn -k +4
  • 用HEAD指令取前十
ps -U user1,user2 -u user1,user2 -o ni,user,pid,pcpu,pmem,cputime,etime,comm | grep -v PID | sort -rn -k +4 | head -10

head 指令默认返回前十行数据,可通过设置要返回的行数返回指定行的数据,如:返回前20行 head -20

最终指令如是:

ps -U user1,user2 -u user1,user2 -o ni,user,pid,pcpu,pmem,cputime,etime,comm | grep -v PID | sort -rn -k +4 | head -10

4. 查看内存用量前10的进程

方法与“查看CPU占用前10的进程”类似,如下:

ps -U user1,user2 -u user1,user2 -o ni,user,pid,pcpu,pmem,cputime,etime,comm | grep -v PID | sort -rn -k +5 | head -10

5. Linuxbrew使用brew安装的curl

Linuxbrew使用brew命令从网络获取信息时,默认使用/usr/bin/curl,而不管你是不是从brew安装了curl或者手动安装了curl,即便他们在PATH中的位置在系统默认curl前。这是因为brew代码中设置了PATH过滤:

# test-bot does environment filtering itself
if [[ -z "$HOMEBREW_NO_ENV_FILTERING" && "$1" != "test-bot" ]]
then
  PATH="/usr/bin:/bin:/usr/sbin:/sbin"

  FILTERED_ENV=()

所以我们在使用brew前设置HOMEBREW_NO_ENV_FILTERING 环境变量即可。例如:

HOMEBREW_FORCE_BREWED_CURL=1 HOMEBREW_NO_ENV_FILTERING=1 brew install curl
HOMEBREW_FORCE_BREWED_CURL=1 brew install hello

6. dpkg 批量删除

dpkg -l | grep libreoffice | awk '{print $2}' | xargs sudo dpkg -P

7. 查看拥有sudo权限的用户

默认情况下系统的sudo相关设置在,/etc/sudoers文件中定义,我们习惯性以为看sudo用户组的成员就能知道谁有高级权限时片面的理解,具体哪些用户或组有高级权限要看sudoer文件的配置

8. 查看显卡信息

## 查看显卡安装情况
## 列举已安装显卡
lspci | grep -i vga

## 查看显卡详情
## 02:00.0 VGA compatible controller: nVidia Corporation GT215 [GeForce GT 240] (rev a2)
lspci -v -s  02:00.0

## NVIDIA 显卡可使用nvidia-smi查看
nvidia-smi

我们还可以用lshw指令来查看显示硬件信息,命令使用方法如下:

lshw参数:

 -help 查看帮助
 -version  打印版本
 -X GUI显示,要装lshw-gtk 或者lshw-gui

输出的格式
-html          以HTML格式输出
-xml           以XML 格式输出
-short         显示设备列表,输出包括设备路径(path)、类别(class)以及简单描述
-businfo       输出包括总线信息、SCSI、USB、IDE、PCI地址等信息

选项:
-class CLASS    显示指定类别的设备
-C CLASS        同上
-c CLASS        同上
-disable TEST   不检测信息 像 pci 、isapnp、 cpuid等等
-enable TEST    与上面相反,启用检测   
-quiet          直接输出结果,不显示检测过程
-sanitize       无害输出 (会移除像硬件序列号等一些敏感信息)
-numeric        显示硬件id (PCI、USB等)

查看显示设备信息可使用 lshw -numeric -c video 或者 lshw -numeric -c display,下面是一个输出信息示例

WARNING: you should run this program as super-user.                                          
  *-display
       description: VGA compatible controller
       product: GM200 [GeForce GTX TITAN X] [10DE:17C2]                                      
       vendor: NVIDIA Corporation [10DE]
       physical id: 0
       bus info: pci@0000:03:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: vga_controller bus_master cap_list rom                                  
       configuration: driver=nvidia latency=0
       resources: irq:73 memory:fa000000-faffffff memory:e0000000-efffffff memory:f0000000-f1ffffff ioport:e000(size=128) memory:fb000000-fb07ffff                                                              
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.  

其中configuration参数部分表明当前设备使用的驱动类型(示例设备使用Nvidia驱动),可以使用lshw -c video | grep configuration 直接获取。

modinfo nvidia 查看驱动的详细信息,如下:

filename:       /lib/modules/4.4.0-137-generic/updates/dkms/nvidia.ko                        
alias:          char-major-195-*
version:        390.87
supported:      external
license:        NVIDIA
srcversion:     9680830EEE0BAB392576E99
alias:          pci:v000010DEd00000E00sv*sd*bc04sc80i00*                                     
alias:          pci:v000010DEd*sv*sd*bc03sc02i00*                                            
alias:          pci:v000010DEd*sv*sd*bc03sc00i00*                                            
depends:        ipmi_msghandler
retpoline:      Y
vermagic:       4.4.0-137-generic SMP mod_unload modversions retpoline                       
parm:           NVreg_Mobile:int
parm:           NVreg_ResmanDebugLevel:int
parm:           NVreg_RmLogonRC:int
parm:           NVreg_ModifyDeviceFiles:int
parm:           NVreg_DeviceFileUID:int
parm:           NVreg_DeviceFileGID:int
parm:           NVreg_DeviceFileMode:int
parm:           NVreg_UpdateMemoryTypes:int
parm:           NVreg_InitializeSystemMemoryAllocations:int                                  
parm:           NVreg_UsePageAttributeTable:int                                              
parm:           NVreg_MapRegistersEarly:int
parm:           NVreg_RegisterForACPIEvents:int                                              
parm:           NVreg_CheckPCIConfigSpace:int
parm:           NVreg_EnablePCIeGen3:int
parm:           NVreg_EnableMSI:int
parm:           NVreg_TCEBypassMode:int
parm:           NVreg_UseThreadedInterrupts:int                                              
parm:           NVreg_EnableStreamMemOPs:int
parm:           NVreg_EnableBacklightHandler:int                                             
parm:           NVreg_EnableUserNUMAManagement:int                                           
parm:           NVreg_EnableIBMNPURelaxedOrderingMode:int                                    
parm:           NVreg_MemoryPoolSize:int
parm:           NVreg_IgnoreMMIOCheck:int
parm:           NVreg_RegistryDwords:charp
parm:           NVreg_RegistryDwordsPerDevice:charp                                          
parm:           NVreg_RmMsg:charp
parm:           NVreg_AssignGpus:charp

Ref:

9. 删除添加的PPA源

## e.g. remove added graphics-drivers/ppa source
add-apt-repository ppa:graphics-drivers/ppa

10. 修改用户UID和GID

# change user foo to new uid=1066
usermod -u 1066 foo

# change group foo to new gid=2066
groupmod -g 2066 foo

11. 强制开机启动RPC bind服务

systemctl add-wants multi-user rpcbind.service

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务