取别名

alias ls = 'ls -l' #给ls起别名,输入ls 相当于 ls -l

统计

cat 1.txt | wc -l #-l统计行数
cat 1.txt | wc -c #-l统计字节数
cat 1.txt | wc -m #-l统计字符数

下载软件包

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo #-O 指定下载目录
wget url #下载
wget -O 地址 url #下载

文件查找

  • 简介
    • which:命令查找
    • whereis:命令查找,同上
    • find:文件查找,针对文件名
    • locate:文件查找,依赖数据库
  • 实例
  1. which/whereis
    which ls #依赖PATH环境变量查找命令
    [root@localhost ~]# which ls
    alias ls='ls --color=auto'
    /usr/bin/ls
    whereis ls
    [root@localhost ~]# whereis ls
    ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
  2. locate
    locate 88888.txt #找不到,需要重启系统因为文件是我刚创建
    updatedb #更新数据库
    locate 88888.txt
  3. find
    语法:find [path] [options] [expression] [action]
    语法:命令 路径 选项 表达式 动作
    find /etc -name  a.txt
    命令 路径 选项 表达式
    find /etc -name hosts
    find /etc -iname HOSTS #-i 忽略大小写
    find /etc -iname hos* #*表示后面的都行,以hos开头就行
    find /etc -size +5M # -size 以大小来查找,查找大于5M的文件
    find /etc -size 5M # -size 以大小来查找,查找等于5M的文件
    find /etc -size -5M # -size 以大小来查找,查找小于5M的文件
    [root@localhost ~]# find /etc -size +5M
    /etc/udev/hwdb.bin
    [root@localhost ~]# ls -h -l /etc/udev/hwdb.bin #-h 人性化显示
    -r--r--r--. 1 root root 8.5M Apr 9 13:38 /etc/udev/hwdb.bin
    #按目录深度查找
    -maxdepth #按目录深度查找
    -a #表示and
    find / -maxdepth 3 -a -name ifcfg* #在/下的3级目录查找名字以ifcfg开头的
    [root@localhost ~]# find / -maxdepth 4 -a -name ifcfg*
    /etc/sysconfig/network-scripts/ifcfg-lo
    /etc/sysconfig/network-scripts/ifcfg-enp0s3
    # 按属主,属组查找
    find /home -user jack #-user 按属主找
    find /home -group jack #-user 按属组找
    # 按文件类型查找
    find /dev -type b #-type按文件类型查找,
    find /dev -type f # f为普通文件
    # 按文件权限查找
    find / -perm 714 -ls# 查看以714为权限的文件 -perm就是按权限 -ls就是动作,功能就是 ls -l
    [root@localhost ~]# find . -perm 714 -ls
    33574996 0 -rwx--xr-- 1 root root 0 Apr 10 10:22 ./1.txt
    # 后处理的动作
    -print #打印,默认就是-print
    -delete #删除
    find . -perm 714 -delete #找到后删除
    find /etc/ -name ifcfg* -ok cp -rvf {} /tmp \;
    # -ok 表示后面接参数
    # {}表示前面找到的内容
    # -rvf强制递归复制,并显示
    # \; #表示语句结束

文件打包压缩

  1. 简介
    tar命令是unix/linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户,建议针对目录
  2. 打包
    语法: tar 选项 包名 需要打包的文件或文件夹
    语法:tar -cf etc.tar /etc
    tar -cf etc.tar /etc # -c(create)压缩, -f(file) -f指定文件名 一定要放到末尾
    tar -czf etc-gzip.tar.gz /etc # -z 利用gzip工具进行压缩
    tar -czvf etc-gzip.tar.gz /etc # -z 利用gzip工具进行压缩,-v可视化
    -rw-r--r--. 1 root root 10M Apr 10 11:04 etc-gzip.tar.gz
    -rw-r--r--. 1 root root 29M Apr 10 11:01 etc.tar
    上述两个的文件大小不一样
    -z 用gzip压缩
    -j 用bzip2进行压缩.tar.bz
    -J 用xzip进行压缩.tar.xz
    由上往下体积越来越小,但是压缩时间越来越长
  3. 解压
    tar  -xvf etc-gzip.tar.gz #解压所有的都可以用这个 
    tar -xzvf etc-gzip.tar.gz #解压缩 -z利用gzip工具进行解压缩 -x表示解压 -v表示可视 -f指定文件名
    tar -xvf etc-gzip.tar.gz -C /tmp #解压到tmp,-C指定路径

软件管理

RPM包

  • 概述
  1. RPM Package Manager (原Red HatPackage Manager,现在是一个递归缩写)
  2. 由Red Hat 公司提出,被众多Linux发行版本所采用
  3. 为二进制(binary code)无需编译,可以直接使用
  4. 无法个人设置,开关功能
  5. 软件包实例(注意后缀):mysql-community-common-5.7-12-1.el7.x86_64.rpm,软件+组件+版本+后缀
  6. 认识RPM包
  • zip-3.0-11.el7.x86_64.rpm
  • 软件名:zip
  • 版本号:3.0-11
  • 发布版本(Release8/6/7):el7,Enterprise Linux7的缩写
  • 系统平台(32/64):x86_64
  • 文件后缀:rpm

源码包

  • 概述
  1. source code 需要通过GCC,C++编译环境编译才可以运行
  2. 可以个人设置,开关功能,配置操作复杂
  3. 软件包实例:nginx-1.8.1.tar.gz
  4. 认识源码包
  • nginx:软件名
  • 1.8.1:版本
  • tar.gz:压缩

RPM包管理

yum工具

  • 简介
  1. yum 全称Yellow dog Updater Modifited
  2. 是一个在Fedora和RedHat以及centos中的shell前段软件管理器
  3. 基于RPM包管理,能够从指定的服务器自动下载RPM包并安装
  4. 可以自动处理依赖关系,并且一次安装所有依赖的软件包,无需繁琐的一个一个安装。
  5. yum本地源:系统安装的光盘(去哪里下载)
  • 目的:告诉系统去哪里下载软件,通过系统光盘获得软件包,并安装软件
  • 观察yum核心配置目录:/etc/yum.repos.d/
    [root@localhost ~]# ls /etc/yum.repos.d/
    CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
    CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
    CentOS-Debuginfo.repo CentOS-Sources.repo
  • 备份官方源,并删除
    rm -rf /etc/yum.repos.d/* 
  • 编写本地yum库配置文件
    vim /etc/yum.repos.d/dvd.repo #名字自己随便取一定要用.repo的后缀名
    [dvd] #某一个库的名称,可随便取,中括号[]必须
    name=dvd #库的名称的说明,可随便取,name是必须的
    baseurl=file:///mnt/cdrom #下载库的具体地址,重要,前//是网页的格式,/mnt指得在在自己的/mnt目录
    gpgcheck=0 #是否进行gpg检查,为0表示不需要验证,为1表示需要验证
    enable = 0# 表示这个库不能用,等于1表示可以用,默认为1
  • 挂载安装光盘
    记得把光盘通电插到电脑上
    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom #把光驱挂载到/mnt/cdrom
  • 使用yum安装和卸载程序
    yum -y install httpd #安装httpd -y 所有都回答yes
    systemctl start httpd
    systemctl stop firewalld #关闭防火墙
    systemctl disable firewalld #禁用防火墙,开机不启动
  • 使用yum管理rpm包
    #安装
    yum -y install httpd vsftpd #全新安装
    yum -y reinstall httpd vsftpd #重新安装
    yum -y update httpd vsftpd #更新升级
    yum -y update #升级系统
    #查询
    yum list #查询下载的所有包
    yum list httpd # 列出下载的包httpd,后面有@表明已经安装,没有@表示没有安装
    yum -y remove httpd #卸载软件包
  • 编写远程yum库配置文件
  1. 清理原有的yum配置
    rm -rf /etc/yum.repos.d #先保存再清除
  2. 下载阿里官网配置
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #下载基础包

    wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo #下载扩展包
  3. 更新配置
    yum clean all && yum makecache
    #yum clean all 的主要作用是清除所有已下载软件包和元数据(metadata)以及临时文件的缓存
    #yum makecache的作用是将服务器上的软件包信息缓存到本地,以提高搜索和安装软件的速度
  4. 查看,下载安装
    yum repolist
    [root@localhost ~]# yum repolist
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.aliyun.com
    * extras: mirrors.aliyun.com
    * updates: mirrors.aliyun.com
    repo id repo name status
    base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
    epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,798
    extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 526
    updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 5,802
    repolist: 30,198

rpm工具

  • 前言
  1. 管理红帽系统/centos系统,rpm包的基本工具
  2. yum功能相同
  3. 安装
    rpm -ivh 包名 #需要先下载包,-i 安装,-v 可视化,打印更多信息,-h 打印百分比,和-v配合使用
  4. 查询
    rpm -q wget #查询软件包
  5. 卸载
    rpm -evh 软件包 #先查询,再删除 -e(erase)卸载

源码包管理

  1. 下载源码包
  2. 解压
    tar -xvzf tengine-3.1.0.tar.gz
  3. 配置
    ./configure --user=www --group=www --prefix=/usr/local/nginx #配置文件prefix安装路径
  4. 编译
    make #编译
  5. 安装
    make install #安装

任务计划

定时完成一些任务,在命令上加上时间戳

一次性调度执行(schedule one-time tasks with) at

  1. 语法格式:at
  2. 示例
    now + 5min #五分钟后
    teatime tomorrow (teatime is 16:00)
    noon + 4days #第四天中午
    5pm august 3 2029 #
    4:00 2024-11-27
  3. 例子
    yum -y install at #安装at
    systemctl start atd #启动服务
    at now +2min
    [root@localhost ~]# at now +2min
    at> useradd uuuuu
    at> <EOT> #cirl + D 退出
    job 2 at Wed Apr 10 16:29:00 2024
    atq #查询结果
    [root@localhost ~]# atq
    2 Wed Apr 10 16:29:00 2024 a root

循环调度执行(schedule recurring jobs with) cron

  1. 简介
    cron的概念和crontab是不可分割的
    crontab是一个命令,常见于unix和linux操作系统中
    用于设置周期性被执行的指令
    该命令从标准输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行
  2. 查看进程状态
    yum install cronie -y #安装
    systemctl start crond #启动
    systemctl status crond #查看状态
    ps aux | grep crond #查看进程
    [root@localhost etc]# ps aux | grep crond
    root 5061 0.1 0.0 126392 1664 ? Ss 17:08 0:00 /usr/sbin/crond -n
    crond程序是运行计划任务的根本
  3. 实例
  • 计划任务位置:/var/spool/cron/
  • 管理方式
  1. 创建计划
    crontab -e Edit jobs for the current user
    crontab -e #进入一个记事本编写任务计划 :wq退出
    * * * * * 命令
    分 时 日 月 周
    分:minute(0-59)
    时:hour(0-23)
    天:day of month(1-31)
    月:month(1-12) 或者 jan,feb,mar,apr
    周:day of week(0-6)(sunday=0 or 7) 或者 sun,mon, tue
    分 时 日 月 周 命令或者脚本
    六个部分用空格隔开
    # 例子
    5 1 15 3 * /usr/bin/ls /root #在每年3月15号1点15分执行ls命令
    5 1 15 * * ls /usr/bin/ls /root #在每月15号1点15分执行ls命令
    0 2 1,4,6 * * ls /usr/bin/ls /root #在每月1,4,6号2点执行ls命令
    0 2 5-9 * * ls /usr/bin/ls /root #在每月5-9号2点执行ls命令
    * * * * * ls /usr/bin/ls /root #在每分钟执行ls命令
    0 * * * * ls /usr/bin/ls /root #在每小时整执行ls命令
    0 2 * * 5 ls /usr/bin/ls /root #在每周五2点整执行ls命令 一般不写星期几
    0 2 2 6 5 ls /usr/bin/ls /root #6月2号的2点和6月的周五2点都执行,执行5次,取交集
    5 1 * * * ls /usr/bin/ls /root #在每天1点15分执行ls命令
    */5 * * * * ls /usr/bin/ls /root #每隔五分钟执行ls命令
    [root@localhost ~]# crontab -e
    crontab: installing new crontab
  2. 查询计划
    crontab -l List the jobs for the current user
    管理员可以使用crontab -u username,去管理其他用户的计划任务
    crontab -l
    [root@localhost ~]# crontab -l
    */5 * * * * ls /usr/bin/ls /root
  3. 删除计划
    crontab -r Remove all jobs for the current users
    crontab -r #删除
    [root@localhost ~]# crontab -l
    no crontab for root

日志管理

日志进程rsyslog

  • 简介:rsyslog 系统日志管理,关心问题:哪类程序,产生的什么日志,放在什么地方,日志为统计信息,排除错误,日志由应用程序产生
  • 处理日志的进程
  1. 第一类:
    • rsyslogd:系统专职日志程序
    • 处理大部分日志记录
    • 系统操作有关的信息,如登录,程序启动关闭信息,错误信息
  2. 第二类:
    • httd/nginx/mysql:各类应用程序,可以以自己的方式记录日志
  3. 观察rsyslogd
    ps aux | grep rsyslogd #d为deamon 守护进程,守护进程一般不会退出
    root 1013 0.0 0.2 216400 4020 ? Ssl 13:53 0:00 /usr/sbin/rsyslogd -n
  • 常见的日志文件(系统,进程和应用程序)
    tail -10 /var/log/messages #系统主日志文件
    Apr 10 19:01:01 localhost systemd: Started Session 15 of user root.
    时间 主机名 消息/发生的事情
    tail -f /var/log/messages #实时输出文件尾部
    tailf /var/log/messages #实时输出文件尾部 同上
    tailf /var/log/secure #认证安全
    tailf /var/log/yum.log #yum
    tailf /var/log/maillog #跟邮件postfix有关
    tailf /var/log/cron #crond,at有关产生的日志
    tailf /var/log/dmesg #和系统启动有关
    tailf /var/log/wtmp #当前登录的用户 w可以查看
    [root@localhost ~]# w
    22:18:40 up 8:25, 1 user, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root pts/1 172.16.34.145 17:59 0.00s 0.08s 0.01s w
  • rsyslogd配置
  1. 相关程序
    • yum install rsyslog logrotate
    • 默认已经安装
  2. 启动程序
    systemctl start rsyslog.service
  3. 相关文件
    rpm -ql rsyslog #列出和这个软件相关的文件
    rpm -qc rsyslog #列出这个软件的配置文件
    [root@localhost ~]# rpm -qc rsyslog
    /etc/logrotate.d/syslog #和日志轮转相关的文件
    /etc/rsyslog.conf #syslogd的主配置文件,关键
    /etc/sysconfig/rsyslog #syslogd的相关文件,定义级别(了解)
    主配置文件:一般都会在/ect/程序名.conf
  4. 主配置文件
    vim /etc/rsyslog.conf
    cron.* /var/log/cron #前面是程序名,.后面是日志的级别,*表示所有的日志都记录,最后是日志存放的路径
  • RULES
    • RULES:即规则,是一套生成日志,以及储存日志的策略
    • 规则由设备+级别+存放位置组成,设备是同一类程序的统一名称
    • RULES由FACILITY+LEVEL+FILE组成
    • authpriv.* /var/log/secure (SSH信息,认证设备)
    • mail.* -/var/log/maillog (发邮件,邮件设备),这里有个-符号,表示使用异步方式记录,因为日志文件大
    • cron.* /var/log/cron (创建计划任务)
    • *.info;mail.none;authpriv.none;cron.none /var/log/messages 系统日志排除了邮件,认证和计划日志,;表示并列,.none表示不放日志
  • FACILITY和LEVEL
    • facility
      • 是系统对某种类型的应用程序的定义,如AUTHPRIV是安全事件,CRON是计划任务事件。用来收集同类程序的日志。
    • 设备类型
      • LOG_SYSLOG:syslogd自身产生的日志
      • LOG_AUTHPRIV:安全认证设备
      • LOG_CRON:调度设备
      • LOG_MAIL:邮件设备
      • LOG_USER(default):用户相关
      • LOG_DAEMON:后台进程
      • LOG_FTP:文件服务器
      • LOG_KERN:kernel messages 内核
      • LOG_LPR:打印机设备
      • LOG_LOGCAL0 through LOG_LOCAL7:用户自定义设备
    • 程序类型实例
      • 关于程序和设备的联系问题,程序自身会决定将日志交给哪类设备。如SSH程序会贤者安全认证类设备。这一点由开发者定义。
      • grep Facility /etc/ssh/sshd_config
      • #SyslogFacility AUTH
      • SyslogFacility AUTHPRIV #认证程序
    • level级别
      • LOG_EMERG:进击,致命,服务无法继续进行,如配置文件丢失
      • LOG_ALERT:报警,需要立即处理,如磁盘空间使用95%
      • LOG_CRIT:致命行为
      • LOG_ERR:错误行为
      • LOG_WARNING:警告信息
      • LOG_NOTICE:普通,重要的标准信息
      • LOG_INFO:标准信息
      • LOG_DEBUG:调试信息,拍错所需,一般不建议使用
      • 从上往下级别越来越小,信息越来越多
      • 其中* 表示所有级别的信息都记录
      • LOG_NONE:不放日志
  • 规则示意图

日志轮转logrotate

  • 简介
    • logrotate日志轮转:程序将大量日志,分割管理,删除旧的日志
    • 日志记录了程序运行时的各种信息
    • 通过分析日志可以分析用户的行为,记录运动轨迹,查找程序问题
    • 可惜磁盘空间有限
    • 日志轮转就是黑匣子,记录的信息在重要也只能记录最后一段时间发生的事情
    • 为了节省空间和整理方便,日志文件经常需要按时间或大小等维度分成多份,删除时间久远的日志文件
  • 工作原理
  1. 按照配置进行轮转
    • 配置文件种类
      • 主配置文件:/etc/logrotate.conf(决定每个日志文件如何轮转)
      • 子配置文件夹:/etc/logrotate.d/* #自定义配置,方便管理,.d 表示子目录
    • 观察主文件和子文件(每装一个软件都会产生一个子配文件)
      • [root@localhost ~]# ls /etc/logrotate.conf /etc/logrotate.d/
      • /etc/logrotate.conf
      • /etc/logrotate.d/:
      • bootlog firewalld httpd syslog wpa_supplicant yum
  • 主配置文件介绍

    • vim /etc/logrotate.conf
    • 全局设置 #优先级低
    • weekly 轮转周期,一周轮转
    • rotate 4 保留四份
    • create 轮转后创造新的日志文件
    • #compress 是否压缩
    • include /etc/logrotate 包含该目录下的子配置文件,我们可以在子配置文件中进行设置
    • /var/log/wtmp { #对某日志文件设置轮转方法,在配置文件中书写日志名和大阔号。可以独立设定该日志的轮转规则,这个优先级高
    • monthly #一个月轮转一次
    • create 0664 root utmp #轮转后穿件新文件,并设置权限,root是属主,utmp是属组
    • minsize 1M #最小达到1M才轮转
    • rotate 1 #保留一份
    • }
    • /var/log/btmp {
    • missingok #丢失不提示,不执行,这东西不重要
    • monthly
    • create 0600 root utmp
    • rotate 1
    • }
  • yum日志轮转实例

  • 轮转的目标文件/var/log/yum.log

  • 配置轮转规则

    • vim/etc/logrotate.d/yum #安装程序的时候就会在子配置文件里面带上轮转规则
    • /var/log/yum.log { #log文件的路径
    • missingok #丢失不执行
    • #notifempty #空文件不轮转
    • #maxsize 30k #达到30k轮转 日期和大小是或的关系
    • #yearly #一年一轮转
    • daily #一天一转
    • rotate 3 #保存三份
    • create 0777 root root #设置权限,这里只是示例,用来区别,默认的0644就行了
  • 测试

    • 错误示范
      • /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
      • ls /var/log/yum*
      • [root@localhost ~]# ls /var/log/yum*
      • /var/log/yum.log
      • 没有用,没有达到我们设置的规则
    • 正确示范
      • date 04151234 #修改时间 月日时分,每个两位
      • /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf #-s是时间戳
      • ls /var/log/yum* #出现多个文件
      • /var/lib/logrotate/logrotate.status #这个文件说明有切过的状态

参考