linux基础命令

image-20210112093234993

目录

. 当前目录 .. 父目录! / 根目录

useradd

添加用户

image-20210112141359498

yum

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

ubuntu使用yum命令时报错解决方法
root@i-ka9tolv1:/home/ubuntu/local/nginx-1.6.2# yum -y install openssl openssl-devel
There are no enabled repos.
Run "yum repolist all" to see the repos you have.
You can enable repos with yum-config-manager --enable <repo>

原因ubuntu14.0 不支持yum下载按装机制
正确的命令是:
sudo apt-get install openssl
sudo apt-get install libssl-dev

ls | l |ll

image-20210112093729092

ls -ld 可以看执行权限

image-20210112094319253

发现我的Ubuntu下 l 就能显示当前目录!

cd

cd . 进入当前目录

cd .. 进入父目录

cd / 进入根目录

pwd

image-20210112094404020

touch

image-20210112094501791

mkdir

image-20210112094555475

cp

image-20210112094835573

image-20210112095041573

绝对路径|相对路径

image-20210112095341533

mv

image-20210112095615163

rm

image-20210112095827263

man

查看命令的帮助

image-20210112100645047

image-20210112111403757

more

image-20210112100602159

查看文件前几行

image-20210112100737497

tail

查看文件后几行

image-20210112100745749

in 链接(快捷方式)

image-20210112100904666

软链接是快捷方式!如果源文件没了!

硬链接相当于拷贝了一份!如果源文件没了!没有影响!

查找

which 只用于系统命令 常用于查看是否存在这个命令

image-20210112110140322

find

image-20210112110602589

grep (ctrl +f 一样)

image-20210112111257007

grep flag /* 在根目录搜索所以文件里 搜索flag字符串

grep flag /flag

image-20210112115035513

压缩

gzip压缩

image-20210112111625386

gunzip解压

image-20210112112026531

image-20210112112017313

tar

命令名称: tar

命令所在路径: /bin/tar

执行权限:所有用户

语法: tar 选项[cvf] [目录]

-c 产生.tar打包文件

-v 显示详细信息

-f 指定压缩后的文件名

-z 打包同时压缩

功能描述:打包目录

压缩后文件格式: .tar.gz

例:

tar -zcvf dir1.tar.gz dir1

将目录dir1压缩打包

注意 f参数必须要在最后不让会有问题:

image-20210112114229811

tar命令解压缩语法:

-x 解包.tar文件

-v 显示详细信息

-f 指定解压文件

-z 解压缩

例: $tar-zxvf dir1.tar.gz

将目录dir1.tar.gz解压

命令名称: zip

命令所在路径: /usr/bin/zip

执行权限:所有用户

语法:

zip选项[-r] [压缩后文件名称] [文件或目录]

-r 压缩目录

功能描述:压缩文件或目录

压缩后文件格式: .zip

例:

zip services.zip /etc/services 压缩文件

zip -r test.zip /test 压缩目录

zip与unzip

image-20210112112546101

linux下常用符号:

>
>>
&
|
||
&&
;
shell里的正则 (之前总结过)
https://blog.csdn.net/zqg4919/article/details/75417919
https://xz.aliyun.com/t/3918?accounttraceid=d4c075b93a7d45fb9da70a415d1e523epxnt

多命令执行顺序

多命令执行符              格式                        作用

; 命令1;命令2 多个命令顺序执行,命令之间无任何逻辑关系


&& 命令1&&命令2 逻辑与:当命令1正确执行后,命令2才会正确执行,否则命令2不会执行

|| 命令1||命令2 逻辑或:当命令1不正确执行后,命令2才会正确执行,否则命令2不会执行

例如

[root@localhost ~]# pwd;touch abc;ls;date
[root@localhost ~]# ls abc.sh && echo yes
[root@localhost ~]# ls abc.sh || echo no
后台执行:“&”
& 表示将任务置于后台执行
&&(命令执行控制)
语法格式如下:
command1 && command2 [&& command3 ...]
1 命令之间使用 && 连接,实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
||(命令执行控制)
语法格式如下:
command1 || command2 [|| command3 ...]
1 命令之间使用 || 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

| 管道符

  1. 命令格式: 命令1| 命令2
  2. 作用:命令1的正确出书作为命令2的操作对象

image-20210112123436389

通配符

通配符 作用
? 匹配一个任意字符
* 匹配0个或多个任意字符,也就是可以匹配任何内容
[] 匹配括号中任意一个字符
[-] 匹配括号中任意一个字符,“-”代表范围
[^] 逻辑非,表示匹配不是括号内的一个字符

[]和{}的使用

img

{…}与[…]有一个很重要的区别。如果匹配的文件不存在,[…]会失去模式的功能,变成一个单纯的字符串,而{…}依然可以展开。

img

<?php

system($_POST[1]);

image-20210112134231895

image-20210112134318564

看了{a,b}

注意!!!

(通配符和linux里的正则匹配不一样)(两个东西)

正则表达式

^
匹配输入字符串的开始位置。

$
匹配输入字符串的结束位置。

*
匹配前面的子表达式零次或多次

+
匹配前面的子表达式一次或多次。

?
匹配前面的子表达式零次或一次。

{n}
n 是一个非负整数。匹配确定的 n 次。

{n,}
n 是一个非负整数。至少匹配n 次。

{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

?
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

.
匹配除换行符(\n、\r)之外的任何单个字符。

[xyz]
字符集合。匹配所包含的任意一个字符。

还有一些内置的通用字符簇

[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

Bash中其他特殊符号

符号 作用
‘’ 单引号,在单引号中所有的特殊符号,如“$”和“`”(反引号)都无特殊含义
“” 双引号,在双引号中特殊符号都无特殊含义,但“$”、“`”(反引号)和“\”是例外,拥有“调用变量值”,“引用命令”和“转义符”的特殊含义
“ 反引号:反引号括起来的内容是系统命令,在Bash中先会执行它和()
$() 和反引号作用相同,用来引用系统命令
# 在shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到
\ 转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符

单双引号的性质和php里差不多!

重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

啥意思呢:就是你的终端是标准输入 也是 标准输出!

现在重定向一下!把标准输入 或者 标准输出改了!

如:command > file

把标准输出改成file!!!

简单点理解:就是改了位置!


命令说明:
command > file:将输出重定向到 file。
command < file:将输入重定向到 file。
command >> file:将输出以追加的方式重定向到 file。
n > file:将文件描述符为 n 的文件重定向到 file。
n >> file:将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m:将输出文件 m 和 n 合并。
n <& m:将输入文件 m 和 n 合并。
<< tag:将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

shell 提供了两种方法(() 和 {})****

()和{}
如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。
(command1;command2;command3....)
{ command1;command2;command3…} #第一条命令必须与左边的括号有一个空格,最后一条命令一定要有分号

相同点:
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

linux权限管理命令***

image-20210112140449083

image-20210112140754589

chmod

image-20210112141229731

image-20210112141122816

image-20210112142214856

image-20210112142526527

答案:

是不能的!因为file1所在的文件夹dir1 other是没有wx权限的!只有r权限!

所以虽然 file1是777,但是他的父目录dir1!other是没有权限的!所以删除不了!

所有只有当other拥有目录的权限时!里面的文件无论啥权限都能删除!因为你连这个目录都能删!里面的文件还删不了吗!

image-20210112180023648

如果文件夹里面还有一个文件夹!他如果没有权限!是不能直接删除所有的!上图!

chown (改变所属者) | chgrp(改变所属组)

image-20210112144703230

用户配置文件***

image-20210112145219694

/etc/pawssd

image-20210112145750728

用户类型

image-20210112145853041

伪用户

image-20210112150017636

用户组

image-20210112150051523

/etc/shadow

image-20210112150238804

/etc/group

image-20210112150332960

重点:

setuid

image-20210112151123371

就是设置了setuid

other用户相当于用了root身份来执行!

用户组命令

image-20210112152210368

‘

用户管理命令

image-20210112152533664

image-20210112152743491

sudo|su

image-20210112152851185

image-20210112153235264

进程

进程就是自己写的程序!

image-20210112155930806

ps -ef |grep python

ps -ef |grep python&后台运行

image-20210112160953690

ps

image-20210112161221807

image-20210112161542152

Linux进程管理
进程的概念
1、程序是静态概念,本身作为一种软件资源长期保存,而进程是程序的执行过
程,它是动态概念,有一定的生命期,是动态产生和消亡的。
2、程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方面,一个
进程在活动中有可能顺序地执行若干个程序。
父进程和子进程
1、子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程。
2、在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程
的数据和堆栈段以及父进程的进程环境。
3、父进程终止子进程自然终止。
前台进程:
在ShelI提示处打入命令后,创建-一个子进程,运行命令,Shell等待命令退
出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,
用户在它完成之前不能执行另-一个命令。
后台进程:
在Shel提示处打入命令,者后随一个&,Shell创建的子进程运行此命令,但
不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,
即在后台运行。后台进程必须是非交五式的。
进程状态
就绪:进程已经分配到资源,但因为其它进程正占用CPU,所以暂时不能运行而等
待分配CPU的状态。
等待:因等待某种事件而暂时不能运行的状态。
运行:进程分配到CPU,正在处理器上运行。
查看用户信息w命令
w显示信息的含义
JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间
会显示在这里
PCPU:CPU执行程字耗费的时间
WHAT:用户正在执行的操作
loadaverage:分别显示系统在过去1、5、15分钟内的平均负载程度。
FROM:显示用户从何处登录系统,“:0”的显示代表该用户时从XWindow下,
打开文本模式窗口登录的
IDLE:用户闲置的时间。这是个计时器,-旦用户执行任何操作,该计时器便会
被重置
查看个别用户信息:W用户名
查看系统中进程
指令名称ps
功能描述:查看系统中进程
a显示所有用户的进程
u显示用户名和启动时间
x显示没有控制终端的进程
e显示所有进程,包括没有控制终端的进程
l长格式显示
w宽行显示,可以使用多个w进行加宽显示
f完整的输出
ps常用输出信息的含义
TIME进程自从启动以来启用CPU的总时间
COMMAND/CMD进程的命令名
USER用户名
%CPU占用CPU时间和总时间的百分比
%MEM占用内存与系统内存总量的百分比
PID进程号
PPID父进程号
TTY进程启动的终端
STAT进程当前状态D,不可中断的休眠状态R运行状态Z僵死状态T停止
例:
ps-u或者ps-l#查看隶属于自己进程详细信息
ps-le或者ps-aux#查看所有用户执行进程的详细信息
ps-aux|greptom
ps-uUtom
查看系统中指定用户执行的进程
ps-ef|grepinit
查看指定进程信息
kill杀死进程
1,为什么杀死进程?
2,该进程占用了过多的CPU时间
3,该进程锁住了一个终端,使其他前台进程无法运行
4,运行时间过长,但没有预期效果产生了过多到屏幕或磁盘文件的输出
5,无法正常退出
kill-9进程号(强行关闭)
kill-1进程号(重启进程)
pgrep服务名称#查找服务进程号
pkill进程名称#关闭进程

nohup

进程在用户退出后仍旧继续执行(后台执行)
nohup命令将执行后的数据信息和错误信息默认储存到文件nohup.out中
nohup命令&

任务计划

image-20210112164719208

##### 计划任务

systemctl理解

Linux 服务管理两种方式service和systemctl

systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。

systemd对应的进程管理命令是systemctl

yum install crontabs (安装 crontabs)
systemctl enable crond (设为开机启动)
systemctl start crond(启动crond服务)
systemctl status crond (查看状态)

含义:利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行

- 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
- 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI

-u user 是指设定指定 user 的时程表,如果不使用 -u user 的话,就是表示设定自己的时程表

-r : 删除目前的时程表

-l : 列出目前的时程表

时间格式如下:

```
f1 f2 f3 f4 f5 program
```

- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行

```
* * * * *
- - - - -
| | | | |
| | | | +—– 星期中星期几 (0 - 7) (星期天 为0)
| | | +———- 月份 (1 - 12)
| | +————— 一个月中的第几天 (1 - 31)
| +——————– 小时 (0 - 23)
+————————- 分钟 (0 - 59)
```

实例

每一分钟执行一次 /bin/ls:

```
* * * * * /bin/ls
```

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:

```
0 6-12/3 * 12 * /usr/bin/backup
```

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”:

```
20 0-23/2 * * * echo “haha”
```

vi /etc/crontab #在文件中写入执行计划

crontab /etc/crontab # 生效执行计划

cat /var/log/cron # 查看执行计划的执行日志

网络通信命令

wirte

wall

ping

image-20210112171627398

ifconfig

shutdown

reboot

image-20210112172100520

shell小技巧***

2>错误输出重定向

image-20210112172706405

image-20210112172927441