美文网首页Linux
Linux基础(二)

Linux基础(二)

作者: jan29 | 来源:发表于2021-06-28 18:38 被阅读0次

    七、重定向、管道符

    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基础(二)

        本文链接:https://www.haomeiwen.com/subject/tsqcultx.html