linux常用指令

linux指令入门

文件类

文件拷贝

cp命令是Unix和Linux系统中用于复制文件和目录的命令

命令语法

1
cp [选项] 源文件或目录[可多个] 目标文件或目录

命令选项

  • -a:归档模式,保留源文件或目录的所有属性,包括权限、所有者、时间戳等
  • -f:强制模式,不提示确认即覆盖目标文件或目录
  • -i:交互模式,覆盖目标文件或目录前询问是否确认
  • -r:递归模式,复制目录及其下所有文件和子目录
  • -v:详细模式,显示复制的每个文件或目录名称

本地拷贝

cp 命令用于复制文件或目录,以下是一些 cp 命令的示例,涵盖了各种常见用法:

  1. 将文件从一个位置复制到另一个位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 将file.txt复制到目标目录
    cp file.txt /path/to/destination/

    # 复制多个文件到目标目录
    cp file1.txt file2.txt /path/to/destination/

    # 保留源文件的元数据
    cp -a file.txt /path/to/destination/

    # 强制复制,覆盖目标文件,即覆盖目标文件(如果目标已存在),`-f` 选项用于强制复制,即使目标文件已存在
    cp -f file.txt /path/to/destination/

    # 交互式复制,提示是否覆盖,`-i` 选项用于交互式复制,会提示是否覆盖目标文件
    cp -i file.txt /path/to/destination/

    # 复制并显示进度条,`-v` 选项用于显示详细的复制信息,包括进度
    cp -v file.txt /path/to/destination/
  2. 复制整个目录及其内容到目标目录

    1
    2
    # `-r` 选项用于递归地复制目录及其内容
    cp -r /path/to/source_directory /path/to/destination_directory/
  3. 将多个文件复制到一个目录并合并为一个文件

    1
    2
    # 合并为一个文件
    cp file1.txt file2.txt /path/to/destination/singlefile.txt
  4. 将文件复制到另一个目录并重命名

    1
    2
    # 复制并重命名
    cp file.txt /path/to/destination/newfile.txt

这些示例涵盖了 cp 命令的常见用法,您可以根据您的具体需求进行调整。请注意,在进行文件操作时,请小心操作,以避免不必要的数据丢失或覆盖

远程拷贝

scp(Secure Copy Protocol)是一个用于在本地和远程系统之间进行安全文件传输的命令行工具

它使用 SSH 协议来加密传输数据,通常用于在不同的计算机之间复制文件和目录。以下是 scp 命令的基本语法:

语法

1
scp [选项] [源] [目标]
  • 选项:可以是多个选项,用于指定 scp 的不同行为。以下是一些常用选项:

    • -r:递归复制目录及其内容
    • -p:保留文件的权限和时间戳
    • -i:指定要使用的身份验证密钥文件
    • -P:指定 SSH 服务器的端口号(默认为 22)
    • -q:安静模式,减少输出信息
  • :指定要复制的源文件或目录的路径

    可以是本地文件/目录或远程文件/目录,远程文件/目录的格式通常为 [user@]host:source,其中 user 是远程用户,host 是远程主机,source 是源文件/目录路径

  • 目标:指定要将文件/目录复制到的目标位置

    可以是本地路径或远程路径,远程路径的格式通常为 [user@]host:destination,其中 user 是远程用户,host 是远程主机,destination 是目标路径

远程拷贝文件(-P 是指定端口,-r 是循环复制)

1
scp -P 8002 -r root@192.168.2.1:/home/hyc/test /home/hyc/

文件权限

一文带你学习Linux 中的文件权限概念和相关命令

在 Linux 中,每个文件和目录都有相应的权限设置,用于确定哪些用户或组可以对其进行访问、读取、写入或执行操作

文件权限定义了对文件的访问级别,确保只有经过授权的用户才能对文件进行操作,从而提高系统的安全性

权限类别

文件权限可以分为三个部分:用户权限、组权限和其他权限:

  1. 用户权限: 用户权限指的是文件的所有者对文件的权限。文件的所有者可以是系统中的任何用户。以下是用户权限的字符表示:
    • r(读取):允许所有者读取文件内容或查看目录内容
    • w(写入):允许所有者修改文件内容或在目录中创建、删除文件
    • x(执行):对于文件,允许所有者执行文件;对于目录,允许所有者进入该目录
    • -(无权限):表示没有相应的权限
  2. 组权限: 组权限指的是文件所属组中的用户对文件的权限。每个文件都会关联一个所属组。以下是组权限的字符表示:
    • r(读取):允许组成员读取文件内容或查看目录内容
    • w(写入):允许组成员修改文件内容或在目录中创建、删除文件
    • x(执行):对于文件,允许组成员执行文件;对于目录,允许组成员进入该目录
    • -(无权限):表示没有相应的权限
  3. 其他权限: 其他权限指的是不属于文件所有者和所属组的用户对文件的权限。以下是其他权限的字符表示:
    • r(读取):允许其他用户读取文件内容或查看目录内容
    • w(写入):允许其他用户修改文件内容或在目录中创建、删除文件
    • x(执行):对于文件,允许其他用户执行文件;对于目录,允许其他用户进入该目录
    • -(无权限):表示没有相应的权限

权限表示

权限的表示方式有如下几种:

  1. 文件权限的表示方式: 在 Linux 中,文件权限用一串字符来表示,共有 10 个字符,可以分为四个部分:文件类型、用户权限、组权限和其他权限

    文件权限的表示方式如下

    1
    - rwxrwxrwx

    其中,每个字符的含义如下:

    • 第一个字符表示文件类型。常见的文件类型包括 -(普通文件)和 d(目录)
    • 后面的三个字符表示用户权限,即文件所有者对文件的权限
    • 接下来的三个字符表示组权限,即文件所属组的用户对文件的权限
    • 最后的三个字符表示其他权限,即其他用户对文件的权限

    每个权限字符可以是以下四个字符之一:

    • r(读取):允许读取文件内容、查看目录内容
    • w(写入):允许修改文件内容、在该目录中创建、删除文件
    • x(执行):对于文件,允许执行文件;对于目录,允许进入该目录
    • -(无权限):表示没有相应的权限
  2. 权限数字表示法: 权限数字表示法使用数字来表示权限设置。每个权限字符都被赋予一个特定的数字值:

    • r:4
    • w:2
    • x:1
    • -:0

    要设置文件权限,可以将这些数字相加。例如,要为文件所有者设置读取和写入权限,可以运行以下命令:

    1
    chmod 6 file_name

    这将为文件所有者设置读取和写入权限(4+2=6)

  3. 权限符号表示法: 权限符号表示法使用符号来指定权限设置。以下是常用的权限符号表示法:

    • +:添加权限
    • -:移除权限
    • =:设置权限

    使用权限符号表示法时,可以将符号与权限字符组合使用。例如,要为文件所有者添加写入权限,可以运行以下命令:

    1
    chmod u+w 文件名

    这将为文件所有者添加写入权限,可以使用以下符号来表示不同的权限:

    • u:文件所有者
    • g:文件所属组
    • o:其他用户
    • a:所有用户(包括所有者、所属组和其他用户)

    例如,要为文件所有者和文件所属组添加读取和写入权限,可以运行以下命令:

    1
    chmod ug+rw 文件名

    这将为文件所有者和文件所属组添加读取和写入权限

语法格式

语法格式:chmod [选项] 权限 文件,其中,权限可以使用权限符号表示法权限数字表示法

1
chomd -R 777 /home/hyc

创建文件夹

在 Linux 中,你可以使用 mkdir 命令来创建文件夹(目录)

1
mkdir -p -m 755 OUTPUT_DIR
  • mkdir: 表示创建目录(make directory)
  • -p: 表示递归创建目录,如果指定的目录路径中的某些父目录不存在,-p 选项会自动创建这些父目录,而不会报错
  • -m: 使用 -m 选项可以指定创建目录时的权限

创建多个目录可以用

1
mkdir dir1 dir2 dir3

删除文件(夹)

可以使用 rm 命令来删除文件和目录,请谨慎使用此命令,因为删除操作是不可逆的,删除后的文件和目录无法恢复

1
rm [选项] 文件名

可以使用不同的选项来改变删除行为。一些常用的选项包括:

  • -f:强制删除,无需确认
  • -i:交互式删除,删除前会进行确认
  • -r-R:递归删除,用于删除目录及其内容

删除文件

1
rm example.txt

删除文件夹

1
rm -r 文件夹名

移动和更名

1
2
3
4
5
# 移动文件
mv file.txt /path/to/destination/

# 更名文件
mv file.txt /path/to/destination/newfile.txt

查找搜索

这三个命令适用于不同的用途。如果您需要按照文件属性、大小、权限等条件来搜索文件,并且需要搜索用户文件夹中的文件,find 是更适合的选择

如果您只需要快速搜索文件名,并且可以接受不太详细的搜索结果,locate 可能更适合

whereis 主要用于查找系统命令的位置

find

find 命令是一种强大的文件搜索工具,可以按照文件属性、名称、大小等多个条件来搜索文件

可以使用 find 来搜索整个文件系统,包括子目录

它支持使用通配符和正则表达式来指定搜索条件

find 的搜索是实时的,即每次运行都会进行完整的文件系统扫描,因此可能比较慢,特别是在大型文件系统上

1
2
# 在指定目录中搜索文件名为 "file.txt" 的文件
find /path/to/search -name "file.txt"

按照文件类型搜索

1
2
# 语法: find 搜索路径 [选项] 搜索内容
find /home -type d -name huangyc
  • -type d:查找目录
  • -type f:查找普通文件
  • -type l:查找软链接文件

locate

locate 命令使用数据库来快速搜索文件,因此通常比 find 快得多

它默认搜索整个文件系统,但通常限于搜索文件名

locate 不支持通配符和正则表达式,只能搜索文件名的完全或部分匹配

由于使用数据库,因此需要定期更新数据库以确保搜索结果的准确性,可以使用 updatedb 命令来手动更新数据库

1
2
3
4
5
# 搜索文件名为 "file.txt" 的文件
locate file.txt

# ==> 等价于
find / -type f -name "file.txt"

whereis

whereis 命令用于查找可执行文件、源代码和帮助文档的位置

它通常用于查找系统命令或程序的二进制文件、源代码和手册页

whereis 只返回命令的位置,不搜索用户文件或其他文件

1
2
# 查找命令 ls 的位置
whereis ls

文件查看

查看文件全部内容

1
2
# > 表示输出到文件,>>表示追加到文件末尾
cat file_name.txt > out_file.txt

随机抽取文件中的行

1
2
3
shuf -n 100 samples.jsonl
# 或者
sort -R samples.jsonl | head -n 100

从文件的末尾开始输出文件内容。它常用于查看和监控文件的尾部内容,或者查看新添加到文件中的内容

1
2
3
4
5
# 这将输出文件的尾部内容,并随着文件的增长实时刷新输出。这对于查看和监控日志文件特别有用
tail -f file_name.log

# 输出文件的最后N行。例如,tail -n 20 myfile.txt 将显示 myfile.txt 的最后20行
tail -n 20 file_name.log

磁盘类

查看某个文件或目录占用磁盘空间的大小(需要进入到当前目录)

1
du -ah --max-depth=1

查看全局文件系统磁盘占用

1
df -h

查看当前路径下 各文件夹的磁盘占用

1
du -sh *

查看磁盘忙碌情况

1
iostat -dx 2 100

防火墙

端口类

防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 重启防火墙
firewall-cmd --reload

# 开机启动防火墙
systemctl enable firewalld

# 开启防火墙
systemctl start firewalld

# 查看防火墙状态
firewall-cmd --state

# 禁止防火墙开机启动
systemctl disable firewalld

# 停止防火墙
systemctl stop firewalld

查看端口占用

1
2
3
4
5
6
7
8
9
10
# 查看已开放的端口
firewall-cmd --list-ports

# 或
# yum install net-tools
# apt-get install net-tools #适用于Debian和Ubuntu等发行版
netstat -atunlp

# 查看程序端口占用
lsof -i:6006

img

开启和关闭端口

1
2
3
4
5
6
7
8
# 开放端口(开放后需要要重启防火墙才生效)
firewall-cmd --zone=public --add-port=3338/tcp --permanent

# 关闭端口(关闭后需要要重启防火墙才生效)
firewall-cmd --zone=public --remove-port=3338/tcp --permanent

# 配置立即生效
firewall-cmd --reload

win端口

拓展下windows下的端口查找和kill操作

1
2
3
4
5
6
7
8
9
10
11
C:\Users\Administrator>netstat -aon | findstr "4000"
TCP 0.0.0.0:4000 0.0.0.0:0 LISTENING 12128
TCP 127.0.0.1:4000 127.0.0.1:57174 TIME_WAIT 0
TCP 127.0.0.1:4000 127.0.0.1:57175 TIME_WAIT 0
TCP [::]:4000 [::]:0 LISTENING 12128

C:\Users\Administrator>tasklist|findstr "12128"
node.exe 12128 Console 3 141,152 K

C:\Users\Administrator>taskkill /T /F /PID 12128
成功: 已终止 PID 12128 (属于 PID 24224 子进程)的进程。

进程类

1
2
3
4
5
6
# 进程对应的路径查询
pwdx pid
> 226006: /root/autodl-tmp/hyc/FlagEmbedding-master

# 杀死指定进程
kill -9 pid

进程挂起与恢复

在Unix和类Unix系统(如Linux和macOS)中,fg 命令用于将后台作业带回到前台继续执行。当你在终端中运行一个命令时,如果按下 Ctrl+Z,该命令会被挂起(暂停)并被放到后台。这时,你可以使用 fg 命令来恢复这个作业

fg %1 命令中的 %1 是一个作业标识符,它指的是作业列表中的第一个作业。在Unix/Linux系统中,当你使用 jobs 命令查看当前会话中的作业列表时,每个作业都会有一个编号,例如 [1][2] 等。%1 就是指这个列表中的第一个作业

如果没有指定作业编号,fg 命令默认会恢复最近一个被挂起的作业

批量杀死进程

查看进程号

1
2
3
4
[root@iZ2zeh6nc313zs4azjijjnZ ~]# ps -ef | grep gitbook | grep -v grep|awk '{print $2}'
24064
29387
30425

方式一:batch_shell

1
2
3
4
5
6
7
8
#!/bin/sh
dsp_admin_id=`ps -ef | grep gitbook | grep -v grep|awk '{print $2}'`
echo $dsp_admin_id
for id in $dsp_admin_id
do
kill -9 $id
echo "killed $id"
done

方式二:单行执行

1
2
#!/bin/sh
ps -ef | grep gitbook | grep -v grep|grep 4000| awk '{print $2}' | xargs kill -9

解压缩

压缩

1
2
3
4
5
6
7
8
9
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar
tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩

// 带排除路径的参数(注意--exclude参数 必须写在前面,否则无效)
tar --exclude=Qwen/datas --exclude=Qwen/Firefly-master/output --exclude=Qwen/BGE_M3 -czf Qwen.tar.gz Qwen

rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux

zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

解压缩

1
2
3
4
5
6
7
8
9
10
tar -xvf file.tar -C DestPath 1.txt //解压 tar包  1.txt表示只需要解压出这个文件,默认解压所有
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z

unrar e file.rar DestPath //解压rar

unzip file.zip //解压zip

bzip2 -d file.bz2

在命令行工具中,-dbzip2 命令的一个选项,表示解压缩(decompress)。当你使用 bzip2 命令来处理 Bzip2 压缩的文件时,-d 选项告诉命令执行解压缩操作。

具体来说,bzip2 -d 文件名.bz2 命令告诉系统将名为 “文件名.bz2” 的 Bzip2 压缩文件解压缩,还原为原始文件。如果不使用 -d 选项,bzip2 命令将默认执行压缩操作。

所以,-d 是一个用于指示解压缩操作的命令行选项。

日期时间

显示日期

1
2
[root@iZ2zeh6nc313zs4azjijjnZ ~]# date
20220312日 星期六 10:57:52 CST

显示日历

1
2
3
4
5
6
7
8
[root@iZ2zeh6nc313zs4azjijjnZ ~]# cal
三月 2022
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

环境变量

在CentOS操作系统中,您可以使用几种方式来设置环境变量。以下是其中一些常见的方法:

/etc/profile文件

通过/etc/profile文件:在CentOS中,可以编辑/etc/profile文件来设置系统范围的环境变量。打开该文件并在文件末尾添加您想要设置的环境变量,例如:

1
export MY_VARIABLE=/path/to/my/directory

保存文件后,重新登录或运行source /etc/profile以使更改生效

~/.bash_profile或~/.bashrc

通过~/.bash_profile或~/.bashrc文件:每个用户可以在其主目录中的.bash_profile.bashrc文件中设置个人环境变量。这些文件会在用户登录时自动加载。打开其中一个文件,并在文件末尾添加类似的行:

1
export MY_VARIABLE=/path/to/my/directory

保存文件后,注销并重新登录,或者使用命令source ~/.bash_profile(或source ~/.bashrc)来加载更改

/etc/environment文件

通过/etc/environment文件:可以编辑/etc/environment文件来设置系统范围的全局环境变量。该文件包含逐行的”key=value”对。例如:

1
MY_VARIABLE=/path/to/my/directory

保存文件后,重新登录或重启系统以使更改生效

命令行临时设置

可以在命令行中临时设置环境变量,仅对当前会话有效。使用以下语法:

1
export MY_VARIABLE=/path/to/my/directory

这将在当前会话中设置环境变量,但在注销或重新启动后不会保留

请注意,设置环境变量后,您可能需要重新启动相关应用程序或终端窗口,以便它们能够读取新的环境变量值

后台执行

systemctl方式

cloudreve私有云盘配置后台运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vi /usr/lib/systemd/system/cloudreve.service

# 输入以下内容,注意最好别带中文
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
Wants=network.target

[Service]
Type=simple
WorkingDirectory=/home/software/cloudreve
ExecStart=/home/software/cloudreve/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

更新重启服务

1
2
3
4
5
6
7
8
# 更新配置
systemctl daemon-reload

# 启动服务
systemctl start cloudreve

# 设置开机启动
systemctl enable cloudreve

管理命令

1
2
3
4
5
6
7
8
9
10
11
# 启动服务
systemctl start cloudreve

# 停止服务
systemctl stop cloudreve

# 重启服务
systemctl restart cloudreve

# 查看状态
systemctl status cloudreve

nohup方式

1
nohup python run.pt > log.log &

svn基本使用

centos安装svn客户端

1
2
3
4
5
# 安装svn客户端
yum install mod_dav_svn

# 查看当前svn的版本
svnserve --version

拉取项目(已存在)

1
svn checkout svn://10.10.13.13

提交上传文件

1
2
3
svn add <文件路径>

svn commit -m "提交说明" <文件路径>

如果要提交整个目录下的所有文件,可以将 <文件路径> 替换为目录的路径

更新文件

checkout只在第一次链接时使用一次,以后如果进行更新操作请使用update指令

sh脚本

简述

在 Linux 中,.sh 文件通常表示一个 Shell 脚本。Shell 脚本是一种文本文件,包含一系列 Shell 命令,这些命令按照脚本文件的顺序依次执行。Shell 脚本通常用来自动执行一系列任务,可以包括文件操作、系统配置、运行程序等。

Shell 脚本的文件扩展名 .sh 表示这是一个 Shell 脚本文件,而在文件的开头一般会包含指定解释器的声明,例如:

1
#!/bin/bash

上述声明告诉系统使用 Bash 解释器来执行该脚本。#!/bin/bash 称为 “shebang” 行,用于指定脚本的解释器。

以下是一个简单的 Shell 脚本的示例,该脚本用于输出当前用户的用户名和主目录:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# 获取当前用户的用户名
username=$(whoami)

# 获取当前用户的主目录
home_directory=$(echo ~)

# 输出信息
echo "当前用户:$username"
echo "主目录:$home_directory"

你可以将上述脚本保存为一个 .sh 文件,例如 myscript.sh,然后通过在终端中运行 ./myscript.sh 来执行它。

Shell 脚本是 Linux 中强大而灵活的工具,用于简化和自动化许多系统任务。不同的 Shell(如 Bash、Zsh、Sh等)提供了各种功能和语法,使得脚本编写更加灵活。

用法示例

基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 获取当前日期时间
DATESTR=`date +%Y%m%d-%H%M%S`

# 获取当前日期
DATESTR=`date +%Y%m%d`

# 定义变量
MAX_STEP=50000

# Number of GPUs per GPU worker
GPUS_PER_NODE=$(python -c 'import torch; print(torch.cuda.device_count())')

# 函数定义
function usage() {
echo 'Usage: bash finetune/finetune_lora_ds.sh [-m MODEL_PATH] [-d DATA_PATH] [--deepspeed DS_CONFIG_PATH]'
}

# 获取当前路径
DIR=`pwd`

花括号{}的使用

在 Bash 脚本中,花括号 {} 的使用有几个不同的场景:

  1. 变量扩展: 示例中,${RUN_NAME}${PRE_SEQ_LEN}${LR}${DATESTR} 都是变量

    使用花括号可以帮助明确变量名的边界,防止解释器将变量名错误地理解为其他标识符的一部分

    例如,${RUN_NAME}-${PRE_SEQ_LEN}-${LR}-${DATESTR} 确保这四个变量名的边界清晰,不会被错误地解释

    1
    OUTPUT_DIR=output/${RUN_NAME}-${PRE_SEQ_LEN}-${LR}-${DATESTR}
  2. 数组的索引: 在数组操作时,花括号也用于指定数组元素的索引。

    1
    2
    my_array=("value1" "value2" "value3")
    echo ${my_array[0]} # 输出数组的第一个元素
  3. 代码块: 花括号还可用于创建代码块

    在这种情况下,花括号将一系列命令组合在一起,以便它们可以被视为一个单独的实体。这在条件语句、循环等结构中很常见

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ condition ]; then
    # commands
    fi

    # 或者使用花括号创建代码块
    if [ condition ]; then
    {
    # commands
    }
    fi

总的来说,在你的示例中,花括号主要用于变量扩展,确保将变量名包含在明确的边界内。这在字符串拼接时尤其有用,以避免歧义

其他命令

查看文件夹及子目录下文件数量

1
2
[root@uslave02 datasets]# ls -lR /home/hyc/ | grep -E ".jpg|.png|.jpeg|.jpe" |wc -l
6599

Linux 手动清除NVIDIA显存

1
2
3
4
5
6
7
apt-get install psmisc

#查找占用GPU资源的PID
fuser -v /dev/nvidia*

# 解除显存占用
kill -9 PID

系统级

版本信息

1
2
3
4
5
6
7
8
[root@iZ2zeh6nc313zs4azjijjnZ ~]# uname -r
3.10.0-1062.12.1.el7.x86_64
[root@iZ2zeh6nc313zs4azjijjnZ ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.7.1908 (Core)
Release: 7.7.1908
Codename: Core

软链接

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件

我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间

这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件

  • 报错例子

    1
    ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/anaconda/install/envs/stk37/lib/python3.7/site-packages/pandas/_libs/window/aggregations.cpython-37m-x86_64-linux-gnu.so)
  • 解决方案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 查找lib库
    sudo find / -name "libstdc++.so.6*"
    # 从上述列表里找一个路径,查看是否存在我们需要的'GLIBCXX_3.4.21'
    strings /home/anaconda/lib/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 |grep GLIBCXX_3.4.21
    # 如果存在的话,建立软链接到我们需要的地方,这里例子里是/lib64/libstdc++.so.6
    ln -s /home/anaconda/lib/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /lib64/libstdc++.so.6
    # 注意如果/lib64/libstdc++.so.6 已经存在,此时上述命令会报错,需要先备份后删除,再执行ln,(但是里面没有我们需要的'GLIBCXX_3.4.21',可以用strings查看)
    cp /lib64/libstdc++.so.6 /lib64/libstdc++.so.6_bak
    rm /lib64/libstdc++.so.6
    ln -s /home/anaconda/lib/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /lib64/libstdc++.so.6
    # 至此完成软链接配置

代理配置

修改配置文件/etc/profile,即可配置centos通过代理进行上网

1
2
3
4
5
6
7
8
9
# 编辑配置文件
vi /etc/profile
# 添加代理服务器ip地址和端口号
export http_proxy=http://192.168.xx.xx:port
export https_proxy=http://192.168.xx.xx:port
export ftp_proxy=$http_proxy

# 使配置文件生效
source /etc/profile

/etc/yum.conf后面添加以下内容

1
2
3
4
5
6
# 编辑配置文件
vi /etc/yum.conf
proxy=http://127.0.0.1:8080

# 使配置文件生效
source /etc/yum.conf

编辑配置文件/etc/wgetrc添加下面两行

1
2
3
4
5
6
7
# 编辑配置文件
vi /etc/wgetrc
http_proxy=http://127.0.0.1:8080
https_proxy=http://127.0.0.1:8080

# 使配置文件生效
source /etc/wgetrc

包管理

安装 RPM 包

1
sudo rpm -ivh --prefix=<installation_path> <package_name>

--prefix为可选项,用于指定安装路径。如不设置,系统会将安装到默认路径