Linux命令大全
# 1. shell基础
*
任意长度的任意字符(0,1,n)?
一位长度的任意字符
例子:删除/home下所有文件名第三个字符是a,第五个字符是c的文件
rm -rf /home/??a?c*
- 连接多个命令
;
将连接的多个命令依次执行(前命令无论成功还是失败,后面的命令都正常执行)
cd /home/; cd /tmp/; pwd
&&
只有前面的命令正确执行,后面的命令才会执行(如果前面的执行失败,后面的就不执行了)
cd /home/ && cd /tmp/ && pwd
||
只有前面的命令执行失败,后面的命令才会执行(如果前面的执行成功,后面的就不执行了)
#
注释行(描述信息,不会执行)|
传递命令的执行结果
例子:统计echo输出结果中有几个字符
echo "ls /etc" | wc -c
例子:将echo的结果传递给bash解释器
echo "ls /etc" | bash
~
表示当前用户家目录-
表示上次所在的目录/
路径分隔符
/etc/sysconfig/network
$
引用变量的值
例子:
name="zx" <<< 定义变量
echo "$name" <<< 用$来获取变量中的值
2
>
和>>
输出重定向
>
:清空文件并重新写入内容>>
:继续向文本添加新的内容
<
输入重定向
输入新的内容
- << (Here Document)
此处文档,用来打印菜单
例子:打印菜单
cat<<EOF
1. go
2. back
3. menu
EOF
2
3
4
5
- 引号
'':弱引用,引号中的内容原样输出
"":强引用,引号中的变量会被替换成变量的值
``:命令替换,将引号中的命令替换成命令的执行结果
例子:
name='zx'
echo '$name' >>> $name (原样输出)
echo "$name" >>> zx (将变量替换成值)
touch /home/`date +%F-%H:%M:%S`
2
3
4
.
点
. 表示当前所在的目录
touch ./1.txt
..
当前所在的目录的上一级目录
- {}
用法1:花括号展开
用法2:生成数字系列
# 2. 通配符
参考这里:http://www.ruanyifeng.com/blog/2018/09/bash-wildcards.html
通配符(wildcards)
通配符早于正则表达式出现,可以看作是原始的正则表达式。它的功能没有正则那么强大灵活,但是胜在简单和方便。
# 一、? 字符
?
字符代表单个字符。
# 存在文件 a.txt 和 b.txt $ ls ?.txt a.txt b.txt
1
2
3
上面命令中,?
表示单个字符,所以会同时匹配a.txt
和b.txt
。
如果匹配多个字符,就需要多个?
连用。
# 存在文件 a.txt、b.txt 和 ab.txt $ ls ??.txt ab.txt
1
2
3
上面命令中,??
匹配了两个字符。
注意,?
不能匹配空字符。也就是说,它占据的位置必须有字符存在。
# 二、* 字符
*
代表任意数量的字符。
# 存在文件 a.txt、b.txt 和 ab.txt $ ls *.txt a.txt b.txt ab.txt # 输出所有文件 $ ls *
1
2
3
4
5
6
上面代码中,*
匹配任意长度的字符。
*
可以匹配空字符。
# 存在文件 a.txt、b.txt 和 ab.txt $ ls a*.txt a.txt ab.txt
1
2
3
# 三、[...] 模式
[...]
匹配方括号之中的任意一个字符,比如[aeiou]
可以匹配五个元音字母。
# 存在文件 a.txt 和 b.txt $ ls [ab].txt a.txt b.txt $ ls *[ab].txt ab.txt a.txt b.txt
1
2
3
4
5
6
[start-end]
表示一个连续的范围。
# 存在文件 a.txt、b.txt 和 c.txt $ ls [a-c].txt a.txt b.txt c.txt # 存在文件 report1.txt、report2.txt 和 report3.txt $ ls report[0-9].txt report1.txt report2.txt report3.txt
1
2
3
4
5
6
7
# 四、[^...]
和 [!...]
[^...]
和[!...]
表示匹配不在方括号里面的字符(不包括空字符)。这两种写法是等价的。
# 存在文件 a.txt、b.txt 和 c.txt $ ls [^a].txt b.txt c.txt
1
2
3
这种模式下也可以使用连续范围的写法[!start-end]
。
$ echo report[!1-3].txt report4.txt report5.txt
1
2
上面代码中,[!1-3]
表示排除1、2和3。
# 五、{...} 模式
{...}
表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
$ echo d{a,e,i,u,o}g dag deg dig dug dog
1
2
它可以用于多字符的模式。
$ echo {cat,dog} cat dog
1
2
{...}
与[...]
有一个很重要的区别。如果匹配的文件不存在,[...]
会失去模式的功能,变成一个单纯的字符串,而{...}
依然可以展开。
# 不存在 a.txt 和 b.txt $ ls [ab].txt ls: [ab].txt: No such file or directory $ ls {a,b}.txt ls: a.txt: No such file or directory ls: b.txt: No such file or directory
1
2
3
4
5
6
7
上面代码中,如果不存在a.txt
和b.txt
,那么[ab].txt
就会变成一个普通的文件名,而{a,b}.txt
可以照样展开。
大括号可以嵌套。
$ echo {j{p,pe}g,png} jpg jpeg png
1
2
大括号也可以与其他模式联用。
$ echo {cat,d*} cat dawg dg dig dog doug dug
1
2
上面代码中,会先进行大括号扩展,然后进行*
扩展。
# 六、{start..end} 模式
{start..end}
会匹配连续范围的字符。
$ echo d{a..d}g dag dbg dcg ddg $ echo {11..15} 11 12 13 14 15
1
2
3
4
5
如果遇到无法解释的扩展,模式会原样输出。
$ echo {a1..3c} {a1..3c}
1
2
这种模式与逗号联用,可以写出复杂的模式。
$ echo .{mp{3..4},m4{a,b,p,v}} .mp3 .mp4 .m4a .m4b .m4p .m4v
1
2
# 七、注意点
通配符有一些使用注意点,不可不知。
(1)通配符是先解释,再执行。
Bash 接收到命令以后,发现里面有通配符,会进行通配符扩展,然后再执行命令。
$ ls a*.txt ab.txt
1
2
上面命令的执行过程是,Bash 先将a*.txt
扩展成ab.txt
,然后再执行ls ab.txt
。
(2)通配符不匹配,会原样输出。
Bash 扩展通配符的时候,发现不存在匹配的文件,会将通配符原样输出。
# 不存在 r 开头的文件名 $ echo r* r*
1
2
3
上面代码中,由于不存在r
开头的文件名,r*
会原样输出。
下面是另一个例子。
$ ls *.csv ls: *.csv: No such file or directory
1
2
另外,前面已经说过,这条规则对{...}
不适用
(3)只适用于单层路径。
上面所有通配符只匹配单层路径,不能跨目录匹配,即无法匹配子目录里面的文件。或者说,?
或*
这样的通配符,不能匹配路径分隔符(/
)。
如果要匹配子目录里面的文件,可以写成下面这样。
$ ls */*.txt
1
(4)可用于文件名。
Bash 允许文件名使用通配符。这时,引用文件名的时候,需要把文件名放在单引号里面。
$ touch 'fo*' $ ls fo*
1
2
3
上面代码创建了一个fo*
文件,这时*
就是文件名的一部分。
# 3. 系统自带
# 1. 查看linux 版本
1.uname -a (Linux查看版本当前操作系统内核信息)
2.cat /proc/version (Linux查看当前操作系统版本信息)
3.cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)
4.cat /proc/cpuinfo
# 2.增加用户 && 切换用户
# CentOS7服务器添加新用户
添加新用户
root权限:
[root@localhost ~]# adduser jiangshan
[root@localhost ~]# passwd jiangshan
[root@localhost ~]# chmod -v u+w /etc/sudoers
mode of ‘sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
[root@localhost ~]# vim /etc/sudoers
2
3
4
5
6
在root ALL=(ALL) ALL
行后,添加以下行
[用户名] ALL=(ALL) ALL(如需新用户使用sudo时不用输密码,把最后一个ALL改为NOPASSWD:ALL即可)
[root@localhost ~]# chmod -v u-w /etc/sudoers
mode of ‘sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)
2
切换用户
su wangzhe
:su + 用户名
# 3. ls查看命令
# 1.基本
常用参数
-a #隐藏文件 或者在文件夹中 ctrl + h
-l #查看详情
-sort #修改日期排序
2
3
# 2.查看USB串口号
ls /dev/ttyUSB*
# 3.查看IP地址
在没有ifconfig
下,可以用ip addr show
。具体如下:https://linux.cn/article-11308-1.html
# 4. echo
参考网址 (opens new window) http://c.biancheng.net/linux/echo.html
echo是打印变量的值或者给定的字符串,
比如,输入echo hello
或者echo "hello"
都是在控制台打印出hello
单词
但是我们需要把打印出来的字符串记录到文本文件中,就需要>
和>>
命令
touch a.txt
新建一个文本文件a.txt
echo hello > a.txt
则a.txt
中会记录下hello
,但是如果再次执行echo hello > a.txt
。则会覆盖之前的hello,
怎样追加呢?需要>>
命令
echo world >> a.txt
则a.txt
中会记录的是hello word,
但是hello
和word
不是写在一行的,
而是每个单词占用一行的。
再比如 echo $HOME
控制台则会打印出当前用户的根路径/home/picc4
echo -n 表示不换行输出
echo `ls` 表示执行ls命令
# 表1 转义字符
打印参数 | 解释 |
---|---|
\a | 响铃 |
\b | 退格(backspace) |
\e | 转义符 |
\c | 不换行 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ONNN | 字节数以八进制数NNN (1 至 3 位)表不 |
\xHH | 字节数以十六进制数 HH (1 至 2 位)表不 |
# 5. wget
常用 => wget url
,其中url为下载链接
参数介绍:
-P 表示下载到哪个目录
-r 表示递归下载
-np 表示不下载旁站连接.
-k 表示将下载的网页里的链接修改为本地链接.
-p 获得所有显示网页所需的元素
额外的
-c 断点续传
-nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-L 递归时不进入其它主机,如wget -c -r www.xxx.org/
-A 指定要下载的文件样式列表,多个样式用逗号分隔
-i 后面跟一个文件,文件内指明要下载的URL
-P 表示下载到哪个目录
# 6.UFW常用命令
https://www.jianshu.com/p/451218449f54
# 一、基本用法
- 启用ufw
~]$ufw enable
- 禁用ufw
~]$ufw diable
- 查看防火墙状态及规则列表
~]$ufw status
- 重置防火墙
~]$ufw reset
# 7. pip
sudo apt install python3-pip #pip
# 4. 解压命令
参数释义:
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-f: 档案名。
# 0.常见命令
01-.tar格式
解包:[*******]$ tar xvf FileName.tar
打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
02-.gz格式
解压1:[*******]$ gunzip FileName.gz
解压2:[*******]$ gzip -d FileName.gz
压 缩:[*******]$ gzip FileName
03-.tar.gz格式
解压:[*******]$ tar zxvf FileName.tar.gz
压缩:[*******]$ tar zcvf FileName.tar.gz DirName
04-.bz2格式
解压1:[*******]$ bzip2 -d FileName.bz2
解压2:[*******]$ bunzip2 FileName.bz2
压 缩: [*******]$ bzip2 -z FileName
05-.tar.bz2格式
解压:[*******]$ tar jxvf FileName.tar.bz2
压缩:[*******]$ tar jcvf FileName.tar.bz2 DirName
06-.bz格式
解压1:[*******]$ bzip2 -d FileName.bz
解压2:[*******]$ bunzip2 FileName.bz
07-.tar.bz格式
解压:[*******]$ tar jxvf FileName.tar.bz
08-.Z格式
解压:[*******]$ uncompress FileName.Z
压缩:[*******]$ compress FileName
09-.tar.Z格式
解压:[*******]$ tar Zxvf FileName.tar.Z
压缩:[*******]$ tar Zcvf FileName.tar.Z DirName
10-.tgz格式
解压:[*******]$ tar zxvf FileName.tgz
11-.tar.tgz格式
解压:[*******]$ tar zxvf FileName.tar.tgz
压缩:[*******]$ tar zcvf FileName.tar.tgz FileName
12-.zip格式
解压:[*******]$ unzip FileName.zip
压缩:[*******]$ zip FileName.zip DirName
13-.lha格式
解压:[*******]$ lha -e FileName.lha
压缩:[*******]$ lha -a FileName.lha FileName
14-.rar格式
解压:[*******]$ rar a FileName.rar
压缩:[*******]$ rar e FileName.rar
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
参考这里 (opens new window) https://www.jb51.net/LINUXjishu/43356.html
# 1.tar
注意:命令行中f
需要放到最后
解压tgz文件到该文件所在的文件夹例子:
tar -czvf test.tar.gz a.c
tar -xzvf cudnn-9.0-linux-x64-v7.3.1.20.tgz
2
tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包 ,-f指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思
# 2. zip
linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
# zip all.zip *.jpg
这条命令是将所有.jpg的文件压缩成一个zip包
# unzip all.zip
这条命令是将all.zip中的所有文件解压出来
# 5. conda
记得每次写入环境变量:通过source ~/.bashrc
解决
激活环境 : conda activate yourname
退出环境: conda deactivate
# 错误集锦:
一:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If your shell is Bash or a Bourne variant, enable conda for the current user with
$ echo ". /home/ubuntu/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
or, for all users, enable conda with
$ sudo ln -s /home/ubuntu/anaconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh
The options above will permanently enable the 'conda' command, but they do NOT
put conda's base (root) environment on PATH. To do so, run
$ conda activate
in your terminal, or to put the base environment on PATH permanently, run
$ echo "conda activate" >> ~/.bashrc
Previous to conda 4.4, the recommended way to activate conda was to modify PATH in
your ~/.bashrc file. You should manually remove the line that looks like
export PATH="/home/ubuntu/anaconda3/bin:$PATH"
^^^ The above line should NO LONGER be in your ~/.bashrc file! ^^^
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
这是由于conda的激活命令出了问题,解决方法如下:
# 激活环境source activate
# 退出环境source deactivate
2
3
随后解决问题。
可以进行激活环境了:
conda activate your-env-name
2
#
# 6. SSH
# 1 key生成
ssh-keygen -t rsa -C "xxxxxxx@163.com"
# 2权限问题
同样的,检查目录和文件权限,确保.ssh目录权限为700,authorized_keys文件权限为600
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2
# 3 ssh开启和重启
开启ssh服务首先需要安装打开ssh服务的库:
sudo apt-get install openssh-server
检查当前的ssh开启情况:
ps -e |grep ssh
如果有sshd,则ssh-server已经启动;若仅有agent,则尚未启动;
开启ssh服务:
/etc/init.d/ssh start
若为启动或者希望重启ssh,则修改配置并重启ssh服务:
vi /etc/ssh/sshd_config
则可以看到配置文件,按照需求修改即可;
重启ssh:
sudo /etc/init.d/ssh restart
# 7. 卸载包命令
这里以vsftpd为例。
如果服务器上安装了vsftpd,配置出错需要卸载vsftpd
rpm -aq vsftpd
vsftpd-2.0.5-16.el5_5.1 #此处是查找vsftpd的返回结果
rpm -e vsftpd
用rpm -e 查找结果 进行删除就ok了。
# 8. Docker
PS:确认要安装docker的系统的linux内核高于3.10
,低于3.10使用yum update
更新
uname -r
一、基本命令
yum install docker # 安装docker
docker -v # 查看docker版本
docker info # docker详细信息
service docker status # 查看docker状态
service docker start # 启动docker
service docker stop # 停止docker
systemctl enable docker # 设置docker开机自启
2
3
4
5
6
7
二、镜像命令
PEPOSITORY:镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一个仓库源可以有多个TAG,表示这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如只使用tomcat,docker将默认使用tomcat:latest镜像
docker images # 查看docker镜像
docker images -a # 列出本地所有的镜像
docker images -p # 只显示镜像ID
docker images --digests # 显示镜像的摘要信息
docker images --no-trunc # 显示完整的镜像信息
docker search tomcat # 从Docker Hub上查找tomcat镜像
docker search -s 30 tomcat # 从Docker Hub上查找关注度大于30的tomcat镜像
docker pull tomcat # 从Docker Hub上下载tomcat镜像。等价于:docker pull tomcat:latest
docker rmi hello-world # 从Docker中删除hello-world镜像
docker rmi -f hello-world # 从Docker中强制删除hello-world镜像
docker rmi -f hello-world nginx # 从Docker中强制删除hello-world镜像和nginx镜像
2
3
4
5
6
7
8
9
10
11
三、容器命令
docker run [OPTIONS] IMAGE
根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
OPTIONS
说明:
--name=
“容器新名字”:为容器指定一个名称
-d
:后台运行容器,并返回容器ID,也即启动守护式容器
-i
:以交互模式运行容器,通常与-t同时使用
-t
:为容器重新分配一个伪输入终端,通常与-i同时使用
-P
:随机端口映射
-p
:指定端口映射,有以下四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
docker ps # 列出当前所有正在运行的容器
docker ps -a # 列出所有的容器
docker ps -l # 列出最近创建的容器
docker ps -n 3 # 列出最近创建的3个容器
docker ps -q # 只显示容器ID
docker ps --no-trunc # 显示当前所有正在运行的容器完整信息
exit # 退出并停止容器
Ctrl+p+q # 只退出容器,不停止容器
docker start # 容器ID或容器名称启动容器
docker restart # 容器ID或容器名称重新启动容器
docker stop # 容器ID或容器名称停止容器
docker kill # 容器ID或容器名称强制停止容器
docker rm # 容器ID或容器名称删除容器
docker rm -f # 容器ID或容器名称强制删除容器
docker rm -f $(docker ps -a -q) # 删除多个容器
docker logs -f -t --since --tail # 容器ID或容器名称查看容器日志
如:docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5
-f : 查看实时日志
-t : 查看日志产生的日期
--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
--tail=10 : 查看最后的10条日志
docker top # 容器ID或容器名称查看容器内运行的进程
docker inspect # 容器ID或容器名称查看容器内部细节
docker attach # 容器ID进到容器内
docker exec # 容器ID进到容器内
docker cp # 容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.
如:docker cp f9e29e8455a5:/tmp/yum.log /root
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
# 9. 重启网络
sudo service network-manager restart
sudo systemctl restart network-manager.service
# 10. 查找
场景一: 想在某个文件夹里的所有文件 查找某个字符串
# 会列出所有可读文件(.c,.h,.txt...)的所有记录
grep -r "查询内容" 文件目录 # [-n] 显示行 [-w] 全文匹配
#这里注意“查询内容”中可以写正则,比如想要搜索 `#define EIO`注意中间的空格,
# 其实可能是tab或者其他空白,可以用正则中的\s,可以加个后缀比如*+,*代表[0,+oo], +代表[1, +oo]
grep -rn "#define\s*EIO" . # 或者下边的
grep -rn "#define\s\+EIO" .
# 只显示包含内容的文件名
grep -r -l "查询内容" 文件目录
##文件名+内容 这里可以读取二进制文件
find 文件目录 -type f |xargs grep "查询内容";
#将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name "*.c"
#将目前目录其其下子目录中所有一般文件列出
find . -type f
#将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 11.关机命令
sudo shutdown -h now
-h: 关机并彻底断电
-r: 重启
-c: 取消前一个关机命令
-k: 不执行任何关机操作,只发出警告信息给所有用户
-f: 快速关机且重启动时跳过fsck
-n: 快速关机不经过init程序