Linux基础(二)

七、重定向、管道符

1、重定向

1、输入输出原理

进程使用称为文件描述符的编号通道来获取并发送输出。所有进程在开始时至少三个文件描述符。
标准输入(通道0)从键盘输入
标准正常输出(通道1)将标准正常输出发送到终端。
标准错误输出(通道2)将标准错误输出发送到终端。
如果程序打开连接至其它文件的单独连接,则可能要使用更大编号的文件描述符。

image.png

输入输出重定向
输出重定向:把原本要输出到屏幕的数据信息写入到指定文件中
输入重定向:是指把文件导入到命令中
格式: 命令 输出重定向/输入重定向 文件

2、输出重定向

序号 符号 作用
1 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
2 命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
3 命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
4 命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
5 命令 > /dev/null 将正确的输出丢弃
6 命令 2> /dev/null 将错误的输出丢弃
7 命令 &> /dev/null 不管是正确的输出还是错误的输出全部丢弃
8 命令 > 文件 2>&1 或命令 &> 文件 将标准输出与错误输出共同写入到文件中
9 命令 >> 文件 2>&1 或命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
10 命令 2> 文件 1> 文件2 分别将将标准输出与错误输出到不同文件中
11 命令 2>> 文件 1>> 文件2 分别将将标准输出与错误输出到不同文件中(追加到原有内容的后面)
1、[root@server1 ~]# ls > out_test
2、[root@server1 ~]# lsls 2> err_test
3、[root@server1 ~]# ls >> out_test
4、[root@server1 ~]# lsls 2>> out_test
5、[root@server1 ~]# ls > /dev/null
6、[root@server1 ~]# lsls 2> /dev/null
7、[root@server1 ~]# ls &> /dev/null
8、[root@server1 ~]# ls &> all_test
9、[root@server1 ~]# lsls &>> all_test
10、[root@server1 ~]# ls 2> error.log 1> out.log
11、[root@server1 ~]# lsls 2>> error.log 1>> out.log

3、输入重定向

序号 符号 作用
1 命令 < 文件 将文件作为命令的标准输入
2 命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
3 命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
4 cat >> 文件 << 分隔符 将多行文本写入一个文件当中
1、[root@server1 ~]# wc -l < anaconda-ks.cfg
2、[root@server1 ~]# cat << EOF
> Whatever is worth doing is worth doing well.
> Happiness is a way station between too much and too little.
> EOF
Whatever is worth doing is worth doing well.
Happiness is a way station between too much and too little.
3、[root@server1 ~]# wc -w < anaconda-ks.cfg > world
4、[root@server1 ~]# cat >> test.txt << EOF
> Whatever is worth doing is worth doing well.
> Happiness is a way station between too much and too little
> EOF

2、管道符

作用:将前一个命令的结果作为后一个命令的参数
注意:管道符是可以重叠使用的
我们来举几个例子,你就慢慢的明白它的使用方式了

[root@server1 ~]# ls | wc -w
[root@server1 ~]# ls -l | head -3
[root@server1 ~]# ps -ef | grep sshd
root      12990      1  0 03:10 ?        00:00:00 /usr/sbin/sshd -D
[root@server1 ~]# echo "hello world" >> hello.test
[root@server1 ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] > anaconda-ks.cfg.out
[root@server1 ~]# who | tr 'a-z' 'A-Z' > who.out

3、通配符

用于匹配字符,指包含这些字符的字符串“?”,“*”,“[]”,{}

? 任何一个字符

[root@server1 ~]# ls /sbin/???
/sbin/arp  /sbin/lid  /sbin/lvs  /sbin/sln  /sbin/zic
/sbin/cbq  /sbin/lvm  /sbin/pvs  /sbin/vgs

[abcd]表示匹配中括号内任意一个字符就成立

[root@server1 ~]# ls /sbin/[abcd]rp
/sbin/arp

{}生成序列

[root@server1 ~]# touch test{1..4}

*匹配全部字符

[root@server1 ~]# ll test*
-rw-r--r-- 1 root root 284 Jun 28 04:43 test
-rw-r--r-- 1 root root   0 Jun 28 05:31 test1
-rw-r--r-- 1 root root   0 Jun 28 05:31 test2
-rw-r--r-- 1 root root   0 Jun 28 05:31 test3
-rw-r--r-- 1 root root   0 Jun 28 05:31 test4
-rw-r--r-- 1 root root 104 Jun 28 05:03 test.txt

八、软件包管理

1、分类

1、源码包
顾名思义,没有进行编译之后的包含源代码的包,系统需要编译后才能安装
优点
开源,如果能力足够,可以修改源代码
可以自由选择所需要的功能
软件安装是编译安装,所以更加适合操作系统,更加稳定,效率更高
卸载方便
缺点
安装过程步骤较多,尤其是在安装大型的环境,很容易出错
编译时间较长,所以安装时间较长
因为是编译安装,安装过程中出错,新手很难解决

2、二进制包
已经编译好的安装包,系统可直接进行安装。常见的二进制包有rpm包,deb包。RHEL,Centos使用rpm包;Debian,Ubuntu使用deb包。
优点
包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询,卸载
安装速度比源码包安装的快得多
缺点
经过编译,看不到源代码
功能选择不如源代码灵活
依赖性(事实上不管二进制安装还是源码包安装都有这个问题)
功能

2、RPM包管理-rpm命令管理

1、rpm包命名规则
以mokutil-15-1.el7.centos.x86_64.rpm为例

rpm包名部分 含义
mokutil 软件包名
15 软件版本
1 软件发布的次数
el7.centos 适合的linux平台
x86_64 适合的硬件平台
rpm rpm包扩展名

注意 rpm包严格区分包名和包全名,以上边这个包为列
mokutil为包名,mokutil-15-1.el7.centos.x86_64.rpm为包全名
包全名:
包名:操作的包是没有安装的软件包时,使用包全名。而且需要注意看路径
包名:操作系统已经安装的软件包时,使用包名。因为查询的是/var/lib/rpm下的数据库,而不是路径

2、rpm依赖性
树形依赖:a→b→c
环形依赖:a→b→c→a
模块依赖:列如libodbc.so.2(),如果遇到类似于这种模块的,我们需要查询www.rpmfind.net安装模块所在的包

3、rpm命令使用

选项 作用
-i (install) 安装
-v (verbose) 显示详细信息
-h (hash) 显示进度
--nodeps 不检查依赖性
-U (upgrade) 更新
-e (erase) 卸载
-q (query) 查询
-a (all) 全部
-i (information) 信息
-p (package) 包信息
-l (list) 列表
-f (file) 文件

rpm包安装

[root@server1 Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm 

rpm包升级

[root@server1 Packages]# rpm -Uvh httpd-2.4.6-67.el7.centos.x86_64.rpm

rpm包卸载

[root@server1 Packages]# rpm -e httpd-2.4.6-67.el7.centos.x86_64.rpm

查询包是否安装

[root@server1 Packages]# rpm -q httpd

查询软件包详细信息

[root@server1 Packages]# rpm -qi httpd
[root@server1 Packages]# rpm -qip httpd-2.4.6-67.el7.centos.x86_64.rpm

查询包中文件安装位置

[root@server1 Packages]# rpm -qi httpd
[root@server1 Packages]# rpm -qlp httpd-2.4.6-67.el7.centos.x86_64.rpm 

查询系统文件属于哪个rpm包

[root@server1 Packages]# rpm -qf /usr/share/httpd/noindex/images

查询软件包的依赖性

[root@server1 Packages]# rpm -qR httpd
[root@server1 Packages]# rpm -qRp httpd-2.4.6-67.el7.centos.x86_64.rpm

3、RPM包管理-yum在线管理

yum诞生的最大原因就是解决rpm包依赖性的问题,用yum进行对一个包的操作事实上还是对rpm包操作。

1、yum命令使用
查询所有的软件包

[root@server1 ~]# yum list

搜索服务器上所包含关键字所有的包

[root@server1 ~]# yum search httpd

安装

[root@server1 ~]# yum -y install httpd

升级

[root@server1 ~]# yum update        #更新所有的包,包括系统默认软件包和系统内核
[root@server1 ~]# yum update httpd      #更新httpd

卸载

[root@server1 ~]# yum -y remove httpd

列出所有可用的软件组

[root@server1 ~]# yum grouplist

安装指定的软件组

[root@server1 ~]# yum -y groupinstall "General Purpose Desktop"

卸载指定的软件组

通过搜索命令来搜索软件包

[root@server1 ~]# yum provides "*/rz"

4、yum源配置

rpm软件包的来源有三种:分别是官方源,第三方源,用户自定义源。
软件仓库的提供方式有三种:分别是file,ftp,http


配置file方式使用本地源

实验环境 192.168.1.41
192.168.1.41作为rpm仓库 192.168.1.41作为使用者

[root@server1 ~]# mount /dev/sr0 /opt/
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# mkdir bak
[root@server1 yum.repos.d]# mv CentOS-* bak
[root@server1 yum.repos.d]# vim local.repo
[centos]
name=centos
baseurl=file:///opt/
enabled=1
gpgcheck=0
[root@server1 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                repo name                              status
centos                                 centos                                 3,894
repolist: 3,89

1、挂载光盘镜像文件(做软件仓库)
2、备份网络源
3、新建repo文件
4、验证


配置ftp方式使用公司内网源

实验环境 192.168.1.41 192.168.1.42
192.168.1.41作为rpm仓库 192.168.1.42作为使用者

[root@server1 ~]# yum -y install vsftpd
[root@server1 ~]# vim /etc/vsftpd/vsftpd.conf
anon_root=/opt/
[root@server1 ~]# systemctl start vsftpd
[root@client1 ~]# cd /etc/yum.repos.d/
[root@client1 yum.repos.d]# mkdir bak
[root@client1 yum.repos.d]# mv CentOS-* bak/
[root@client1 yum.repos.d]# vim ftp.repo
[centos]
name=centos
baseurl=ftp://192.168.1.41
enabled=1
gpgcheck=0
[root@client1 yum.repos.d]# yum repolist
repo id                                repo name                              status
centos                                 centos                                 3,894
repolist: 3,894

1、在1.41节点安装vsftpd
2、修改配置文件,vsftpd默认工作目录为/opt
3、在1.42节点配置repo文件
4、验证


配置http方式使用公司内网源

实验环境 192.168.1.41 192.168.1.42

192.168.1.41作为rpm仓库 192.168.1.42作为使用者

[root@server1 ~]# yum -y install httpd
[root@server1 ~]# systemctl start vsftpd
[root@server1 ~]# mkdir /var/www/html/centos
[root@server1 ~]# mount /dev/sr0 /var/www/html/centos/
[root@client1 yum.repos.d]# vim httpd.repo
[centos]
name=centos
baseurl=http://192.168.1.41/centos
enabled=1
gpgcheck=0
[root@client1 yum.repos.d]# yum repolist
repo id                                repo name                              status
centos                                 centos                                 3,894
repolist: 3,894

1、在1.41节点安装httpd,启动
2、卸载之前的挂载,重新挂载在http工作目录下centos目录(http工作目录/var/www/html,挂载前建立好centos目录)
3、在1.42节点配置repo文件(删除之前的repo文件)
4、验证

九、用户和用户组管理

1、用户配置文件

用户信息文件/etc/password

字段 含义
第1字段 用户名称
第2字段 密码标识位
第3字段 UID(用户ID,1:超级用户,1-499:系统用户,500-65535:普通用户)
第4字段 GID(用户初始组ID)
第5字段 用户说明
第6字段 家目录(用户的工作目录),普通用户:/home/用户名,超级用户:/root/
第7字段 登陆之后的shell

影子文件/etc/shadow

字段 含义
第1字段 用户名
第2字段 加密密码SHA512散列加密算法,!!或*代表没有密码
第3字段 最后一次修改时间,使用时间戳表示
第4字段 两次密码的修改间隔时间
第5字段 密码有效期
第6字段 密码修改到期前的警告天数
第7字段 密码过期后的宽限天数
第8字段 账号失效时间,时间戳表示
第9字段 保留

时间戳与时间的互相替换

[root@server1 ~]# date -d "1970-01-01 18811 days"      #时间戳替换为时间
Sat Jul  3 00:00:00 EDT 2021  
[root@server1 ~]# echo $(($(date --date="2021/07/05" +%s)/86400+1))
18814      #时间替换为时间

组信息文件/etc/group

字段 含义
第1字段 组名
第2字段 组密码标识位
第3字段 GID
第4字段 组中附加用户

组密码文件/etc/gshadow

字段 含义
第1字段 组名
第2字段 密码
第3字段 组管理员用户名
第4字段 组中附加用户

除此之外还有
用户的家目录
普通用户:/home/用户名/
超级用户:/root/
用户的邮箱
/var/spool/mail
用户的模板
/etc/skel
用户默认值文件
/etc/default/useradd
/etc/login.defs

2、用户管理命令

useradd

添加用户

选项 含义
-c 加上备注文字。备注文字会保存在passwd的备注栏位中
-d 指定用户登入时的起始目录
-g 指定用户所属的群组
-G 指定用户所属的附加群组
-s 指定用户登入后所使用的shell
-u 指定用户ID
[root@server1 ~]# useradd test1      #直接创建用户test1
[root@server1 ~]# useradd -u 510 -g test -G root test2 -d /test2 -c "test2 user" -s /bin/bash      #创建用户test2,uid为510,初始组为test,附加组为root,家目录为/test2,描述为“test2 user”,登陆终端为test2

passwd

设置用户密码

[root@server1 ~]# passwd       #设置当前登陆用户的密码
[root@server1 ~]# passwd user1      #设置用户user1的密码(只有root管理员才可以为其他用户设置密码)
[root@server1 ~]# passwd -S user1      #查询user1的密码状态
[root@server1 ~]# passwd -l user1      #暂时锁定用户user1
[root@server1 ~]# passwd -u user1      #解锁用户user1
[root@server1 ~]# echo "000000" | passwd --stdin user1      #使用字符串作为user1用户的密码

usermod

修改用户信息

选项 含义
-c 修改备注文字。备注文字会保存在passwd的备注栏位中
-G 修改用户所属的附加群组
-u 指定用户ID
-L 临时锁定用户
-U 解锁用户锁定
[root@server1 ~]# usermod -c "lamp user" user1
[root@server1 ~]# usermod -G test user1
[root@server1 ~]# usermod -L user1
[root@server1 ~]# usermod -U user1

userdel

删除用户

[root@server1 ~]# userdel -r test1      #删除用户test1
[root@server1 ~]# userdel -r test2      #删除用户test2的同时删除user2的家目录

su

切换用户

[test@server1 ~]$ su root      #只是切换了root身份,但Shell环境仍然是普通用户的Shell
[test@server1 ~]$ su - root      #连用户和Shell环境一起切换成root身份

3、用户组管理命令

groupadd

添加用户组

[root@server1 ~]# groupadd mark      #添加用户组mark
[root@server1 ~]# groupadd -g 550 marktest      #添加用户组marktest并且设置组ID

groupmod

修改用户组信息

[root@server1 ~]# groupmod -g 551 marktest      #修改marktest的组ID为551
[root@server1 ~]# groupmod -n testmark marktest      #将marktest的用户组名修改为testmark

groupdel

删除用户组

[root@server1 ~]# groupdel testmark      #删除用户组testmark

十、权限管理

十一、文件系统管理

十二、定时任务管理

十三、sed、awk、grep三剑客使用

你可能感兴趣的:(Linux基础(二))