云计算学习周记 第二周

一.文件权限管理

1.基本权限ugo

权限对象:
属主------->u
属组------->g
其他人------>o

基本权限类型:
读(read):r ---->4
写(write):w ---->2
执行: x(exec) ---->1

r w x                rw-            r--              alice        hr      file1.txt

属主权限 属组权限 其他人权限 属主 属组 文件

2.设置权限

chown:改变文件或目录的所属主以及所属组
chmod:为文件或目录设置访问权限

chown

[root@localhost ~]# chown alice.hr file1.txt //修改属主、属组
[root@localhost ~]# chown tom file1.txt //修改属主
[root@localhost ~]# chown .it file1.txt //只改属组
[root@localhost ~]# chown -R alice.hr dir1 //递归修改—针对目录

chmod

[root@localhost ~]# chmod u+x file1.txt //属主增加执行
[root@localhost ~]# chmod a=rwx file1.txt //所有人等于读写执行
[root@localhost ~]# chmod a=- file1.txt //所有人都没有权限
[root@localhost ~]# chmod ug=rw,o=r file1.txt //属主属组等于读写,其他人只读
[root@localhost ~]# ll
-rw-rw-r–. 1 tom it 0 Nov 1 15:30 file1.txt

[root@localhost ~]# chmod 644 file1.txt
[root@localhost ~]# ll file1.txt
-rw-r–r--. 1 tom it 0 Nov 1 15:30 file1.txt

[root@localhost ~]# chmod 755 file1.txt
[root@localhost ~]# ll
-rwxr-xr-x 1 root root 0 Jul 23 22:40 file1.txt

[root@localhost ~]# chmod 521 file1.txt
[root@localhost ~]# ll
-r-x-w—x 1 root root 0 Jul 23 22:40 file1.txt

3.权限案例

  1. root用户和hr组的员工可以读、写、执行
  2. 其他用户没有任何权限

[root@localhost ~]# groupadd hr //创建一个用户组
[root@localhost ~]# useradd hr01 -G hr //创建hr01用户添加到hr组里
[root@localhost ~]# useradd hr02 -G hr //创建hr02用户添加到hr组里
[root@localhost ~]# mkdir /home/hr //在/home创建一个hr目录
[root@localhost ~]# chown .hr /home/hr //将/home/hr目录的所属组设置为hr
[root@localhost ~]# chmod 770 /home/hr //将/home/hr目录的权限设置为770
[root@localhost ~]# ll -d /home/hr //查看/home/hr目录本身的权限
drwxrwx—. 2 root hr 6 Nov 1 17:11 /home/hr

3.2.rwx对文件的影响

[root@localhost ~]# vim /home/file1
date
[root@localhost ~]# ll /home/file1
-rw-r–r--. 1 root root 5 Nov 3 15:19 /home/file1

[root@localhost ~]# su - alice #切换普通用户
[alice@localhost ~]$ cat /home/file1
date
[alice@localhost ~]$ /home/file1 #执行文件
-bash: /home/file1: Permission denied
[alice@localhost ~]$ exit
logout
[root@localhost ~]# chmod o+x /home/file1
[alice@localhost ~]$ /home/file1
Sun Nov 3 15:26:21 CST 2019

[root@localhost ~]# chmod o+w /home/file1
[alice@localhost ~]$ vim /home/file1
date
123
ls

3.3.权限对目录的影响

1.对目录没有w,对目录下的文件有rwx

[root@localhost ~]# mkdir /dir10
[root@localhost ~]# touch /dir10/file1
[root@localhost ~]# chmod 755 /dir10/file1
[root@localhost ~]# ll -d /dir10/
drwxr-xr-x. 2 root root 19 Nov 3 15:37 /dir10/
[root@localhost ~]# ll /dir10/file1
-rwxrwxrwx. 1 root root 0 Nov 3 15:37 /dir10/file1
[root@localhost ~]# vim /dir10/file1
jack
[root@localhost ~]# su - alice
Last login: Sun Nov 3 15:28:06 CST 2019 on pts/0
[alice@localhost ~]$ cat /dir10/file1
jack
[alice@localhost ~]$ rm -rf /dir10/file1 #权限不够
rm: cannot remove ‘/dir10/file1’: Permission denied
[alice@localhost ~]$ touch /dir10/file2 #权限不够
touch: cannot touch ‘/dir10/file2’: Permission denied

2.对目录有w,对文件没有任何权限

[root@localhost ~]# chmod 777 /dir10/
[root@localhost ~]# chmod 000 /dir10/file1
[root@localhost ~]# ll -d /dir10/
drwxrwxrwx. 2 root root 19 Nov 3 15:38 /dir10/
[root@localhost ~]# ll /dir10/file1
----------. 1 root root 5 Nov 3 15:38 /dir10/file1
[root@localhost ~]# su - alice #切换普通用户
Last login: Sun Nov 3 15:38:53 CST 2019 on pts/0
[alice@localhost ~]$ cat /dir10/file1
cat: /dir10/file1: Permission denied #没有权限
[alice@localhost ~]$ rm -rf /dir10/file1
[alice@localhost ~]$ touch /dir10/file2

3.对目录有r,和没r的区别

[root@localhost ~]# chmod 070 /dir10/
[root@localhost ~]# su - alice
[alice@localhost ~]$ ll /dir10/
ls: cannot open directory /dir10/: Permission denied
[root@localhost ~]# chmod 074 /dir10/
[root@localhost ~]# su - alice
[alice@localhost ~]$ ls /dir10/
ls: cannot access /dir10/file2: Permission denied
file2

4.对目录有x,和没x的区别

[root@localhost ~]# chmod 770 /dir10/
[root@localhost ~]# su - alice
[alice@localhost ~]$ cd /dir10/
-bash: cd: /dir10/: Permission denied
[alice@localhost ~]$ exit
logout
[root@localhost ~]# chmod o+x /dir10/
[root@localhost ~]# su - alice
[alice@localhost ~]$ cd /dir10/
[alice@localhost dir10]$

在这里插入图片描述
对文件:
r----cat
w —vi、vim
x ---- bash /dir/file

对目录:
r —ls
w -----touch、rm
x ---- cd

4.权限掩码

4.1.umask 用户掩码

#查看umask
[root@localhost ~]# umask
0022 root账户默认
0002 普通用户默认

#root用户默认最高权限
目录777 文件666

#通过计算得出root用户创建目录和文件的权限为:
也是现在root用户创建完目录和文件的默认权限:
目录:755
文件:644

#修改umask
[root@localhost ~]# umask 0111

4.2.高级权限

高级权限 suid,sgid,sticky

suid ==== 4 提权 (只对二进制命令文件生效,其他不管用)
sgid ==== 2 组继承 (只能对目录设置)
sticky == 1 (t权限) 权限控制

4.3.设置特殊权限

a、字符—语法:
chmod u+s file
chmod g+s dir
chmod o+t dir

b、数字
chmod 4777 file
chmod 2770 dir
chmod 1770 dir

案例

suid 普通用户通过suid提权 <针对文件>
在进程文件(二进制,可执行的命令文件)上增加suid权限
[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# chmod u+s /usr/bin/rm
[root@localhost ~]# su - alice
Last login: Wed Nov 6 17:40:40 CST 2019 on pts/0
[alice@localhost ~]$ cat /root/file1.txt
123
[alice@localhost ~]$ rm -rf /root/file1.txt

Set UID

1、SUID权限仅对命令文件(二进制文件)有效;
2、执行者将具有该程序拥有者(owner)的权限。

取消提权

[root@localhost ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62864 Nov 6 2016 /usr/bin/rm
此时一旦给rm加上suid权限之后,普通用户相当于root用户。(即提权)

[root@localhost ~]# chmod u-s /usr/bin/rm #取消提权

案例二

Set GID

把s放到文件的所属用户组的x位置上的话,就是SGID。那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。
SGID主要用在目录上-----如果用户在此目录下具有w权限的话,使用者在此目录下建立新文件,则创建的这个文件的群组与此目录的群组相同。

[root@localhost ~]# mkdir /opt/dir1 #创建目录
[root@localhost ~]# groupadd hr #创建一个组
[root@localhost ~]# chmod 775 /opt/dir1/ #设置权限
[root@localhost ~]# ll -d /opt/dir1/
drwxrwxr-x. 2 root root 6 Nov 6 21:26 /opt/dir1/
[root@localhost ~]# chown .hr /opt/dir1/ #设置属组
[root@localhost ~]# chmod g+s /opt/dir1/ #设置sgid
[root@localhost ~]# ll -d /opt/dir1/
drwxrwsr-x. 2 root hr 6 Nov 6 21:26 /opt/dir1/
[root@localhost ~]# touch /opt/dir1/a.txt
[root@localhost ~]# ll /opt/dir1/a.txt
-rw-r–r--. 1 root hr 0 Nov 6 21:33 /opt/dir1/a.txt

[root@localhost ~]# chmod o+w /opt/dir1/ -R
[root@localhost ~]# su - alice
Last login: Wed Nov 6 21:34:59 CST 2019 on pts/2
[alice@localhost ~]$ touch /opt/dir1/b.txt
[alice@localhost ~]$ ll /opt/dir1/b.txt
-rw-rw-r–. 1 alice hr 0 Nov 6 21:35 /opt/dir1/b.txt

Sticky Bit

这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除.

[root@localhost ~]# cd /home/
[root@localhost home]# mkdir dir2
[root@localhost home]# chmod 757 dir2/
[root@localhost home]# chmod o+t dir2/
[root@localhost home]# ll -d dir2/
drwxr-xrwt. 2 root root 52 Oct 31 16:49 dir2/
[root@localhost home]# useradd jack #创建用户
[root@localhost home]# su - alice
Last login: Wed Nov 6 21:48:12 CST 2019 on pts/2
[alice@localhost ~]$ touch /home/dir2/alice.txt #用户alice创建文件
[alice@localhost ~]$ exit
logout
[root@localhost home]# su - jack
Last login: Wed Nov 6 21:48:36 CST 2019 on pts/2
[alice@localhost ~]$ touch /home/dir2/jack.txt #用户jack创建文件
[alice@localhost ~]$ rm -rf /home/dir2/alice.txt
rm: cannot remove ‘/home/dir2/alice.txt’: Operation not permitted
测试jack删除alice创建的文件,无法删除

4.4.目前两种给普通用户提权手段:

sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。

案例
放开所有命令使用权

配置解释:
root表示用户名
第一个 ALL 指示允许从任何终端、机器访问 sudo
第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
第三个 ALL 表示所有命令都可以作为 root 执行

[root@localhost ~]# visudo #打开配置文件
90 ##
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容
94 ## Allows members of the ‘sys’ group to run networking, software,
测试
[root@localhost ~]# su - jack
Last login: Wed Nov 6 22:04:46 CST 2019 on pts/2
[alice@localhost ~]$ sudo mkdir /test1

放开个别命令使用权

[root@localhost ~]# visudo
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD:ALL
94 alice ALL=(ALL) NOPASSWD:/usr/bin/mkdir, /usr/bin/rm, /usr/bin/touch
95
96 ## Allows members of the ‘sys’ group to run networking, software,
测试:
[root@localhost ~]#su - alice
Last login: Fri Jul 24 00:52:13 CST 2020 on pts/1
[alice@localhost ~]$ touch /file
touch: cannot touch ‘/file’: Permission denied
[alice@localhost ~]$ sudo touch /file

5.进程管理

5.1. 文件属性添加与查看

[root@localhost ~]# touch file1 file2 file3
1.查看文件属性
[root@localhost ~]# lsattr file1 file2 file3
---------------- file1
---------------- file2
---------------- file3
2.设置权限
[root@localhost ~]# chattr +a file1 #不允许修改,只允许追加
[root@localhost ~]# chattr +i file2 #不允许做任何操作
[root@localhost ~]# chattr +A file3
[root@localhost ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖或截断这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间

5.2.测试

[root@localhost ~]# echo 111 > file1 #覆盖,只允许追加
-bash: file1: Operation not permitted
[root@localhost ~]#rm -rf file1 #不能删除
rm: cannot remove ‘file1’: Operation not permitted
[root@localhost ~]# echo 111 >> file1 #追加

[root@localhost ~]# echo 111 > file2
-bash: file2: Permission denied
[root@localhost ~]# echo 111 >> file2
-bash: file2: Permission denied
[root@localhost ~]# rm -rf file2
rm: cannot remove ‘file2’: Operation not permitted
[root@localhost ~]# mv file2 file4
mv: cannot move ‘file2’ to ‘file4’: Operation not permitted

取消权限
[root@localhost ~]# chattr -a file1
[root@localhost ~]# chattr -i file2

6.进程管理

6.1.什么是进程

进程是已启动的可执行程序的运行实例,是程序运行的过程, 动态的,有生命周期及运行状态。
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx

6.2.查看进程 process

静态查看

[root@localhost ~]# ps aux | less
参数解释:
ps :process nsapashot
a 只能查看系统里面运行的所有终端进程
u 显示进程拥有者
x 显示系统内所有进程
f 显示进程之间的父子关系

[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

USER: #运行进程的用户
PID: #进程ID
%CPU: #CPU占用率
%MEM: #内存占用率
VSZ #进程占用的虚拟内存大小
RSS #占用的物理内存大小
STAT: #进程状态 —了解
? #表示没有占用终端
R #运行
S #可中断睡眠 Sleep
D #不可中断睡眠
T #停止的进程
Z #僵尸进程
X #死掉的进程
START: #进程的启动时间
TIME: #进程占用CPU的总时间
COMMAND: #进程文件,进程名

进程状态–了解
Sl 以线程的方式运行
Ss s进程的领导者,父进程
R+ +表示是前台的进程组
S< <优先级较高的进程
SN N优先级较低的进程
查看tty的方法:
[root@localhost ~]# tty
? 表示这个进程开启的时候没有占用终端

查看进程2

[root@linux-server ~]# ps -ef
参数解释:
-e 显示所有进程
-l 长格式显示
-f 完整格式

UID 用户ID
PID 进程ID
PPID 父进程ID
C CPU占用率
STIME 开始时间
TTY 开始此进程的TTY----终端设备
TIME 此进程运行的总时间
CMD 命令名在这里插入图片描述

查看单个pid

[root@localhost ~]# yum install -y httpd #安装apache软件
[root@localhost ~]# systemctl start httpd #启动
[root@localhost ~]# cat /var/run/httpd/httpd.pid
1043

查看指定PID

[root@localhost ~]# ps aux | grep sshd
root 1043 0.0 0.2 105996 4120 ? Ss 01:32 0:00 /usr/sbin/sshd -D
grep:过滤

查看端口

[root@localhost ~]# yum install lsof #安装软件包
[root@localhost ~]# lsof -i:80 #端口号,这能查看带端口的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 64249 root 4u IPv6 1373628 0t0 TCP *:http (LISTEN)

#查网络进程和正在监听的端口
[root@localhost ~]# netstat -lntp
参数详解:
-a 显示全部的进程
-u 显示udp
-n 以数字的新式显示协议名称
-t tcp
-p:显示进程的名称和pid
-l :只显示正在被监听的端口

[root@localhost ~]# w #看已经登陆到终端的进程信息,远程登陆会有ip 地址

动态查看进程

[root@localhost ~]# top #动态显示信息,三秒刷新一次。

在工作中必须监控的东西 load average(平均负载)正在使用和等待cpu处理的队列长度 也是个数。
1分钟 第一个数字
5分钟 第二个数字
15分钟 第三个数字
计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除cpu的个数,得出的值,如果值大于1那么那时候的负载高。

CPU利用率:显示的是程序在运行期间实时占用的CPU百分比
CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。

top操作

[root@localhost ~]# top
h|? 帮助

往下翻页
< 往上翻页
M 按内存排序
P 按cpu排序
q 退出
z 彩色显示
W 保存
PR 优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。
SHR 共享内存大小,单位kb
ni :nice值
id: cpu空闲率
wa:cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了

进程优先级 nice

nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。

进程控制

按pid杀死进程

kill,pkill
语法: kill 信号 PID #信号也是进程间通信的一种方式
[root@localhost ~]# kill -l #查看所有信号
-1 HUP 重新加载进程或者重新加载配置文件,PID不变
-9 KILL 强制杀死
-15 TERM 正常杀死(这个信号可以默认不写)
-18 CONT 激活进程
-19 STOP 挂起进程

案例一
给vsftpd进程发送信号1,15 vsftpd信号测试
[root@localhost ~]# yum install -y vsftpd #安装vsftpd
[root@localhost ~]# systemctl start vsftpd #启动
[root@localhost ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 576 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@localhost ~]# kill -1 59363 #发送重启信号,例如vsftpd的配置文件发生改变,希望重新加载
[root@localhost ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 748 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@localhost ~]# kill 59363 #正常杀死进程,信号为-15可以默认不写。我们可以使用systemctl stop vsftpd 停止服务。
[root@localhost ~]# ps aux | grep vsftpd
root 62493 0.0 0.0 112660 968 pts/0 S+ 16:51 0:00 grep --color=auto vsftpd
进程状态解释–了解:
+:表示运行在前台的进程组
S+:休眠状态
T+:暂停,挂起状态
s:父进程

案例二

给vsftpd进程发送信号-9, vsftpd信号测试

[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# ps aux | grep vsftpd
root 67003 0.0 0.0 53212 572 ? Ss 16:57 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 67089 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
[root@localhost ~]# kill -9 67003 #强制杀死,一般用于不能正常停止的情况下
[root@localhost ~]# ps aux | grep vsftpd
root 67190 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd

案例三

使用pkill 杀死vsftpd进程

[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# ps -aux | grep vsftpd
root 73399 0.0 0.0 53212 572 ? Ss 17:05 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 73499 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
[root@localhost ~]# pkill -9 vsftpd #使用pkill可以指定进程名字
[root@localhost ~]# ps -aux | grep vsftpd
root 73643 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd

作业控制

作业控制之jobs:

作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程或者放到后台去运行,等一会儿再继续执行该进程。

[root@localhost ~]# sleep 7000 & #&:让命令或者程序后台运行
[1] 5441
[root@localhost ~]# sleep 8000 #ctrl+z 把程序放到后台(这方法会让程序在后台暂停)
^Z
[2]+ Stopped sleep 8000

[root@localhost ~]# jobs #查看后台的工作号
[1]- Running sleep 7000 &
[2]+ Stopped sleep 8000
[root@localhost ~]# bg %2 #让暂停的程序在后台运行,%是用来修饰job number,2就是job number。(程序的工作号)
[2]+ sleep 8000 &
[root@localhost ~]# jobs
[1]- Running sleep 7000 &
[2]+ Running sleep 8000 &

[root@localhost ~]# fg %1 #将后台的程序调到前台
sleep 7000
^C
[root@localhost ~]# jobs
[2]+ Running sleep 8000 &
[root@localhost ~]# kill -9 %2 #通过kill杀死进程
[root@localhost ~]# jobs
[2]+ Killed sleep 8000
[root@localhost ~]# jobs #在次查看没有了

常用命令

1.查看当前CPU负载

[root@localhost ~]# uptime
17:35:01 up 16:02, 3 users, load average: 0.00, 0.02, 0.05

2.查看内存使用

[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1984 154 1508 8 321 1632
Swap: 2047 0 2047

-m:单位M

3.linux启动过程

1加电,2加载bios设置,3加载grub,4加载内核系统到内存当中,
5加载配置文件,6加载内核模块,7完成相应的初始化工作和启动相应的服务,
8启动系统进程,9出现登录界面,10开机启动完成

4.查看系统的版本和内核

[root@localhost ~]# cat /etc/redhat-release #查看版本
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# uname -a #看查正在运行的内核版本
Linux linux-server 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# uname -r #查看内核版本
3.10.0-693.el7.x86_64

5.修改主机名

[root@localhost ~]# hostnamectl set-hostname xxxx #主机名,修改完之后断开与终端连接,然后在重新连接即可。
查看主机名
[root@localhost ~]# hostname

6.跳板机(堡垒机)的作用

1 身份验证
2 屏幕录制,防止员工对服务器做有害的操作
3 批量操作 一次性操作2-200台机器

7.安装过操作系统吗?怎么安装?

1.小批量设备,使用U盘安装
(调整bios参数从U盘启动)
2.大批量设备搭建PXE装机系统,从网络批量安装
(调整网络启动项,从网络启动)

上传下载

yum install -y lrzsz
上传
rz
下载
sz 文件

管道与重定向

1.重定向

标准输入、标准正确输出、标准错误输出

进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符。
进程使用文件描述符来管理打开的文件(FD----file descriptors).
文件描述符:每打开一个程序都会有文件描述

0,标准输入(键盘)
1,标准输出
2,标准错误,
3+,进程在执行过程中打开的其他文件。
&:表示正确错误混合输出

2.输出重定向 (覆盖,追加)

----覆盖

----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>

2.1. 案例1:输出重定向(覆盖)

[root@youngfit ~]# date 1> date.txt #正确输出–覆盖
#注意:如果 > 前面什么都不加默认为1,标准正确输出。

2.2.案例2:输出重定向(追加)

[root@youngfit ~]# date >> date.txt #正确输出–追加

2.3. 案例3:错误输出重定向

[root@youngfit ~]# ls /home/ /aaaaaaaaa >list.txt
ls: cannot access /aaaaaaaaa: No such file or directory
[root@youngfit ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt #重定向到不同的位置
[root@youngfit ~]# cat error.txt
ls: cannot access /aaaaaaaaa: No such file or directory

2.4.正确和错误都输入到相同位置

[root@youngfit ~]# ls /home/ /aaaaaaaaa &>list.txt #混合输出到相同文件

2.5.重定向到空设备/dev/null

[root@youngfit ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null #空设备,将错误的输出丢掉
[root@youngfit ~]# ls /home/ /aaaaaaaaa &>/dev/null #空设备,将正确与错误的输出丢掉

echo会将输入的内容送往标准输出(打印)
echo 内容 >> 文件名或脚本里面

2.6.脚本中使用重定向

实战一(没有使用重定向)

[root@youngfit ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100
if [ $? -eq 0 ];then
echo “10.18.40.100 is up.”
else
echo “10.18.40.100 is down!”
fi
[root@youngfit ~]# chmod +x ping1.sh
[root@youngfit ~]# ./ping1.sh #执行文件(执行脚本)
PING 10.18.40.100 (10.18.40.100) 56(84) bytes of data.

— 10.18.40.100 ping statistics —
1 packets transmitted, 0 received, 100% packet loss, time 0ms

10.18.40.100 is down!

实战二(使用重定向)

[root@youngfit ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100 &>/dev/null
if [ $? -eq 0 ];then
echo “10.18.40.100 is up.” >>up.txt
else
echo “10.18.40.100 is down!” >>down.txt
fi
[root@youngfit ~]# ./ping1.sh

3.输入重定向 <

标准输入: < 等价 0<

例子

默认情况下,cat 命令会接受标准输入设备(键盘)的输入,并显示到控制台,但如果用文件代替键盘作为输入设备,那么该命令会以指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。

[root@youngfit ~]# cat /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin

[root@youngfit ~]# cat < /etc/passwd #输入重定向
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin

虽然执行结果相同,但第一行代表是以键盘作为输入设备,而第二行代码是以 /etc/passwd 文件作为输入设备
注意:将/etc/passwd作为cat的输入,读出/etc/passwd的内容

通过输入重定向创建文件

(cat > file << EOF )是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。

语法:cat >> file5 <<EOF #可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须定格写。

实战案例一:

[root@youngfit ~]# cat >file4 <<EOF

111
222
333
444
EOF
[root@youngfit ~]# cat file4
111
222
333
444

实战案例二

利用重定向建立多行的文件 脚本创建多行文件

[root@youngfit ~]# vim create_file.sh
#!/bin/bash
cat >file200.txt <<EOF
111
222
333
yyy
ccc
EOF
[root@youngfit ~]# chmod +x create_file.sh
[root@youngfit ~]# ./create_file.sh
[root@youngfit ~]# cat file200.txt
111
222
333
yyy
ccc

四、管道 |

用法:command1 | command2 |command3 |…

实战案例一

[root@youngfit ~]# rpm -qa |grep ‘httpd’ #查询所有安装的软件包,过滤包含httpd的包
httpd-tools-2.4.6-90.el7.centos.x86_64
httpd-2.4.6-90.el7.centos.x86_64

[root@youngfit ~]# ps aux | grep ‘sshd’

实战案例二

将/etc/passwd中的用户按UID大小排序

[root@youngfit ~]# sort -t":" -k3 -n /etc/passwd #以: 分隔,将第三列按字数升序
[root@youngfit ~]# sort -t":" -k3 -n /etc/passwd -r #以: 分隔,将第三列按字数降序
[root@youngfit ~]# sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
[root@youngfit ~]# sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行

实战案例三

[root@youngfit ~]# netstat -lntp | awk ‘NR==3 {print $4}’ | awk -F’:’ ‘{print $2}’
22

三、参数传递:xargs

对:ls cp rm 管道不能执行。所以通过xargs。

语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
目录时 -r
解释:前面传过来的东西交给大括号

cat file.txt |xargs ls -l
前面是目录或者目录的路径。 ls - l 后面可以不加大括号,直接执行。

实战案例一

[root@youngfit ~]# touch /home/file{1…5}
[root@youngfit ~]# vim files.txt
/home/file1
/home/file2
/home/file3
/home/file4
/home/file5
注意:复制也可以,但是请看好行后不能有空格。
[root@youngfit ~]# cat files.txt |ls -l #不加xargs传参,看输出结果
[root@youngfit ~]# cat files.txt |rm -rvf #不加xargs传参,看输出结果
[root@youngfit ~]# cat files.txt |xargs ls -l
-rw-r–rwx. 1 root root 12 Nov 7 21:57 /home/file1
-rw-r–r--. 1 root root 0 Nov 7 21:57 /home/file2
-rw-r–r--. 1 root root 0 Nov 7 21:57 /home/file3
-rw-r–r--. 1 root root 0 Nov 7 21:57 /home/file4
-rw-r–r--. 1 root root 0 Nov 7 21:57 /home/file5
[root@youngfit ~]# cat files.txt |xargs rm -rvf
removed ‘/home/file1’
removed ‘/home/file2’
removed ‘/home/file3’
removed ‘/home/file4’
removed ‘/home/file5’

实战案例二

[root@youngfit ~]# touch /home/file{1…5}
[root@youngfit ~]# # cat files.txt | xargs -i cp -rvf {} /tmp/
‘/home/file1’ -> ‘/tmp/file1’
‘/home/file2’ -> ‘/tmp/file2’
‘/home/file3’ -> ‘/tmp/file3’
‘/home/file4’ -> ‘/tmp/file4’
‘/home/file5’ -> ‘/tmp/file5’

[root@youngfit ~]# cat files.txt |xargs -I {} cp -rvf {} /tmp

加-i 参数直接用 {}就能代替管道之前的标准输出的内容;
加 -I 参数 需要事先指定替换字符

常用小命令

[root@youngfit ~]# du -h /etc/ #查看目录及目录中的文件大小
[root@youngfit ~]# du -sh /etc/ #查看目录的总大小
[root@youngfit ~]# ls /etc/ | wc -l #查看目录中有多少个文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值