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/()()()/\1\2\3/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------------------

posted @ 2017-04-24 00:13  云中王  阅读(1504)  评论(0编辑  收藏  举报