Linux常用命令
linux常用指令
文件类
文件拷贝
cp
命令是Unix和Linux系统中用于复制文件和目录的命令
命令语法
1 | cp [选项] 源文件或目录[可多个] 目标文件或目录 |
命令选项
-a
:归档模式,保留源文件或目录的所有属性,包括权限、所有者、时间戳等-f
:强制模式,不提示确认即覆盖目标文件或目录-i
:交互模式,覆盖目标文件或目录前询问是否确认-r
:递归模式,复制目录及其下所有文件和子目录-v
:详细模式,显示复制的每个文件或目录名称
本地拷贝
cp
命令用于复制文件或目录,以下是一些 cp
命令的示例,涵盖了各种常见用法:
将文件从一个位置复制到另一个位置
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/复制整个目录及其内容到目标目录
1
2# `-r` 选项用于递归地复制目录及其内容
cp -r /path/to/source_directory /path/to/destination_directory/将多个文件复制到一个目录并合并为一个文件
1
2# 合并为一个文件
cp file1.txt file2.txt /path/to/destination/singlefile.txt将文件复制到另一个目录并重命名
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/ |
后台下的远程拷贝:
安装 sshpass
,根据你的系统类型,选择以下命令来安装 sshpass
:
对于基于 Red Hat 的系统(如 CentOS、Fedora 等):
1
yum install sshpass
对于基于 Debian 的系统(如 Ubuntu 等):
1
apt install sshpass
以下命令用于通过 sshpass
结合 scp
将本地文件传输到远程服务器:
1 | nohup sshpass -p 'your_password' scp -rP 端口号 local_file root@seetacloud.com:/root/hyc/ > log.log & |
文件权限
在 Linux 中,每个文件和目录都有相应的权限设置,用于确定哪些用户或组可以对其进行访问、读取、写入或执行操作
文件权限定义了对文件的访问级别,确保只有经过授权的用户才能对文件进行操作,从而提高系统的安全性
权限类别
文件权限可以分为三个部分:用户权限、组权限和其他权限:
- 用户权限: 用户权限指的是文件的所有者对文件的权限。文件的所有者可以是系统中的任何用户。以下是用户权限的字符表示:
r
(读取):允许所有者读取文件内容或查看目录内容w
(写入):允许所有者修改文件内容或在目录中创建、删除文件x
(执行):对于文件,允许所有者执行文件;对于目录,允许所有者进入该目录-
(无权限):表示没有相应的权限
- 组权限: 组权限指的是文件所属组中的用户对文件的权限。每个文件都会关联一个所属组。以下是组权限的字符表示:
r
(读取):允许组成员读取文件内容或查看目录内容w
(写入):允许组成员修改文件内容或在目录中创建、删除文件x
(执行):对于文件,允许组成员执行文件;对于目录,允许组成员进入该目录-
(无权限):表示没有相应的权限
- 其他权限: 其他权限指的是不属于文件所有者和所属组的用户对文件的权限。以下是其他权限的字符表示:
r
(读取):允许其他用户读取文件内容或查看目录内容w
(写入):允许其他用户修改文件内容或在目录中创建、删除文件x
(执行):对于文件,允许其他用户执行文件;对于目录,允许其他用户进入该目录-
(无权限):表示没有相应的权限
权限表示
权限的表示方式有如下几种:
文件权限的表示方式: 在 Linux 中,文件权限用一串字符来表示,共有 10 个字符,可以分为四个部分:文件类型、用户权限、组权限和其他权限
文件权限的表示方式如下
1
- rwxrwxrwx
其中,每个字符的含义如下:
- 第一个字符表示文件类型。常见的文件类型包括
-
(普通文件)和d
(目录) - 后面的三个字符表示用户权限,即文件所有者对文件的权限
- 接下来的三个字符表示组权限,即文件所属组的用户对文件的权限
- 最后的三个字符表示其他权限,即其他用户对文件的权限
每个权限字符可以是以下四个字符之一:
r
(读取):允许读取文件内容、查看目录内容w
(写入):允许修改文件内容、在该目录中创建、删除文件x
(执行):对于文件,允许执行文件;对于目录,允许进入该目录-
(无权限):表示没有相应的权限
- 第一个字符表示文件类型。常见的文件类型包括
权限数字表示法: 权限数字表示法使用数字来表示权限设置。每个权限字符都被赋予一个特定的数字值:
r
:4w
:2x
:1-
:0
要设置文件权限,可以将这些数字相加。例如,要为文件所有者设置读取和写入权限,可以运行以下命令:
1
chmod 6 file_name
这将为文件所有者设置读取和写入权限(4+2=6)
权限符号表示法: 权限符号表示法使用符号来指定权限设置。以下是常用的权限符号表示法:
+
:添加权限-
:移除权限=
:设置权限
使用权限符号表示法时,可以将符号与权限字符组合使用。例如,要为文件所有者添加写入权限,可以运行以下命令:
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 | # 移动文件 |
查找搜索
这三个命令适用于不同的用途。如果您需要按照文件属性、大小、权限等条件来搜索文件,并且需要搜索用户文件夹中的文件,find
是更适合的选择
如果您只需要快速搜索文件名,并且可以接受不太详细的搜索结果,locate
可能更适合
而 whereis
主要用于查找系统命令的位置
find
find
命令是一种强大的文件搜索工具,可以按照文件属性、名称、大小等多个条件来搜索文件
可以使用 find
来搜索整个文件系统,包括子目录
它支持使用通配符和正则表达式来指定搜索条件
find
的搜索是实时的,即每次运行都会进行完整的文件系统扫描,因此可能比较慢,特别是在大型文件系统上
1 | # 在指定目录中搜索文件名为 "file.txt" 的文件 |
按照文件类型搜索
1 | # 语法: find 搜索路径 [选项] 搜索内容 |
- -type d:查找目录
- -type f:查找普通文件
- -type l:查找软链接文件
locate
locate
命令使用数据库来快速搜索文件,因此通常比 find
快得多
它默认搜索整个文件系统,但通常限于搜索文件名
locate
不支持通配符和正则表达式,只能搜索文件名的完全或部分匹配
由于使用数据库,因此需要定期更新数据库以确保搜索结果的准确性,可以使用 updatedb
命令来手动更新数据库
1 | # 搜索文件名为 "file.txt" 的文件 |
whereis
whereis
命令用于查找可执行文件、源代码和帮助文档的位置
它通常用于查找系统命令或程序的二进制文件、源代码和手册页
whereis
只返回命令的位置,不搜索用户文件或其他文件
1 | # 查找命令 ls 的位置 |
文件查看
查看文件全部内容
1 | > 表示输出到文件,>>表示追加到文件末尾 |
随机抽取文件中的行
1 | shuf -n 100 samples.jsonl |
从文件的末尾开始输出文件内容。它常用于查看和监控文件的尾部内容,或者查看新添加到文件中的内容
1 | 这将输出文件的尾部内容,并随着文件的增长实时刷新输出。这对于查看和监控日志文件特别有用 |
磁盘类
查看某个文件或目录占用磁盘空间的大小(需要进入到当前目录)
1 | du -ah --max-depth=1 |
查看全局文件系统磁盘占用
1 | df -h |
查看当前路径下 各文件夹的磁盘占用
1 | du -sh * |
查看磁盘忙碌情况
1 | iostat -dx 2 100 |
防火墙
端口类
防火墙
1 | # 重启防火墙 |
查看端口占用
1 | # 查看已开放的端口 |
开启和关闭端口
1 | # 开放端口(开放后需要要重启防火墙才生效) |
win端口
拓展下windows下的端口查找和kill操作
1 | C:\Users\Administrator>netstat -aon | findstr "4000" |
进程类
1 | # 进程对应的路径查询 |
进程挂起与恢复
在Unix和类Unix系统(如Linux和macOS)中,fg
命令用于将后台作业带回到前台继续执行。当你在终端中运行一个命令时,如果按下 Ctrl+Z
,该命令会被挂起(暂停)并被放到后台。这时,你可以使用 fg
命令来恢复这个作业
fg %1
命令中的 %1
是一个作业标识符,它指的是作业列表中的第一个作业。在Unix/Linux系统中,当你使用 jobs
命令查看当前会话中的作业列表时,每个作业都会有一个编号,例如 [1]
、[2]
等。%1
就是指这个列表中的第一个作业
如果没有指定作业编号,fg
命令默认会恢复最近一个被挂起的作业
批量杀死进程
查看进程号
1 | [root@iZ2zeh6nc313zs4azjijjnZ ~]# ps -ef | grep gitbook | grep -v grep|awk '{print $2}' |
方式一:batch_shell
1 | !/bin/sh |
方式二:单行执行
1 | !/bin/sh |
解压缩
压缩
1 | tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar |
解压缩
1 | tar -xvf file.tar -C DestPath 1.txt //解压 tar包 1.txt表示只需要解压出这个文件,默认解压所有 |
在命令行工具中,-d
是 bzip2
命令的一个选项,表示解压缩(decompress)。当你使用 bzip2
命令来处理 Bzip2 压缩的文件时,-d
选项告诉命令执行解压缩操作。
具体来说,bzip2 -d 文件名.bz2
命令告诉系统将名为 “文件名.bz2” 的 Bzip2 压缩文件解压缩,还原为原始文件。如果不使用 -d
选项,bzip2
命令将默认执行压缩操作。
所以,-d
是一个用于指示解压缩操作的命令行选项。
日期时间
显示日期
1 | [root@iZ2zeh6nc313zs4azjijjnZ ~]# date |
显示日历
1 | [root@iZ2zeh6nc313zs4azjijjnZ ~]# cal |
环境变量
在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方式
1 | vi /usr/lib/systemd/system/cloudreve.service |
更新重启服务
1 | # 更新配置 |
管理命令
1 | # 启动服务 |
nohup方式
1 | nohup python run.pt > log.log & |
svn基本使用
centos安装svn客户端
1 | # 安装svn客户端 |
拉取项目(已存在)
1 | svn checkout svn://10.10.13.13 |
提交上传文件
1 | svn add <文件路径> |
如果要提交整个目录下的所有文件,可以将 <文件路径>
替换为目录的路径
更新文件
checkout只在第一次链接时使用一次,以后如果进行更新操作请使用update指令
sh脚本
简述
在 Linux 中,.sh
文件通常表示一个 Shell 脚本。Shell 脚本是一种文本文件,包含一系列 Shell 命令,这些命令按照脚本文件的顺序依次执行。Shell 脚本通常用来自动执行一系列任务,可以包括文件操作、系统配置、运行程序等。
Shell 脚本的文件扩展名 .sh
表示这是一个 Shell 脚本文件,而在文件的开头一般会包含指定解释器的声明,例如:
1 |
上述声明告诉系统使用 Bash 解释器来执行该脚本。#!/bin/bash
称为 “shebang” 行,用于指定脚本的解释器。
以下是一个简单的 Shell 脚本的示例,该脚本用于输出当前用户的用户名和主目录:
1 |
|
你可以将上述脚本保存为一个 .sh
文件,例如 myscript.sh
,然后通过在终端中运行 ./myscript.sh
来执行它。
Shell 脚本是 Linux 中强大而灵活的工具,用于简化和自动化许多系统任务。不同的 Shell(如 Bash、Zsh、Sh等)提供了各种功能和语法,使得脚本编写更加灵活。
用法示例
基本使用
1 | # 获取当前日期时间 |
花括号{}的使用
在 Bash 脚本中,花括号 {}
的使用有几个不同的场景:
变量扩展: 示例中,
${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}
数组的索引: 在数组操作时,花括号也用于指定数组元素的索引。
1
2my_array=("value1" "value2" "value3")
echo ${my_array[0]} # 输出数组的第一个元素代码块: 花括号还可用于创建代码块
在这种情况下,花括号将一系列命令组合在一起,以便它们可以被视为一个单独的实体。这在条件语句、循环等结构中很常见
1
2
3
4
5
6
7
8
9
10if [ condition ]; then
# commands
fi
# 或者使用花括号创建代码块
if [ condition ]; then
{
# commands
}
fi
总的来说,在你的示例中,花括号主要用于变量扩展,确保将变量名包含在明确的边界内。这在字符串拼接时尤其有用,以避免歧义
其他命令
查看文件夹及子目录下文件数量
1 | [root@uslave02 datasets]# ls -lR /home/hyc/ | grep -E ".jpg|.png|.jpeg|.jpe" |wc -l |
Linux 手动清除NVIDIA显存
1 | apt-get install psmisc |
控制台输出到文件
1 | # 过滤出包含0ac377cf0dd938a5bf137265c7e80adb和289b79fcfddc312da1b075c9c113285d的行 |
系统级
版本信息
1 | [root@iZ2zeh6nc313zs4azjijjnZ ~]# uname -r |
软链接
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 | # 编辑配置文件 |
在/etc/yum.conf
后面添加以下内容
1 | # 编辑配置文件 |
编辑配置文件/etc/wgetrc
添加下面两行
1 | # 编辑配置文件 |
包管理
安装 RPM 包
1 | sudo rpm -ivh --prefix=<installation_path> <package_name> |
--prefix
为可选项,用于指定安装路径。如不设置,系统会将安装到默认路径