Linux常用命令积累

Linux常用命令积累

常用命令

开关机

  • shutdown -h 0 立即关机
  • reboot 重启

用户

  • 修改密码: 管理员可以用过passwd user_name 修改任何用户的密码, 普通用户运行passwd只能修改自己的密码

程序, 进程

  • ps -ef 查看所有正在运行的进程
  • ps aux | grep mysql 查看特定的进程
  • top 查看进程实时信息
  • top -u <user_name> or ps -u <user_name>: 查看某个用户正在运行的程序
  • ll /proc/PID 查看进程启动时的绝对路径,输入的命令行命令等信息
  • 设置或显示环境变量
    export -p //列出当前的环境变量值
    export MYENV=7 //定义环境变量并赋值

文件操作

  • 查看文件列表: ls .

  • 列表形式展示文件信息: ll.

  • 显示当前的目录位置: pwd, pwd means print working directory.

  • 删除文件:rm filename
    删除文件夹:1. rmdir directoryname, 2. rm -r dir/ -r为recursive, -f为force

  • 查看文件大小:ls -lh filename
    查看当前文件夹下所有文件及文件夹的大小:du -h -max-depth=1 *
    查看指定文件夹的大小:du -sh dirname,s为sum, du means disk usage, -sh summarize human-readable.

  • 移动文件或文件夹:mv file_path dir_path
    移动多个文件:mv file1 file2 dir_path

  • 设置文件的许可(permission)有两种方式:
    absolute mode: chmod *** <file_name>, 其中***每个位置为设置三种拥有者的permission, 第一个位置是user, 第二个是group的, 第三个是other的, 每个位置上的数字代表不同的permission, 设置规则为:

numbermeans
0no permission
1eXcute
2Write
4Read

所以一类拥有者如只拥有读写permission, 那么对应位置为6, 拥有全部permission, 位置对应数值就为7.
symbolic mode: symbolic mode不像absolute mode需要同时设置三类拥有者的许可, symbolic 可以单独设置某一类的许可信息. 其对应的标记为

symbolmeans
uuser
ggroup
oother
aall
+adding
-remove
=overriding

for example, 对agatha.txt文件设置group拥有类添加excute permission: chmode g+X agatha.txt, 当然, 也可同时设置多种拥有者的permission:chmod o-rw+x,u+x agatha.txt 其含义为:对other类拥有者移除读写,添加执行, 对user 添加执行.

文本操作

  • grep
    使用grep命令可以在文本中查找指定的字符串, 全称:Global search Regular Expression and Print out the line. grep可以使用正则表达式进行全局搜索.

其他

  • 查看命令所在路径: where is jupyter返回所有匹配,which jupyter返回第一个匹配的,即所用的

常用应用

java

ps -ef|grep java 查看Java运行程序
java -jar gdelt_Crawl_trans.jar 运行Java程序

screen

screen -S screen_name 创建一个为screen_name的screen
screen -ls 查看所有的screen
screen -r screen_name 进入screen_name的screen
ctr+a+d 退出screen不关闭screen
screen -R session_name and exit 删除 screen way1,需要进入session内删除
screen -X -S session_id quit 删除 screen way2
screen -D -r screen_id( 18352 ) 解释:-D -r 先删除前一用户再登陆,解决:出现screen session的状态为Attached但是却连不上的情况
解决screen -r glean后出现 WriteMessage: Bad file descriptor的问题,通过screen_id进入:screen -r 28552可以解决
删除所有screen: killall screen

conda

conda 与 screen之间存在的问题

使用conda建立虚拟环境后,再用screen创建界面去运行程序的时候,会出现环境参数调用错位等问题。现阶段的解决办法是:在非conda环境下进入screen界面,再在screen界面里面启用conda。

Conda常用命令
  • conda关闭自启动base虚拟环境
    conda config --set auto_activate_base false
    也可通过在conda的配置文件~/.condarc文件末尾添加auto_activate_base: false
  • 查看conda源
    conda config --show-sources
  • 查看conda 环境列表
    conda env list
  • 删除conda env
    conda remove --name env_name --all
  • 创建env, 指定python版本
    conda create -n env_name python=3.9
  • 更改下载源
    更改pip下载源:
    mkdir ~/.pip,然后: vim ~/.pip/pip.conf
    写入后保存:
[global]
index-url=https://mirrors.cloud.aliyuncs.com/pypi/simple/

[install]
trusted-host=mirrors.cloud.aliyuncs.com

更改conda下载源:
运行 conda config --set show_channel_urls yes
运行 vim ~/.condarc
覆盖键入:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - http://mirrors.aliyun.com/anaconda/pkgs/main
  - http://mirrors.aliyun.com/anaconda/pkgs/r
  - http://mirrors.aliyun.com/anaconda/pkgs/msys2
custom_channels:
  conda-forge: http://mirrors.aliyun.com/anaconda/cloud
  msys2: http://mirrors.aliyun.com/anaconda/cloud
  bioconda: http://mirrors.aliyun.com/anaconda/cloud
  menpo: http://mirrors.aliyun.com/anaconda/cloud
  pytorch: http://mirrors.aliyun.com/anaconda/cloud
  simpleitk: http://mirrors.aliyun.com/anaconda/cloud

清除索引缓存,保证用的是镜像站提供的索引,conda clean -i

vim

  • 在vim的普通模式下键入“ggdG”即可删除其中全部内容。
    说明:gg:光标跳转到该文件的行首;dG:删除光标行及其以下行的全部内容.(注:d为删除,G为光标跳转到末尾行)

查看参数

硬盘

lsblk list block,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息,可用于查看系统的硬盘空间
df -h (disk free)查看查看磁盘剩余空间信息

内存

dmidecode --type memory 查看内存条信息
free -m 查看内存大小

操作系统版本

lsb_release -a 查看操作系统版本

CPU

lscpu 查看cpu的统计信息

blue@blue-pc:~$ lscpu
Architecture:          i686            #cpu架构
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian   #小尾序
CPU(s):                4               #逻辑cpu个数
On-line CPU(s) list:   0-3
Thread(s) per core:    1               #每个cpu核,只能支持一个线程,即不支持超线程
Core(s) per socket:    4               #每个物理CPU的核数
Socket(s):             1               #物理CPU个数
Vendor ID:             GenuineIntel    #cpu产商 intel
CPU family:            6
Model:                 42
Stepping:              7
CPU MHz:               1600.000
BogoMIPS:              5986.12
Virtualization:        VT-x            #支持cpu虚拟化技术
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K

总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每个物理CPU的核数 X 每个核心线程数

显卡

  • lspci | grep -i nvidia 查看显卡信息
  • nvidia-smi 查看GPU使用情况

表头释义:

  • Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A;
  • Temp:显卡内部的温度,单位是摄氏度;
  • Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
  • Pwr:能耗表示;
  • Bus-Id:涉及GPU总线的相关信息;
  • Disp.A:是Display Active的意思,表示GPU的显示是否初始化;
  • Memory Usage:显存的使用率;
  • Volatile GPU-Util:浮动的GPU利用率;
  • Compute M:计算模式;
  • Processes: 显示每块GPU上每个进程所使用的显存情况。
  • lshw -C display 显示各个显卡详细信息

  • 实时查看GPU的使用情况:watch -n 5 nvidia-smi,参数5为每5秒刷新一次,nvidia-smi可以替换成其他命令,同样也可进行实时查看

  • 在nvidia-smi中查看gpu使用情况,进程太多会被折叠,可以使用fuser -v /dev/nvidia*查看完成进程列表,想要停掉某个进程,使用sudo kill -9 PID即可,停掉某个用户的所有进程,使用killall -u user_name

IP

  • ifconfig 查看IP信息, 需要事先安装net-tools, 对于新机器, 可能事先没有安装, 同样可以查看IP信息的还有ip addr, 这个不用安装什么.

编写shell script

shell 是一个命令解释器,是介于操作系统内核与用户之间, 被称为解释性语言或脚本语言。它可以将系统调用、公共程序、工具和编译过的二进制程序粘合在一起调用,所以有时候脚本语言又叫做胶水语言。

执行 shell script

  1. 新建一个脚本文件,文件名自定义,文件名后缀可有可无都可,但为方便人识别,一般缀上.sh
    vim test.sh,键入i,进入INSERT模式,按顺序写好执行命令,如:
python test1.py
python test2.py

写好后,键入Esc退出INSERT模式,键入:qw保存文件退出

  1. 执行脚本,可以bash test.sh,或./test.sh,后者需要赋予文件执行权限chmod +x test.sh

相关语法

  • # 为注释

  • : 为空命令,

  • > 有导入的意思, :> file_name.c 就会把file_name.c这个文件清空.
    >/dev/null 为将标准输出重定向到空设备文件, 不输出任何信息到终端. 与1>/dev/null 相同.
    2>&1 是将标准错误输出重定向到与标准输出相同的输出端,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件.
    0 表示标准输入, 1 表示标准输出, 2 表示错误输出.

  • if-else 判断语句

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
fi                  #这里将if反过来写,结束if语句的意思
  • export命令用于设置或显示当前环境变量.在 shell 中执行程序时, shell会提供一组环境变量. export 可新增, 修改或删除相关环境变量, 供后续执行的程序使用。export的效力仅限于该次登陆操作. e.g.:
    export -p //列出当前的环境变量值
    export MYENV=7 //定义环境变量并赋值

配置系统环境

配置path

可以配置的文件有:

  1. 系统环境配置文件:.profile;
  2. bash shell每次打开时的执行文件:.bashrc.

用户单独的在~/目录下,系统(影响所有用户)的在etc/目录下,在.profile中可以加入调用路径格式: export PATH=”$PATH:path1:path2 …” 或者export PATH="~/anaconda3/bin":$PATH,之后再source */.profile一下进行激活即可.

配置IP

  • 确定IP. 对于静态网, IP需要自己配置, 如何配置呢? 如果网络部门分配给你们单位一个段的IP, 比如172.20.201.135-172.20.201.142, 那么你们就可以从中随便挑选一个还没有绑定机器的IP设为新机器的IP就行, 那又出现一个问题就是如何确定这些段的IP哪些已经被占用,哪些还没有被占用呢? 如果你对单位的机器比较了解, 自然就没有这个问题了, 如果你们单位的机器比较多, 那么可能就需要向网络部门询问了, 他们知道你们哪些机器占用了哪些IP. 或者你也可以采取设定IP尝试的方法, 即使用该段的一个IP进行配置, 如果配置网络连通, 即说明没有产生冲突, 若没有连通, 则说明产生了冲突(此方法本人并没有尝试).
  • 查看网口. ip addr查看哪个网口连上了网线, 对比, 连上网线的网口有’UP’提示.
  • 配置文件. 对于Ubuntu 18.04, 网络管理改成了netplan方式 ,配置文件在/etc/netplan/目录下. cd /etc/netplan, 查看是否有01-network-manager-all.yaml文件, sudo vim 01-network-manager-all.yaml/添加配置, 注意要以管理员方式打开, 添加sudo前缀. 然后添入:
network:
  version: 2
  renderer: NetworkManager
  ethernets:
          eno2:
                  dhcp4: false
                  addresses:
                  - 172.20.201.135/28
                  nameservers:
                          addresses:
                          - 172.16.100.180 # 有时候这个不能用
                          - 119.29.29.29 # 腾讯DNSPod推出的新公共DNS服务器
                  gateway4: 172.20.201.129

后期有出现了联网问题, 发现ping baidu.com, ping不通, 但ping baidu.com的ip却能ping通, 说明是DNS服务器的问题, 所以在nameservers里又加了一个119.29.29.29服务地址, 该IP地址网上说是腾讯DNSPod推出的新公共DNS服务器地址.

dhcp4默认是true,由于是这里配置的是静态IP,所以改为false.
addresses是ip,/28是子网掩码,28表示的二进制子网掩码里有28个1,用点分十进制表示为255.255.255.240。子网掩码的计算可以百度任意ip地址计算器就可以计算.
gateway4是网关, nameservers是DNS, 注意yaml文件里不要有任何tab,否则导致不识别。

  1. 测试一下:sudo netplan try
  2. 没有问题就应用: sudo netplan apply

更换国内软件源

系统篇: ubuntu 18.04 更换国内软件源

  1. 进入文件夹, 查看/etc/apt/sources.list文件的内容是否需要修改;
    cd /etc/apt/
    vim sources.list
  2. 备份原始文件, 防止错误修改造成不良后果, sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  3. 清空后, 添加阿里源:
deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

注意: 这里的版本是系统的版本是Ubuntu 18.04, 不同的系统版本可能填入的内容不同.
4. 更新源和软件

  • 更新获取软件源提供的软件列表
    sudo apt-get update one more word, apt means: Advanced Packaging Tool.
    (apt-get update是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。apt-get update只是更新了apt的资源列表,没有真正的对系统执行更新。如果需要,要使用apt-get upgrade来更新。)
  • 更新软件
    sudo apt-get upgrade

其他相关操作

可用于服务器之间的同步配置操作

NFS: Network File System
使用这个,在一台服务器中配置了相关环境,在其他服务器中将会自动同步,不用重复配置

购置新机器需要进行的配置

  1. 配置IP
  2. 更换国内软件源

遇到的问题及解决方法

远程连接无法

发现能 ping通服务器, 但无法使用xshell连接服务器, 然后使用telnet 172.20.201.136 22查看22端口是否打开, 发现22端口没有打开, 所以猜测是ssh没有启动或者没有安装的问题. SSH 的架构是服务器/客户端模式,两端运行的软件是不一样的, OpenSSH 的客户端软件是 ssh,服务器软件是 sshd, 显示屏, 键盘直连服务器, 输入sshd,发现果然没有安装, 使用sudo apt install openssh-server安装ssh服务器端, 下载后重新连接, 发现能连接成功.
参考: ssh安装与配置(详解版).

执行nvidia-smi报版本错误

输入命令nvidia-smi, 报错:

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

上网查阅及根据自己的判断是服务器ubuntu系统内核更新导致的.首先使用uname -r 查看当前的内核版本是:linux-image-5.4.0-149-generic, 尝试选择进入较低的内核, 查看执行该命令是否还有问题. 首先重启服务器, 使用键盘加显示器直连服务器, 然后按Esc进入引导界面, 选择ubuntu advanced options选项, 然后选择较低的版本选项linux-image-5.4.0-148-generic, 然后进入后再输入命令nvidia-smi, 发现没有问题了, 确认是内核版本问题.
为让后续服务器重启后自动选择较低版本的内核, 按网上方法修改grub文件内容:sudo vim /etc/default/grub.

# GRUB_DEFAULT=0 将该行改为以下一行
GRUB_DEFAULT="1> 2"

“1> 2"的含义为:第一个选项是索引0,第二个是1,第三个是2,依此类推。在一个GRUB菜单选项中, Ubuntu为0,Ubuntu advanced options为1, …, 我们选择1, 再进入子选项中,使用’>'符号来指定有一个子菜单, 我们选择了较低版本的内核, 索引是2, 因此为"1> 2”(注意中间有个空格). 保存退出后运行命令:sudo update-grub使其生效.
后续工作, 禁止内核自动更新:

sudo gedit /etc/apt/apt.conf.d/10periodic

sudo gedit /etc/apt/apt.conf.d/20auto-upgrades

将两个文件中的配置信息都置为0后保存退出.

参考: NVIDIA-SMI failed 解决办法.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值