1 linux常用指令

linux指令入门

1.1 文件类

1.1.1 文件拷贝

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

命令语法

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

命令选项

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

本地拷贝

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

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

    # 将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. 复制整个目录及其内容到目标目录

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

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

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

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

远程拷贝

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

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

语法

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

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

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

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

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

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

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

1.1.2 文件权限

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

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

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

权限类别

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

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

权限表示

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

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

    文件权限的表示方式如下

    - rwxrwxrwx
    

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

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

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

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

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

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

    chmod 6 file_name
    

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

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

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

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

    chmod u+w 文件名
    

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

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

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

    chmod ug+rw 文件名
    

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

语法格式

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

chomd -R 777 /home/hyc

1.1.3 创建文件夹

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

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

创建多个目录可以用

mkdir dir1 dir2 dir3

1.1.4 删除文件(夹)

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

rm [选项] 文件名

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

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

删除文件

rm example.txt

删除文件夹

rm -r 文件夹名

1.1.5 移动和更名

# 移动文件
mv file.txt /path/to/destination/

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

1.1.6 查找搜索

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

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

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

find

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

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

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

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

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

按照文件类型搜索

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

locate

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

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

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

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

# 搜索文件名为 "file.txt" 的文件
locate file.txt

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

whereis

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

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

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

# 查找命令 ls 的位置
whereis ls

1.2 磁盘类

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

du -ah --max-depth=1

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

df -h

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

du -sh *

查看磁盘忙碌情况

iostat -dx 2 100

1.3 防火墙

1.3.1 端口类

防火墙

# 重启防火墙
firewall-cmd --reload

# 开机启动防火墙
systemctl enable firewalld

# 开启防火墙
systemctl start firewalld

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

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

# 停止防火墙
systemctl stop firewalld

查看端口占用

# 查看已开放的端口
firewall-cmd --list-ports

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

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

img

开启和关闭端口

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

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

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

1.3.2 win端口

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

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.4 进程类

杀死指定进程

img

1.4.1 批量杀死进程

查看进程号

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

方式一:batch_shell

#!/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

方式二:单行执行

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

1.5 解压缩

压缩

tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar
tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩

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

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

解压缩

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.6 日期时间

显示日期

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

显示日历

[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

1.7 环境变量

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

/etc/profile文件

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

export MY_VARIABLE=/path/to/my/directory

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

~/.bash_profile或~/.bashrc

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

export MY_VARIABLE=/path/to/my/directory

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

/etc/environment文件

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

MY_VARIABLE=/path/to/my/directory

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

命令行临时设置

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

export MY_VARIABLE=/path/to/my/directory

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

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

1.8 后台执行

1.8.1 systemctl方式

cloudreve私有云盘配置后台运行

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

更新重启服务

# 更新配置
systemctl daemon-reload

# 启动服务
systemctl start cloudreve

# 设置开机启动
systemctl enable cloudreve

管理命令

# 启动服务
systemctl start cloudreve

# 停止服务
systemctl stop cloudreve

# 重启服务
systemctl restart cloudreve

# 查看状态
systemctl status cloudreve

1.8.2 nohup方式

nohup python run.pt > log.log &

1.9 svn基本使用

centos安装svn客户端

# 安装svn客户端
yum install mod_dav_svn

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

拉取项目(已存在)

svn checkout svn://10.10.13.13

提交上传文件

svn add <文件路径>

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

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

更新文件

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

1.10 sh脚本

1.10.1 简述

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

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

#!/bin/bash

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

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

#!/bin/bash

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

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

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

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

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

1.10.2 用法示例

基本使用

# 获取当前日期时间
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} 确保这四个变量名的边界清晰,不会被错误地解释

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

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

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

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

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

1.11 其他命令

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

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

Linux 手动清除NVIDIA显存

apt-get install psmisc

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

# 解除显存占用
kill -9 PID

2 系统级

版本信息

[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 源文件 目标文件

  • 报错例子

    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)
    
  • 解决方案

    # 查找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
    # 至此完成软链接配置
    

3 代理配置

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

# 编辑配置文件
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后面添加以下内容

# 编辑配置文件
vi /etc/yum.conf
proxy=http://127.0.0.1:8080

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

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

# 编辑配置文件
vi /etc/wgetrc
http_proxy=http://127.0.0.1:8080
https_proxy=http://127.0.0.1:8080

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

4 包管理

安装 RPM 包

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

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

Copyright © narutohyc.com 2021 all right reserved,powered by Gitbook该文件修订时间: 2024-05-06 07:11:23

results matching ""

    No results matching ""