• Linux基础命令-Nginx-正则表达式( grep sed awk )-Shell Script--etc


    Linux基础使用

    学习内容博客

    内存

    • 查看swap分区信息 > swapon -s
    • 添加swap分区 > mkswap /dev/sdb2 > 激活 swapon -a /dev/sdb2 即可
    • 移除swap分区 > swapoff /dev/sdb2
    • 查看系统版本 > cat /etc/redhat-release > more /etc/*release 可以看到更多信息
    • buffer A buffer is something that has yet to be "written" to disk
    • cache A cache is something that has been "read" from the disk and stored for late use
    • 清理cache > echo 3 > /proc/sys/vm/drop_caches
    • echo $[88316+8764] 进行简单的计算(+-*/)
    • total-used=free+buff/cache 内存就是用来分buffer和cache的
    • dd if=/dev/zero of=/root/test bs=50M count=1 测试磁盘速度,zero为空文件

    进程管理

    • ps aux 查看所有进程 > grep过滤的意思
    • 查看特定的进程 > ps aux | grep firefox
    • 杀死进程 > kill -9 3489 ( 9表示强制杀) 或者 pkill -9 firefox
    • firefox & 即命令后接&在后台启动,在当前终端使用jobs可以查看工作号 > kill -9 %1使用工作号杀
    • centos7最小化安装没有ptree (树型显示当前运行的进程),需要安装yum install psmisc
    • pgrep sshd 直接显示包含sshd的进程的PID号

    软件包管理

    • rpm -ivh rpm文件名 i 安装, v 显示安装信息, h显示进度条 后接--nodeps忽略以来,--force覆盖安装

    • rpm -qi 软件名 查看软件的详细信息 ,q 表示查询, i information

    • rpm -ql 软件名 查看软件位置, l 表示位置

    • rpm -qf 文件名 查看该文件是由哪个软件包产生的

    • 查看命令对应的文件的真实位置 which ls

    • rpm -qa 显示全部安装的rpm包,跟grep结合验证是否安装了某个包,rpm -qa | grep vsftp 或者 rpm -q vsftpd 必须知道软件包全名

    • ls ----> /etc/usr/ls --color=auto 这是流程 ,alias s='ls' 为ls命令起别名, 永久的话修改vim /etc/bashrc 或者vim /etc/profile

    • rpm -e 软件包名 卸载软件

    • rpm -e `rpm -qa grep vsftp 这里反引号的作用是把后面的结果看作变量作为前面的输入

    • rpm安装对依赖性问题不好解决,需要先手动安装依赖包,yum自动解决依赖性

    • 手动配置yum源,事先将完整的光盘挂载到/opt,移走原有的repo,然后 vi /etc/yum.repos.d/loal.repo

      [local]
      name=local.repo
      baseurl=file:///opt   #可以本地也可以网上
      enable=1
      gpgcheck=0
      

      yum clean all清除缓存后就可以用自己配置的yum源安装yum -y install xxxxx

    • yum erase xxx删除已经安装的软件 或 yum remove xxx

    • yum install epel-*安装扩展源

    • yum makecache创建缓存提高下次装软件的速度

    • 要想保留yum下载的rpm包,需要更改设置vim /etc/yum.conf

      cachedir=/root/rpm_bak   #路径自己设置
      keepcache=1   #0改为1
      
    • 部署自己的yum仓库

      1. 新建仓库文件夹mkdir /repo_httpd
      2. 将所有依赖包和该rpm包放在这个文件夹中,方法如上一条所示
      3. 创建依赖关系createrepo /repo_httpd, 之后在该文件夹中生成repodata文件夹
      4. 手动配置yum源,如之前所示, 其中baseurl=file:///repo_httpd
      5. 同理修改baseurl=http://xxxxx可以自定义网络yum源
    • yum grouplist列出有哪些软件包组, yum groupinstall "开发工具"安装开发工具

    • wget --no-check-certificate https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz下载,tar xvf Python-3.6.1.tgz解压,进入目录,configure为安装配置文件,为了生成makefile文件,./configure --prefix=/usr/local/python3.6 , 然后 make && make install 编译并安装,报错的话缺啥装啥yum install zlib*

    • PATH=/usr/local/python3.6/bin:$PATH 设置临时的环境变量, 永久的话vim /etc/profile在末尾加上

      PATH=/usr/local/python3.6/bin:$PATH
      export PATH
      
    • yum update全部更新包括配置和内核,yum upgrade只更新软件包

    • 安装yum install sysstat*里面有查看运行信息的软件vmstat iostat

    • 安装yum install net-tools ,执行netstat -tunalp 查看端口详细信息 可以netstat -tunalp | grep 22查看目的端口 。另外sar啥也能看

    n g i n x

    • yum install nginx 安装

    • 写配置 vim /etc/nginx/nginx.conf 摘取部分如下

      worker_processes auto;  #自动检测CPU数目,几个CPU开几个进程
      error_log /var/log/nginx/error.log;  #错误日志
      include /usr/share/nginx/modules/*.conf;  #包含的模块
      events {  #一个进程开多少线程
          worker_connections 1024;
      }
      http {
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
          #日志格式
          access_log  /var/log/nginx/access.log  main;
          #访问日志,以main格式写入
          sendfile            on;
          tcp_nopush          on;
          tcp_nodelay         on;
          keepalive_timeout   65;
          types_hash_max_size 2048;
      
          include             /etc/nginx/mime.types;
          default_type        application/octet-stream;
      
          # Load modular configuration files from the /etc/nginx/conf.d directory.
          # See http://nginx.org/en/docs/ngx_core_module.html#include
          # for more information.
          include /etc/nginx/conf.d/*.conf;
          #包含的配配置文件
          server {  #核心配置
              listen       80 default_server;  #监听端口号
              listen       [::]:80 default_server;
              server_name  _;
              root         /usr/share/nginx/html;  #Web根目录
      
              # Load configuration files for the default server block.
              include /etc/nginx/default.d/*.conf;
      
              location / {  #匹配/a/b/c/d.txt,若以/开头则匹配这个配置,没有内容则按全局配置
                  
              }
          }
      
    • URL 统一资源定位符 11.12.13.14:80 找到唯一的一个软件

    • URI 统一资源标识符 /a/b/c/d.txt 找到唯一的一个文件 /usr/share/nginx/html/a/b/c/d.txt

    • systemctl start nginx 启动nginx status查看状态

    • systemctl stop firewalld 关闭防火墙,systemctl disable firewalld开机不启动,enable开机启动, iptables -F 清除防火墙配置

    • tail -f /var/log/nginx/access.log动态查看日志文件

    反向代理

    1. 将虚拟机拷贝3个提供Web功能,原虚拟机提供反向代理

    2. 按照官网的手册 Using nginx as HTTP load balancer 配置提供反向代理的机器

    3. 为实现数据的一致,给几台Web服务器提供共享存储 如 NFS,文件存储

      对象存储--->像网盘一样,下载下来修改再上传覆盖,通过URI定位。 块存储 ---> 类似一整块磁盘

    4. 可以给NFS服务器专门挂载一块硬盘

    5. 临时配置IP地址 ifconfig 网卡名 IP地址

    6. ##服务端配置
      [root@localhost ~]# mkdir /share   #新建文件夹
      [root@localhost ~]# mount /dev/sdb1 /share/^C	#挂载一块硬盘
      [root@localhost ~]# touch /share/share.txt	
      [root@localhost ~]# echo 'hello share' > /share/share.txt
      [root@localhost ~]# vim /etc/exports	#编辑配置文件
      [root@localhost ~]# cat /etc/exports
      /share 192.168.58.0/24(rw,sync,fsid=0)  #配置文件内容
      [root@localhost ~]# chmod -R o+w /share #为文件夹添加权限
      [root@localhost ~]# systemctl start rpcbind.service  #先开启RPC服务
      [root@localhost ~]# systemctl start nfs-server.service  #再开启NFS服务
      [root@localhost ~]# systemctl enable nfs-server.service  #设置开机启动
      Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
      [root@localhost ~]# systemctl enable rpcbind.service
      
    7. ##客户端配置
      [root@localhost ~]# systemctl enable rpcbind.service && systemctl enable nfs-server.service
      Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.  #开机启动
      [root@localhost ~]# showmount -e 192.168.58.129 #查看共享服务
      Export list for 192.168.58.129:
      /share 192.168.58.0/24
      [root@localhost ~]# mount -t nfs 192.168.58.129:/share /usr/share/nginx/html/ #挂载
      [root@localhost ~]# ls /usr/share/nginx/html/ #查看挂载后文件内容
      share.txt
      [root@localhost ~]# df |grep 129 #查看磁盘信息
      192.168.58.129:/share 18351104 2376448 15974656   13% /usr/share/nginx/html
      
    8. nginx

    网络配置

    ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>#功能#  mtu 1500#最大传输单元,字节单位#
            inet 192.168.58.129  netmask 255.255.255.0  broadcast 192.168.58.255
            inet6 fe80::c00d:cb8b:4aed:6cc7  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:1c:9a:5a#MAC地址#  txqueuelen 1000  (Ethernet)
            RX packets 3422  bytes 444096 (433.6 KiB) #收了多少包#
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2374  bytes 418819 (409.0 KiB) #传了多少包#
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1  (Local Loopback)
            RX packets 20  bytes 1524 (1.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 20  bytes 1524 (1.4 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    • ifconfig ens33 192.168.58.200/24手动配置IP地址, 24表示子网掩码255.255.255.0

    • vim /etc/resolv.conf 修改DNS信息 nameserver 192.168.58.2

    • route add default gw 192.168.58.254 netmask 255.255.255.0 添加网关,route -n查看路由信息, del为删除

      [root@localhost share]# route -n
      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      0.0.0.0         192.168.58.2    0.0.0.0         UG    100    0        0 ens33  #不一个子网
      192.168.58.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33  #同一个自网内
      
    • 要想永久修改 cd /etc/sysconfig/network-scripts/ 该目录下有很多配置信息 vim ifcfg-ens33

      TYPE=Ethernet
      BOOTPROTO=static
      IPADDR=192.168.58.200
      NETMASK=255.255.255.0
      GATEWAY=192.168.58.254
      DNS1=192.168.58.254
      DNS2=114.114.114.114
      DEFROUTE=yes
      PEERDNS=yes
      PEERROUTES=yes
      IPV4_FAILURE_FATAL=no
      IPV6INIT=yes
      IPV6_AUTOCONF=yes
      IPV6_DEFROUTE=yes
      IPV6_PEERDNS=yes
      IPV6_PEERROUTES=yes
      IPV6_FAILURE_FATAL=no
      IPV6_ADDR_GEN_MODE=stable-privacy
      NAME=ens33
      UUID=2ceec922-bd48-4fcb-8c96-56a288ddb680
      DEVICE=ens33
      ONBOOT=yes #开机激活网卡
      

      重启网络服务systemctl restart network 即可

    • vim /etc/hosts 修改hosts

    • [root@localhost network-scripts]# hostnamectl set-hostname centostest #设置hostname
      [root@localhost network-scripts]# hostname #查看hostname
      centostest
      

    SSH

    • [root@localhost ~]# ssh 192.168.58.129  #登录默认root  实际ssh root@192.168.58.129
      The authenticity of host '192.168.58.129 (192.168.58.129)' can't be established.
      ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added '192.168.58.129' (ECDSA) to the list of known hosts.
      root@192.168.58.129's password:    #输入密码
      Last login: Mon Apr  3 22:48:51 2017 from 192.168.58.1
      [root@centostest ~]#    #SSH登录成功,前后主机名不一样
      
    • scp远程复制文件

      [root@centostest ~]# scp /etc/hosts 192.168.58.131:/tmp  #远程复制,也可用域名,前后位置可换 -r目录
      The authenticity of host '192.168.58.131 (192.168.58.131)' can't be established.
      ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e.
      Are you sure you want to continue connecting (yes/no)? y
      Please type 'yes' or 'no': yes
      Warning: Permanently added '192.168.58.131' (ECDSA) to the list of known hosts.
      root@192.168.58.131's password:  #输入密码
      hosts                                                  100%  159     0.2KB/s   00:00 #复制成功
      
    • 在客户端把SSH密钥生成 ssh-keygen 之后在/root/.ssh/目录下有生成的信息id_rsa.pub

    • 把密钥等发给服务端 ssh-copy-id -i 192.168.58.131 之后在服务端的相同路径下会找到相关文件authorized_keys , 即发给了root用户目录下,如发给其他用户可以在该用户目录下找到公钥

    • 之后客户端直接ssh 192.168.58.131不需要输入密码即可登陆成功

    • 配置文件在vim /etc/ssh/sshd_config 。若服务端更改端口为8888,以上发送密钥时需要ssh-copy-id -i id_rsa.pub 192.168.58.131 -p 8888 ,连接时ssh 192.168.58.131 -p 8888 即可

    bash

    学习内容博客

    • source a.sh没加权限也可以执行

    • 命令优先级

      1. alias #alias查看当前的别名 alias ppp='ls -l'设置 unalias ppp取消
      2. compound commands #if for while
      3. function #function ppp() { echo hello;echo bash; }定义 ppp执行 set查看当前函数 unset ppp清除
      4. build_in #内建 如cd
      5. hash #hash查看 hash -r清除
      6. $PATH #路径
      7. error:command not found
      
    • 通配符

      $[] #运算 同$(())
      $()  #同``一样
      ${}  #
      % 取余
      ^  ! #取反
      &  #后台运行
      && 与
      | 管道
      || 或
      * 任意
      ? 任意一个
      = 赋值
      == 判断是否相等
      [ $x == $y ]  ---> test 
      echo $? 取上一条命令的执行结果
        ---> "$x"软引用,取值  '$x'硬引用,$没有其他意义
      : 永远为真,常与while连用
      ; 命令分割
      / 路径分割符
      >> 追加
      > 覆盖​
      

    固化命令的方式

    #以登录的方式加载顺序
    /etc/profile
    /etc/profile.d/a.sh
    /root/.bash_profile
    /root/.bashrc
    /etc/bashrc
    
    #不登录的方式加载顺序
    /root/.bashrc
    /etc/bashrc
    /etc/profile.d/a.sh
    

    正则表达式

    学习内容博客

    grep ----

    1. 常用参数

      -n  :显示行号
      -e  :指定多个规则
      -o  :只显示匹配的内容
      -q  :静默模式,没有任何输出,得用echo $?来判断执行成功(0)没有,即有没有过滤到想要的内容
      -l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 
      -A  :如果匹配成功,则将匹配行及其后n行一起打印出来 如 grep -A 2 'root' test.txt
      -B  :如果匹配成功,则将匹配行及其前n行一起打印出来
      -C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
      --color
      -c  :如果匹配成功,则将匹配到的行数打印出来
      -E  :等于egrep,扩展
      -i  :忽略大小写
      -v  :取反,不匹配
      -w:匹配单词
      
      例:过滤掉无用的行,包括注释和空格
      grep -v '^#' /etc/ssh/sshd_config | grep -v '^ *$'
      
    2. 正则表达式

      ^	行首
      $	行尾
      .	除了换行符以外的任意单个字符
      *	前导字符的零个或多个
      .*	所有字符
      []	字符组内的任一字符  #若要匹配-需要放在最后-
      [^]	对字符组内的每个字符取反(不匹配字符组内的每个字符)
      ^[^]	非字符组内的字符开头的行
      [a-z] 小写字母  
      [A-Z] 大写字母
      [a-Z] 小写和大写字母
      [0-9] 数字
      <	单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
      >	单词尾
      ? 前导字符零个或一个
      + 前导字符一个或多个
      abc|def abc或def
      a(bc|de)f abcf 或 adef
      x{m} x出现m次     #egrep不加
      x{m,} x出现m次至多次(至少m次)
      x{m,n} x出现m次至n次
      

    sed ---- 流编辑器 stream editer,是以行为单位的处理程序

    sed [options] 'command' in_file[s]
    options 部分
    -n  静默模式,不显示默认输出
    -e  指定多个规则
    -i  直接修改原文件
    -f  指定匹配规则文件
    command 部分
    '[地址1,地址2] [函数] [参数(标记)]'
    //里面正则表达式定址
    例: sed -r '1 s/()()()/123/g' passwdbk  1表示定位第几行,g表示把这一行的所有匹配的都修改了,括号表示第几部分,后面的1表示第一部分显示的位置
    

    awk ---- 处理有格式的文件 !!!!!!

    awk [options] 'commands' files
    option
    -F 定义字段分隔符,默认的分隔符是连续的空格或制表符
    使用option中的-F参数定义间隔符号
    用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域 例:awk -F: '{print $1,$4}' passwdbk $0所有
    NF变量表示当前记录的字段数	可用 $NF 取最后一段
    NR表示行号 例: awk -F: 'NR>=3 && NR<=5{print NR,"----",$1}' passwdbk   ||或
    //里面正则表达式定址 例 awk -F: '/nologin$/{print $1}' passwdbk
    让某一部分匹配正则 awk -F: '$1~/^r.*t$/{print $NF}' passwdbk
    -v 定义变量并赋值 也可以借用次方式从shell变量中引入
    例:
    count=7
    awk -v x=$count -F: '$3 >= x{print $1}' passwdbk
    
    addr=`ifconfig |awk 'NR==2{print $2}'` 取IP地址
    

    其他命令

    du -sh /boot/   #统计目录大小
    cat test |sort |uniq -c #排序去重,c显示重复的行数
    cat /etc/passwd |cut -d: -f2,3 #d表示以什么分割 f指定取第几部分 可作为awk的简单模式
    dd if=/dev/zero of=/test.ha bs=20M count=1 #新建一个指定大小的文件
    find / -size +10M -size -30M -type f -name *.ha #在/目录下寻找文件大小>10M且<30M,类型为普通文件,后缀名为ha的文件
    grep -rl 'root' /etc #在/etc目录下寻找文件内含有'root'的文件并把文件名输出,r表示递归,l表示显示文件名
    

    shell script

    学习内容博客

    中括号 [] 相当于 test
    
    获取当前内存使用率:
    mem_per=`echo "scale=2;$mem_used/$mem_total" | bc -l | cut -d. -f2` #scale保留几位小数,bc浮点运算
    echo ${mem_per}%
    
    $$ 进程PID
    $* 所有参数
    $# 参数个数
    
    当nginx关闭时开启nginx
    #!/bin/bash
    var=`systemctl status nginx| awk 'NR==3{print $2}'`
    if [ $var = inactive ]
        then
            systemctl start nginx
    fi
    
    将x.sh文件移动到/usr/bin/目录下可以在任何位置使用x执行改脚本
    
    

    计划任务

    学习内容博客

    rondtab -e -u root  #e表示编辑 u表示用户
    在计划任务中所有命令都使用绝对路径!!!
    
    

    ------------本地有md文件备份----------

    -----------------end------------------

  • 相关阅读:
    Linux yum命令重装mysql
    Java多线程编程<一>
    Java内存区域与内存溢出异常
    实现一个线程安全的Queue队列
    Java 原始数据类型转换
    对象-关系映射ORM(Object Relational Mapping)(转)
    2进制,16进制,BCD,ascii,序列化对象相互转换
    Apache MINA 框架之默认session管理类实现
    Struts.properties(转)
    vue常用插件-数字滚动效果vue-count-to
  • 原文地址:https://www.cnblogs.com/freelandun/p/6754782.html
Copyright © 2020-2023  润新知