Linux 运维相关

系统相关命令

  • 查看系统版本

>>> uname -a
>>> cat /etc/redhat-release  # RedHat 系统专属
  • 查看系统架构

>>> arch

yum 包管理器

yum 是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

  • ssh 安装

yum -y install openssh-clients
  • service 安装

yum -y install initscripts

CentOS6 系统相关

对于 CentOS6 系统来说,官方已经停止维护,但部分程序还会在部署该系统的服务器上运行,但升级成本(难度)过大,且时常会遇到一些系统底层相关的问题,故在此记录。

yum 更新

因为官方已经停止了 yum 的维护,但部署该系统的服务器安装软件时 yum 工具仍是第一选择,所以为了让 yum 继续在该系统上运行,需要执行以下操作:

  1. 禁用镜像加速插件

sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
  1. 备份基础源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  1. 更换为阿里源 (如报错,增加 -k 选项)

curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
  1. 清除 yum 缓冲

yum clean all
  1. 生成缓存

yum makecache

通过这几步操作后,yum 应该就可以正常使用了。

修复动态库版本

对于 CentOS6 系统来说,它默认的 libc.so.6 最高只支持 GLIBC_2.12,对于某些在较高系统下编译的软件,经常会报 version 'GLIBC_2.14' not found 这个错误,因此就导致软件无法正常使用,似乎除了更新系统库就别无他法了(但这稍有不慎可能会导致整个系统崩溃,因此不推荐使用)。

幸运的是通过 patchelf 我们可以使用自己安装的 glibc 对软件的动态库查找路径进行替换而对系统不产生任何影响,具体用法如下:

  • 替换动态库链接器

patchelf --set-interpreter /path/ld-2.14.so /application
  • 替换动态库(如 libc

patchelf --replace-needed libc.so.6 /path/libc-2.14.so ./application

其中,application 为要进行修改的程序或 so 文件,/path/xx 为用户自己安装的系统库文件

GLIBC 安装

  1. 下载对应版本的 GLIBC,下载地址在这

  2. 解压 glibc-xx.tar.gz 文件,同时在解压目录下新建一个 build 目录

>>> tar -zxvf glibc-xx.tar.gz
>>> cd glibc-xx
  1. 执行 configure 命令

../configure --prefix=/your-install-path
  1. 编译及安装

make -j 32 && make install
  1. 删除源代码

rm -rf glibc-xx

常用命令

cp 命令

cp -d 复制软链接

ldd 命令

ldd 命令用于打印程序或者库文件所依赖的共享库列表。

strace 命令

strace 是一个可用于诊断、调试和教学的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

  • 追踪每一种系统调用的耗时、次数和失败数

strace -c CMD
  • 显示系统调用的时间

strace -t CMD
  • 记录原因

我用它查看过 whoami 执行未成功的问题,最后定位到的原因是缺少 libnss_files.so.2 这个动态库。

查找重复文件

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

grep 命令

  • 精确查找 torch 或 tensorflow

grep -wE "torch|tensorflow" xxx

tmux 命令

  • 连接(重新附加)到已存在的 tmux 会话

tmux attach -t 0
  • 分离会话

先按 Ctrl+B,然后按 D(大写 D 或小写 d 均可)。

通过 ssh 远程使用服务器 jupyter notebook

  1. ssh 连接到服务器,创建 jupyter notebook 密码

jupyter notebook password
  1. 在服务器的某端口打开 jupyter notebook

jupyter notebook --no-browser --port=12345
  1. 建立 ssh 连接,将服务器打开的端口远程转发到本地

ssh -N -L 8080:localhost:12345 <user_name>@<host_ip>
  1. 本地打开 http://localhost:8080/ 使用 jupyter notebook

VSCode 远程开发(Shell)

  1. 安装 Remote SSH 插件,进行 SSH 连接配置,主要是配置 .ssh/config 文件

  2. 安装插件

  • shell-format:格式化工具(远程)

  • shellman:语法提示(本地)

  • shellcheck:语法检查(远程)

  • Code Runner:程序运行工具(远程)

问题记录

  1. 使用 sh 文件安装 anaconda 时出现 Error -3 from inflate: incorrect header check 错误

解决办法:先将 sh 文件压缩之后再上传到服务器解压安装。

  1. ~/.ssh/config 文件出现 Bad owner or permissions 错误

解决办法:文件权限位问题,设置 config 文件权限为 600 (chmod 命令)。

  1. SSH 免密失败并报错:no mutual signature algorithm

解决办法:ssh 连接时添加选项:-o PubkeyAcceptedKeyTypes=+ssh-rsa

ssh user@ip -i id_rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa

参考