Linux(1)

  • linux是常用的服务器操作系统,常用的发行版本Centos,Ubuntu,Redhat等

  • linux和Unix的对比

VMware安装CentOS

  • (https://static01.imgkr.com/temp/d449990a22514495b0d178bd6eb87af4.png

  • 到这里就已经安装完成了,登录检查网络是否有问题,ping百度如果不同可在NAT网卡出设置

linux系统优化

修改网卡名称

  • 一般在实操中会将linux的网卡统一以eth的方式命名,下面进行修改

    • 对已安装的操作系统进行修改

      • 修改网卡配置文件

        • cd /etc/sysconfig/network-scripts
          #复制原网卡文件内容到ifcfg-eth0文件下
          mv ifcfg-ens33 ifcfg-eth0
          #修改ifcfg-eth0文件
          NAME=eth0
          DEVICE=eth0
          
      • 修改内核启动参数,禁用预测命名规则,将net.ifnames=0 biosdevname=0 参数关闭

        • vim /etc/sysconfig/grub
          	GRUB_CMDLIME_LINUX="...net.ifnames=0 biosdevname=0 quiet"
          grub2-mkconfig -o /boot/grub2/grub.cfg
          
      • 重启操作系统并检查修改结果

        • reboot
          ifconfig eth0
          
    • 在安装操作系统时修改

      • 在安装操作系统时选择 Inastll CentOS7 按下 Tab 设定 kernel 内核参数
      • 增加内核参数 net.ifnames=0 biosdevname=0
      • 检查是否修改成功,成功后可以继续安装系统

修改yum源为阿里云源,并安装常用软件

  • curl -o /etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-7.repo
    
    yum install epel-release -y
    
    yum makecache  建立缓存
    
  • [root@Centos ~]# yum install net-tools vim htop iftop iotop lrzsz sl wget unzip telnet nmap nc psmisc dos2unix bash-completion bash-completion-extras sysstat rsync nfs-utils httpd-tools -y
    

关闭 防火墙以及selinux

  • systemctl disable firewalld   停掉防火墙的开机自启
    systemctl stop firewalld    停掉防火墙
    
    vim /etc/selinux/config   /关闭selinx   SELINUX=disable
    

人机交互接口Bash

什么是Bash

  • Bash shell是一个命令解释器,主要负责用户程序与内核进行交互操作的一种借口,将用户输入的命令翻译给内核,由内核驱动硬件,最终将处理后的结果输出至Bash shell 屏幕终端

如何打开Bash Shell

  • 使用远程链接工具链接linux服务器,系统会默认打开一个默认的sehll

Bash shell 能干什么

  • 使用Shell实现对Linux系统的大部分管理
    • 文件管理
    • 用户管理
    • 磁盘管理
    • 网络管理
    • 软件管理
    • 服务管理等

如何使用Bash shell

  • 命令 — > 效率低,适合少量的工作

  • shell脚本 — > 效率高,适合重复性的工作

  • Bash shell 基础语法

    • Bash shell 命令行,为用户提供命令输入,将执行结果返回给用户

      • 命令 command 整条shell命令的主体功能
        选项 options 用于调节命令的具体功能
        参数 parameters 命令操作的对象,如文件、目录名等
      • 选项:

        • 以 – 引导短格式选项(单个字符),例如 -a
        • 以– 引导长葛市选项(多个字符),例如 –all
        • 多个端格式选项可以写在一起,只用一个 -al
      • 命令写在开头,选项和参数谁知可以发生变化

Bash Shell 基本特性

  • 补全功能

    • 命令补全:当忘记命令时,可以使用Tabs进行补全
    • 目录补全:当需要查找文件目录层级比较多时,可以使用tabs快速补全,减少出错
  • history历史命令:

    • !+ 命令行数 可以快速执行history中的命令
    • history -c 可以清除history中的记录,只是清除的是内存中的历史命令记录,Bash_history文件中的命令还是存在的
  • 别名

    • 命令别名讲用户经常使用的复杂命令简单化,可以用alias别名名称 = ‘命令’创建属于自己的命令别名,如要取消一个命令别名,用unalias别名名称

    • alias这种操作是存在内存中的,并没有在文件中修改,重新开启Bash shell 中需要重新设定

    • vim /etc/bashrc ##保存在磁盘中
      alias eth0 = 'cat /etc/sysconfig/network-scripts/ifcfg-eth0'
      #或者
      echo "alias eth0='cat /etc/sysconfig/network-scripts-eth0 '" >>/etc/bashrc
      source /etc/bashrc ## 加载到内存
      ##加载到内存还可以重新打开 Bash Shell窗口
      
  • 帮助手册

文件管理

linux的文件目录

  • linux的文件目录成树状,最高的根节点为 “/
  • 根下面的文件夹
    • 相关文件夹解释
      • /bin 目录 存放命令相关
        • /bin 存放普通用户使用的命令
        • /sbin 存放超级管理员使用的命令
      • 存放用户家目录 /home
        • /home 普通用户的家目录,默认为 /home/username
        • /root超级管理员root的家目录,普通用户无权操作
      • /usr 存放系统相关文件的目录
        • /usr/local 软件安装的目录
        • /usr/bin 普通用户使用的应用程序
        • /usr/sbin 管理员使用的应用程序
        • /usr/lib 32位的库文件
        • /usr/lib64 64位的库文件
      • 系统启动目录 /boot
        • 存放系统启动时内核与groub引导菜单
        • /boot存放的系统启动相关的文件,如 kernel,grub(引导装载程序)
      • 配置文件目录
        • /etc 存放系统配置文件目录,后续所有服务配置都在这个目录中
      • /dev 设备相关目录
        • /dev/null 黑洞设备,只进不出,类似于垃圾回收站
        • /dev/rendom 生成随机数的设备
        • /dev/zero 能源源不断的产生数据
      • /proc 虚拟系统目录
        • 虚拟的文件系统 (如对应的进程程序停止 则/proc下的对用的目录则会被删除)
    • 绝对路径和相对路径
      • 绝对路径:只要从 / 开始的路径
      • 相对路径: 相对于当前目录来说
      • ...分别是什么意思
        • 一个点代表的是当前目录
        • 两个点代表的是当前目录的上层目录
      • 所谓的. 目录实际上属于相对路径上的一种表示形式

文件操作基础命令

路径切换命令

#	cd	绝对路径	cd	/etc/hostname
#	cd	相对路径	cd	test/abc	cd	.	cd	..
-------------------------------------
#	cd		 切换目录	cd	/etc
#	cd	-	 切换回上一次所在的目录
#	cd	~	 切换回当前用户的家目录
#	cd	.	 代表当前目录,一般在拷、移动等情况下使用  			
#	cd	..	切换回当前目录的上级目录

文件创建 touch

[root@node1 tmp]# touch file 
[root@node1 tmp]# touch file1 file2 
[root@node1 tmp]# touch /tmp/file3
[root@node1 tmp]# touch file{6..10}
[root@node1 tmp]# ll
总用量 12
-rw-r--r--. 1 root root   0 1月  22 15:01 file
-rw-r--r--. 1 root root   0 1月  22 15:01 file1
-rw-r--r--. 1 root root   0 1月  22 15:01 file10
-rw-r--r--. 1 root root   0 1月  22 15:01 file2
-rw-r--r--. 1 root root   0 1月  22 15:01 file3
-rw-r--r--. 1 root root   0 1月  22 15:01 file6
-rw-r--r--. 1 root root   0 1月  22 15:01 file7
-rw-r--r--. 1 root root   0 1月  22 15:01 file8
-rw-r--r--. 1 root root   0 1月  22 15:01 file9

目录创建

[root@node1 tmp]# mkdir t1
[root@node1 tmp]# mkdir /tmp/t1/t1 /tmp/t2/t2
mkdir: 无法创建目录"/tmp/t2/t2": 没有那个文件或目录
[root@node1 tmp]# mkdir /tmp/t1/t1 /tmp/t2/t2 -p   
		#-p 表示递归创建目录
[root@node1 tmp]# ll t1
总用量 0
drwxr-xr-x. 2 root root 6 1月  22 15:09 t1
[root@node1 tmp]# ll t2
总用量 0
drwxr-xr-x. 2 root root 6 1月  22 15:09 t2
[root@node1 tmp]# cd t2
[root@node1 t2]# ll 
总用量 0
drwxr-xr-x. 2 root root 6 1月  22 15:09 t2

文件或者目录的复制

  • #cp 复制文件或者目录
    #选项:
    #    -r:递归拷贝目录;
    #    -p:保持文件属性
    [root@Centos ~]# cp /tmp/file_copy /etc
    [root@Centos ~]# cp /etc/file_copy /tmp/copy
    [root@Centos ~]# cp /tmp/copy /etc -p
    [root@Centos ~]# cp /etc/ /tmp/ -r #复制目录以及目录下面的子目录需要递归复制
    

文件或者目录移动

  • #mv 文件或者目录的移动
    #
    [root@Centos ~]# mv file file1 #相当于改名操作
    [root@Centos ~]# mv ./file1 /tmp 
    [root@Centos ~]# mv /tmp/file1 ./ #移动/tmp/file1到当前目录
    
    [root@Centos ~]# mkdir dir
    [root@Centos ~]# mv ./dir/ /tmp
    
    [root@Centos ~]# touch file{2..5}
    [root@Centos ~]# mv ./file2 file3 file4 file5 /tmp
    
    [root@Centos ~]# mkdir dir{1..3}
    [root@Centos ~]# mv dir1 dir2 dir3 /tmp
    
    

文件或者目录的删除

  • #rm 文件或者目录的删除
    #选项: -r:递归  -f:强制删除  -v:详细过程
    [root@Centos ~]# rm file1
    rm:是否删除普通空文件 "file1"?
    #删除文件,默认rm存在别名,rm -i所以会提醒是否删除文件
    
    [root@Centos ~]# rm -f /tmp/file2
    #强制删除文件
    
    [root@Centos ~]# rm -rf /tmp/etc/
    [root@Centos ~]# rm -f /tmp/file*
    
    

文件查看常用操作命令

  • #cat 查看文件内容,文件内容较少适合cat
    [root@Centos ~]#cat /etc/passwd
    
    [root@Centos ~]# cat -n /etc/passwd
    #查看文件行数
    [root@Centos ~]# tac /etc/passwd
    #倒叙查看
    
  • #less more 分页查看文件内容,适合文件内容比较大的
    [root@Centos ~]# less /etc/services
    #使用光标上下翻动,空格进行翻页,q退出
    
    [root@Centos ~]# more /etc/services
    #使用回车上下翻动,空格进行翻页,q退出
    
  • #head 默认查看文件头部前10行内容
    [root@Centos ~]# head /var/log/yum.log
        Mar 16 21:28:49 Installed: net-tools-2.0-0.25.20131004git.el7.x86_64
        Mar 16 22:03:43 Installed: epel-release-7-11.noarch
        Mar 16 22:07:38 Installed: 14:libpcap-1.5.3-12.el7.x86_64
        Mar 16 22:07:38 Installed: libref_array-0.1.5-32.el7.x86_64
        Mar 16 22:07:38 Installed: libcollection-0.7.0-32.el7.x86_64
        Mar 16 22:07:38 Installed: libevent-2.0.21-4.el7.x86_64
        Mar 16 22:07:38 Installed: apr-1.4.8-7.el7.x86_64
        Mar 16 22:07:38 Installed: libbasicobjects-0.1.1-32.el7.x86_64
        Mar 16 22:07:38 Installed: libtirpc-0.2.4-0.16.el7.x86_64
        Mar 16 22:07:38 Installed: rpcbind-0.2.0-49.el7.x86_64
       
      #设置查看文件头部前5行内容
    [root@Centos ~]# head -5 /var/log/yum.log
        Mar 16 21:28:49 Installed: net-tools-2.0-0.25.20131004git.el7.x86_64
        Mar 16 22:03:43 Installed: epel-release-7-11.noarch
        Mar 16 22:07:38 Installed: 14:libpcap-1.5.3-12.el7.x86_64
        Mar 16 22:07:38 Installed: libref_array-0.1.5-32.el7.x86_64
        Mar 16 22:07:38 Installed: libcollection-0.7.0-32.el7.x86_64
    
    
  • # tail 默认查看尾部内容,默认是10行
    #-f = tailf命令 ,-f:动态追踪一个文件的尾部变量
    [root@Centos ~]# tail /var/log/yum.log 
    Mar 16 22:07:48 Installed: psmisc-22.20-17.el7.x86_64
    Mar 16 22:07:48 Installed: lrzsz-0.12.20-36.el7.x86_64
    Mar 16 22:07:48 Installed: wget-1.14-18.el7_6.1.x86_64
    Mar 16 22:07:48 Installed: rsync-3.1.2-10.el7.x86_64
    Mar 16 22:07:48 Installed: htop-2.2.0-3.el7.x86_64
    Mar 16 22:07:48 Installed: 1:telnet-0.17-66.el7.x86_64
    Mar 16 22:07:48 Installed: unzip-6.0-24.el7_9.x86_64
    Mar 16 22:07:48 Installed: sl-5.02-1.el7.x86_64
    Mar 16 22:07:48 Installed: iotop-0.6-4.el7.noarch
    Mar 16 22:07:48 Installed: dos2unix-6.0.3-7.el7.x86_64
    
    [root@Centos ~]# tailf /var/log/yum.log
    Mar 16 22:07:48 Installed: psmisc-22.20-17.el7.x86_64
    Mar 16 22:07:48 Installed: lrzsz-0.12.20-36.el7.x86_64
    Mar 16 22:07:48 Installed: wget-1.14-18.el7_6.1.x86_64
    Mar 16 22:07:48 Installed: rsync-3.1.2-10.el7.x86_64
    Mar 16 22:07:48 Installed: htop-2.2.0-3.el7.x86_64
    Mar 16 22:07:48 Installed: 1:telnet-0.17-66.el7.x86_64
    Mar 16 22:07:48 Installed: unzip-6.0-24.el7_9.x86_64
    Mar 16 22:07:48 Installed: sl-5.02-1.el7.x86_64
    Mar 16 22:07:48 Installed: iotop-0.6-4.el7.noarch
    Mar 16 22:07:48 Installed: dos2unix-6.0.3-7.el7.x86_64
    ...#动态追踪
    
  • #grep 过滤 -v:取反,-E:搜素多个条件  -c:count,统计数量
    [root@Centos ~]# grep "unzip" /var/log/yum.log 
    [root@Centos ~]# grep "dos2unix" -v /var/log/yum.log 
    [root@Centos ~]# grep "sl|iotop" -E  /var/log/yum.log 
    [root@Centos ~]# grep "sl|iotop" -cvE /var/log/yum.log 
    

文件上传或者下载命令

  • [root@Centos ~]# yum install lrzsz -y # 安装软件包
    
    rz:上传,Windows系统可以采用拖拽的方式
    sz filename:下载linux文件到本地Windows
    
  • [root@Centos ~]# yum install wget -y 
    
  • #下载互联网上的文件到linux本地 			
    wget	http://mirrors.aliyun.com/repo/Centos-7.repo
    
    wget -O /etc/yum.repos.d/CentOS-Base.repo	http://mirrors.aliyun.com/repo/Centos-7
    .repo
    #-O 指定参数,下载到/etc/yum.repos.d并改名
    
  • #查看这个URL的内容
    curl http://mirrors.aliyun.com/repo/Centos-7.repo
    
    #下载到/etc/yum.repos.d并改名	-o݇指定参数
    curl -o	/etc/yum.repos.d/CentOS-Base.repo	http://mirrors.aliyun.com/repo/Centos-7
    .repo
    

常用字符处理命令

  • # sort 排序 -r 倒叙, -n 按数字排序 -t 指定分隔符 -k 指定第几列
    
    [scripts@Centos ~]$ sort -t "." -k 3.1,3.1 -k4.1,4.3 -n ip.txt 
    192.168.0.151 00:0F:AF:85:6C:F6
    192.168.0.151 00:0F:AF:85:6C:F6
    192.168.0.152 00:0F:AF:83:1F:65
    192.168.0.153 00:0F:AF:85:70:03
    192.168.0.153 00:0F:AF:85:70:03
    192.168.1.1 00:0F:AF:81:19:1F
    192.168.1.10 00:30:15:A2:3B:B6
    192.168.1.11 00:30:15:A3:23:B7
    192.168.1.11 00:30:15:A3:23:B7
    192.168.1.12 00:30:15:A2:3A:A1
    192.168.1.21 00:0F:AF:85:6C:09
    192.168.1.152 00:0F:AF:83:1F:65
    192.168.2.2 00:0F:AF:85:6C:25
    192.168.2.20 00:0F:AF:85:55:DE
    192.168.2.20 00:0F:AF:85:55:DE
    192.168.2.21 00:0F:AF:85:6C:09
    192.168.2.22 00:0F:AF:85:5C:41
    192.168.2.22 00:0F:AF:85:5C:41
    192.168.3.1 00:0F:AF:81:19:1F
    192.168.3.2 00:0F:AF:85:6C:25
    192.168.3.3 00:0F:AF:85:70:42
    192.168.3.3 00:0F:AF:85:70:42
    192.168.3.10 00:30:15:A2:3B:B6
    192.168.3.12 00:30:15:A2:3A:A1
    
    # uniq 去重  uniq需要和sort一起使用,先使用sort排序,让重复内容连续在一起
    [scripts@Centos ~]$ cat  >> file.txt <<EOF
    123
    abc
    123
    abc
    EOF
    
    [scripts@Centos ~]$ cat file.txt 
    123
    abc
    123
    abc    
    [scripts@Centos ~]$ sort file.txt |uniq
    123
    abc
    
    # wc 指定统计文件中的字节数、行数、字数,并将统计结果显示输出
    # -l 显示文件行数 -c显示文件字节 -w显示文件单词
    
  • #awk 文本和数据处理的编程语言
    #参数 -F 指定输入时用到的字符分隔符
    [root@Centos ~]# awk -F ':' '{print $1}' /etc/passwd
    #用:分割,然后输出第1列
    
    

[scripts@Centos ~]$ ifconfig eth0 | grep “inet ” | awk ‘{print $2}’ #取网卡的ip地址
[scripts@Centos ~]$ ifconfig eth0 |awk ‘NR==2’ | awk ‘{print $2}’ #纯awk取网卡的ip地址


- ```bash
#sed 替换 #old#new#
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

文件压缩

什么是文件压缩以及压缩的作用
  • 将多个文件或者目录合并成为一个特殊的文件;
  • 将文件压缩有利于文件的传输速度,还可以节省网络的消耗
linux 下常其他见压缩包类型
  • 格式 压缩工具
    .zip zip压缩工具
    .gz gzip压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
    .bz2 bzip2压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
    .tar.gz 先使用tar命令归档打包,然后使用gzip压缩
    .tar.bz2 先使用tar命令归档打包,然后使用bzip压缩

常用的压缩与解压缩操作

  • gzip

    • #gzip 需要安装
      #选项 -d 解压缩
      gzip file1 #压缩文件file1
      gzip -d  file1 #解压缩文件file1
      
      #zcat 查看压缩的文件
      
  • zip

    • #压缩用zip 需要安装 zip和unzip
      # -r 处理指定目录和指定目录下的使用子目录  -T 检查备份文件内的每个文件是否正确无误
      zip file.zip file #压缩文件file
      zip -r dir.zip /dir #压缩目录
      zip -T file.zip # 查看file.zip 是否完整
      
      #解压缩用unzip
      #-l 显示压缩文件内所包含的文件     -t 检查压缩文件是否正确      
      #-d<目录> 指定文件解压缩后所要存储的目录
      unzip -l file.zip unzip -t file.zip #不解压压缩包查看包的内容
      unzip file.zip -d /tmp #解压file.zip 到/tmp目录下
      unzip file.zip #解压zip文件包,默认到当前目录下
      
  • tar 是linux下最常用的压缩与解压缩,支持文件和目录的压缩归档

    • #tar 用法 tar[选项]file
      # c 创建新的归档文件
      # x 对归档文件解包
      # t 列出归档文件里的文件列表
      # v 输出命令的归档和解包的过程 
      # f 指定包文件名,多参数f写最后
      # z 使用gzip压缩归档后的文档(.tar.gz)
      # j 使用bzip2压缩归档后的文件(.tar.bz2)
      # J 使用xz压缩归档后的文件(tar.xz)
      # C 指定解压目录位置
      # X 排除多个文件(写入需要排除的文件名称)
      # h 打包软连接
      -- hard-dereference #打包硬链接
      -- exclude #在打包的时候写入需要排除的文件或者目录
      
      #常用的打包与解压组合
      czf #打包tar.gz格式
      cjf #打包tar.bz格式
      cJf #打包tar.xz格式
      
      zxf #解压tar.gz格式
      jxf #解压tar.bz格式
      xf  #自动选择解压模式
      tf  #查看压缩包内容
      

文件属性

  • 使用ls -l 列目录下所有文件时,会以长格式的方式显示,长格式显示就是windows下看到的文件详细信息

    • root@ljinw:~# ls -l ./
      drwxr-xr-x 4 root root 4096  3月 17 20:19 snap
      # drwxr-xr-x 第一个字符是字符是文件类型,其他则是权限
      # 4 硬链接次数
      # root 文件属于那个用户
      # root 文件属于那个组
      # 4096 文件大小
      #3月 17 20:19  最后修改时间
      #snap  文件或目录名称
      
  • 文件类型

    • 文件类型说明

      • 文件类型字母 类型含义
        普通文件(文件,二进制,压缩,图片,日志等)
        d 目录文件
        b 设备文件(块设备)存储设备硬盘 /dev/sda ,/dev/sr0
        c 设备文件(字符设备),终端 /dev/tty1
        s 套接字文件,进程与进程间的一种通信方式(socket)
        l 链接文件
      • 有些情况下,无法通过 ls -l 确定文件的类型,需要使用 file 命令来更加精准的判断文件的类型

      • linux的文件扩展名不代表任何含义,仅为了我们能更好的识别该文件是什么类型

linux链接文件

命令

  • # ls选项:
    #	-d: 查看目录本身的属性;
    #	-i: 查看文件或目的innode;
    #	-h:以人性化的方式显示文件大小的单位;默认是字节
    
    #file 查看文件类型
    

Inode与Block

  • 文件有文件名和数据,在linux上被分成两个部分:数据 data 与 文件元数据 metadata
    • 数据 data block ,数据块是用来记录文件真实内容的地方,我们将其称为 Block
    • 元数据 metadata ,用来记录文件大小、创建时间、所有者等信息,我们将其称为 Inode
    • 需要注意:Inode并不包含文件名称,inode仅包含文件的元数据信息,具体来说有以下内容:
      • 文件的字节数
      • 文件的UserID GroupID
      • 文件的读、写、执行权限
      • 文件的时间戳
      • 链接数,既有多少文件名指向这个Inode
      • 文件数据block的位置
    • 每个 inode 都是一个编号,操作系统是通过inode来识别不同的文件
      • 对于系统来说,文件名只是inode便于识别的别名
      • 表面上,用户是通过文件名打开的文件,实际上系统内部这个过程分为如下三步
        • 首先,系统找到这个文件名相对应的inode编号
        • 其次,通过inode编号,获取inode信息
        • 最后,根据inode信息,找到文件数据所在的block,读出数据

软链接

  • 软连接相当于Windows的快捷方式,软连接文件会将inode指向源文件的block,访问软连接文件时,其实访问的是源文件本身
  • 软连接使用场景
    • 软件升级
    • 代码发布
  • 使用 ln -s 创建软连接

硬链接

  • 对于硬连接的解释:不同的文件名指向同一个inode,简单的说就是指向同一个真实的数据源

  • 使用 ln 创建硬链接

  • 硬链接和软连接的区别

    • ln 创建硬链接,ln -s 命令创建软连接
    • 目录不能创建硬链接,并且硬链接不可以跨越分区系统
    • 软连接支持对目录创建,同事也支持跨越分区系统
    • 硬链接文件与源文件的inode相同,软链接文件与源文件inode不同
    • 删除软连接文件,对源文件及硬链接文件无任何影响
    • 删除文件的硬链接文件,对源文件及链接文件无任何影响
    • 删除链接文件的的源文件,对硬链接无影响,会导致软连接失效
    • 删除源文件以及硬链接文件,整个文件会被真正的删除

vim与vi编辑器

什么是vim

  • vim和vi都是文本编辑器,只不过vim是vi的增强版,比vi多了语法高亮显示,其他编辑功能几乎无差,最小安装是没有vim的命令,可以使用yum install vim 进行安装

vim的模式:

普通模式:
  • 主要是控制光标移动,可对文本进行复制、粘贴、删除等工作

  • 常用的快捷键:

    • -gg:光标跳转至顶端,Ngg:光标跳转至当前文件内的N行
      -G:光标跳转至末端
      -yy:复制当前光标所在的行,Nyy 复制当前光标以及向下N行
      -p:(小写P)粘贴至当前光标的下一行;(大写P)粘贴至当前光标上一行
      -dd: 删除当前光标的所在行
      -r: 替换一次;一次仅替换一个字符
      -R:连续替换,直到按下ESC才终止替换操作
      
编辑模式:
  • 主要进行文本内容编辑和修改

  • 常用的快捷键:

    • -i:进入编辑模式
      -a:进入编辑模式,将当前光标往后移一位
      -o:进入编辑模式,便在当前光标下添加一行空白内容
      -A:进入编辑模式同时,光标转至本行的行尾
      
末行模式:
  • 主要用于保存或者退出文本

  • 常用的快捷键:

    • :wq 先保存,在退出
      :wq!强制保存并退出
      :q!强制退出文档不会修改当前内容
      :set nu 显示行号
      替换:
      	%s#old#new#g  %:全文替换
      	1,10s###g 1到10行都替换
      查找:
      	/string(要查找的内容) n下翻;N上翻
      

视图模式:

  • 从普通模式进入视图模式,主要进行批量操作

  • ctrl+v 进入可视化模式,选中需要注释的行
    	1.插入:按shift+i进入编辑模式,输入#,结束按ESC健
    	2.删除:选中内容后,按x或者d键删除
    	3.替换:选中需要替换的内容,按下r键,然后输入替换后的内容
    	
    	
    shift+v 进入可视化模式,选中整行内容
    	1.复制:选中行内容后按y键即可复制
    	2.删除:选中行内内容后按d键删除
    
  • vim编辑打开文件整体流程如下:

    • 默认打开文件处于普通模式
    • 从普通模式切换至编辑模式需要使用a、i、o
    • 编辑模式修改完毕后需要先使用ESC返回普通模式
    • 在普通模式输入“:”或者”/”进入末行模式,可实现文件的保存与退出
    • 无法直接从编辑模式切换到末行模式

用户管理和权限管理

用户管理

linux的用户与用户组
用户
  1. 什么是用户,用户的作用

    • 用户指的是能够正常登录linux或者Windows系统
    • 用户的作用:
      • 系统上的每一个进程(运行的程序),都需要一个特定的用户运行
      • 通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障;
  2. 用户的分类

    • 用户UID 系统中约定的含义
      0 超级管理员,最高权限,有着极强的破坏能力
      1~200 系统用户,用来运行系统自带的过程,默认已创建
      201~999 系统用户,用来运行用户安装的程序,所以此类用户无需登录系统
      1000+ 普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限
  3. 相关配置文件

    • 创建新用户时,系统会将用户的信息存放/etc/passwd中,而密码是存在/etc/shadow中,不可以轻易删除与修改

    • /etc/passwd 重要内容说明

      • [root@Centos ~]# tail -1 /etc/passwd
        nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
        
        #nfsnobody 用户名称 
        # x 密码占位符
        # 65534 用户UID
        # 65534 组GID
        #Anonymous NFS User 注释信息
        # /var/lib/nfs  用户家目录
        #/sbin/nologin 登录shell
        
  4. 相关操作命令

    • 查询用户ID信息

      • [root@Centos ~]# id
        uid=0(root) gid=0(root) 组=0(root) 
        
        [root@Centos ~]# id root
        uid=0(root) gid=0(root) 组=0(root)		
        
    • 添加用户

      • # useradd 添加用户
        #选项 
        # -u 指定创建用户的UID,不允许冲突 
        #-g 指定要创建用户的基本组 
        #-G 指定要创建用户的附加组
        # -d 指定要创建用户家目录
        #-s 指定要创建用户的bash shell 
        #-c 指定要创建用户注释信息
        # -M 创建的用户不给创建家目录 
        #-r 创建系统目录,默认无家目录
        
        
        #创建 Redis用户,用户ID为6699,基本组为Demo,附加组为Demo-test 注释信息为 Redis Test 登录shell: /bin/bash
        [root@Centos ~]# groupadd Demo  #创建组
        [root@Centos ~]# groupadd Demo-test #创建附加组
        [root@Centos ~]# useradd -u 6699 -g Demo -G Demo-test -c "Redis Test" -s /bin/bash Redis
        [root@Centos ~]# tail -1 /etc/passwd
        Redis:x:6699:1000:Redis Test:/home/Redis:/bin/bash
        
        #创建mysql系统用户,该用户不需要家目录,该用户不需要登录系统
        [root@Centos ~]# useradd -r  -s /sbin/nologin mysql
        [root@Centos ~]# tail -1 /etc/passwd
        mysql:x:997:995::/home/mysql:/sbin/nologin
        [root@Centos ~]# useradd -r dba -M  -s /sbin/nologin mysql
        
    • 修改用户

      • #usermod修改用户
        #选项 -u 指定修改用户的UID;
        #-g 指定修改用户的基本组;
        #-a append 把用户追加到某些组里,仅与-G选项一起使用
        #-G指定要修改用户附加组,使用逗号隔间开多个附加组,覆盖原有的附加组;
        #-d 指定要修改用户的家目录;
        #-s 指定要修改用户的bash shell;
        #-c 指定修改用户注释信息;
        #-l 指定要修改用户的登录名; 
        #-L 指定要锁定的用户; 
        #-U 指定要解锁的用户;
        
        
        
        #修改Redis用户,uid为5008 基本组为network,附加组为ops,dev,sa , 注释信息为 redis ,登录名称为new_Redis
        [root@Centos ~]# usermod Redis -u5008 -c "student" -g network -G ops,dev,sa -l new_Redis
        [root@Centos ~]# id new_Redis
        	uid=5008(new_Redis) gid=1002(network) 组			=1002(network),1003(sa),1004(ops),1005(dev)
        [root@Centos ~]# cat /etc/passwd | grep "new_Redis"                                  new_Redis:x:5008:1002:student:/home/Redis:/bin/bash
        
    • 删除用户

      • #userdel 删除用户,连同家目录一起删除
        #选项 -r 使用者目录下的档案一并移除,在其他位置上的档案也将一一找出并删除
        
        
        [root@Centos ~]# userdel -r mysql
        [root@Centos ~]# cat /etc/passwd | grep mysql
        [root@Centos ~]#
        
        
    • 用户设密码:

      • 创建用户后,如需要使用该用户进行远程登录系统则需要为用户设定密码,设定密码使用passwd

      • 普通用户只允许变更自己的密码,无法修改其他人密码,并且密码长度必须是8位字符

      • 管理员用户允许修改任何人的密码,无论面长度多长或多短

      • 交互式设定密码

        • [root@Centos ~]# passwd Demo
          
      • 非交互式设定密码

        • [root@Centos ~]# echo "12345" |passwd --stdin new_Redis
          更改用户 new_Redis 的密码 。
          passwd:所有的身份验证令牌已经成功更新。
          [root@Centos ~]# echo $(mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4) | tee pass.txt|passwd --stdin new_Redis
          #创建随机密码保存在pass.txt文件中
          #tee:用来将标准输入的内容输出到标准输出并可以保存为文件
          
用户组
  1. 什么是用户组,作用是什么

    • 组是一种逻辑层面的定义
    • 逻辑上将多个用户归纳至一个组,当我们对组操作,实际上就是在对组中的所有用户进行操作
  2. 组有几种分类

    • 默认组:创建用户时不指定组,则默认创建于用户同名的组;
    • 基本组:用户有且只能有一个基本组,创建时可通过-g指定
    • 附加组:用户可以有多个附加组,创建时通过—G指定
  3. 相关配置文件

    • 组账户信息保存在 /etc/group /etc/gshadow 两个文件中,其中 /etc/gshadow 不太重要

    • /etc/group 文件解释

      • [root@Centos ~]# tail -1 /etc/group
        dev:x:1005:new_Redis
        dev 组的名称
        x 组的密码
        1005 组GID
        new_redis  显示附加组,不显示基本成员
        
  4. 相关操作命令

    • 添加组

      • #groupadd 添加用户组
        #选项 -f 如果组已经存在,会提示成功创建的状态
        #-g 为新组设置GID,若GID已经存在会提示GID已经存在
        #-r 创建一个系统组
        
        #添加一个 Test1 的组,为组设定gid为10000
        [root@Centos ~]# groupadd -g 10000 Test1
        [root@Centos ~]# cat /etc/group | grep Test1
        Test1:x:10000:
        
        #添加一个 Test2 的组,添加为系统组
        [root@Centos ~]# groupadd -r Test2
        [root@Centos ~]# cat /etc/group | grep Test2
        Test2:x:995:
        
    • 修改组

      • #groupmod 修改组
        选项:-f 如果组已经存在,会提示成功创建的状态
        	-g 为新组设置GID,若GID已经存在会提示GID已存在
        	-r 修改为系统组
        	-n 改名为新的组
        	
        	
        #修改 Test1 用户组组名为 system
        [root@Centos ~]# groupmod -n system Test1
        [root@Centos ~]# tail -1 /etc/group
        system:x:10000:
        
        #修改用户组的GID为5000
        [root@Centos ~]# tail -1 /etc/group
        system:x:5000:
        
    • 删除组

      • #groupdel 删除用户组
        #删除system用户组
        [root@Centos ~]# groupdel system
        [root@Centos ~]# tail -1 /etc/group
        Test2:x:995:# 最后一行不是system用户组
        
      • 综合练习,用户和组

        • #创建 dev 和 ops 两个组
          #创建bob用户,设定基本组为dev,密码是123
          #创建alice用户,设定基本组为ops,密码是123
          #创建/opt/reosurce文件,然后修改属组为ops、权限为664
          #测试发现alice用户可以读写,而bob用户仅可以查看
          #现在希望bob也能够对文件进行读写,如何快速实现
          
          
          [root@Centos ~]# groupadd dev
          [root@Centos ~]# groupadd ops
          [root@Centos ~]# useradd -g dev bob
          [root@Centos ~]# echo "123" | passwd --stdin bob
          更改用户 bob 的密码 。
          passwd:所有的身份验证令牌已经成功更新。
          [root@Centos ~]# useradd -g ops alice
          [root@Centos ~]# echo "123" | passwd --stdin alice
          更改用户 alice 的密码 。
          passwd:所有的身份验证令牌已经成功更新。
          
          [root@Centos ~]# touch /opt/reosurce
          [root@Centos ~]# echo "ceshi" >/opt/reosurce
          [root@Centos ~]# chgrp ops /opt/reosurce #设置属组为ops
          [root@Centos ~]# chmod 664 /opt/reosurce #设置权限为644
          
          [root@Centos ~]# su - alice
          [alice@Centos ~]$ echo "alice-ceshi" >> /opt/reosurce
          [alice@Centos ~]$ cat /opt/reosurce
          ceshi
          alice-ceshi
          
          [alice@Centos ~]$ su - bob
          密码:
          上一次登录:日 3月 20 16:49:59 CST 2022pts/0 上
          [bob@Centos ~]$ echo "ceshi-bob" >> /opt/reosurce
          -bash: /opt/reosurce: 权限不够
          [bob@Centos ~]$ cat /opt/reosurce
          ceshi
          alice-ceshi
          #现在bob用户只能查看/opt/resource 的文件内容不能修改,所以将bob的附加组加入ops就可以修改此文件
          [root@Centos ~]# usermod bob -G ops
          [root@Centos ~]# id bob
          uid=5010(bob) gid=1004(dev) 组=1004(dev),1005(ops)
          
          [alice@Centos ~]$ su - bob
          密码:
          上一次登录:日 3月 20 16:55:37 CST 2022pts/0 上
          [bob@Centos ~]$ echo "ceshi-bob" >> /opt/reosurce
          [bob@Centos ~]$ cat /opt/reosurce
          ceshi
          alice-ceshi
          ceshi-bob
          
用户提权
  1. 为什么要提权
    • 往往公司的服务器对外都是禁止 root用户直接登录,所以我们通常使用的都是普通用户,当时用 /sbin目录下的命令时没有权限,所以需要对普通用户进行提权操作
  2. 提权的操作命令
    • su 身份切换:
      • 使用普通用户登录,然后使用su 切换到 root
      • 但是需要知道root密码
      • su - username 属于登录式shell
      • su username 属于非登录式shell
        • su su – 最大的区别就在于加载的环境变量``不一样
    • sudo提权,当需要使用root权限时进行提权,无需切换至root用户
      • 快速配置sudo方式:
        • 将用户加入 wheel 组,默认 wheel 组有sudo权限
        • 可以通过 /var/log/secure 文件查看有sudo权限的用户都执行了什么操作
  3. shell登录分类与加载顺序
    • 登录shell 需要输入用户名和密码才能进入 shell 日常接触的最多的一种
    • 非登录shell不需要输入用户名和密码就能进入 shell,比如运行 bash会开启一个新的会话窗口
    • 环境变量配置文件
      • profile类文件:设定环境变量,登录前运行的脚本和命令
      • bashrc类文件:设定本地变量,定义命令别名
      • 用户配置文件:
        • ~/.bash_profile
        • ~/.bashrc
      • 全局环境变量:
        • /etc/profile
        • /etc/profile.d/*.sh
        • /etc/bashrc
      • 登录式 shell配置文件加载顺序: /etc/profile --> /etc/profile.d/* .sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
      • 非登录式 shell 配置文件加载顺序: /.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

linux的权限

基础权限
什么是权限
  • 权限是用来约束用户能对系统所做的操作
  • 权限是指某个特定的用户具有特定的系统资源使用权力
需要权限的原因
  • 安全性:降低误删除风险、减少人为造成故障以及数据泄露等风险
  • 数据隔离:不同的权限能看到、以及操作不同的数据
  • 职责明确:不同场景不同职责可以查看对应的内容
权限对文件和目录的影响:
  • 权限 对文件的影响 对目录的影响
    r 具有读取\阅读文件内容权限 具有浏览目录以及子目录
    w 具有新增、修改文件内容的权限 具有增加和删除目录内的文件
    x 具有执行文件的权限 具有访问目录的内容(取决于目录中文件权限)
权限的关系
  • 权限与用户的关系

    • 权限是用来定义用户能做什么,不能做什么的规则

      • 针对文件定义了三种身份,分别是属主owner属组group其他人others
      • 每种身份对应三种权限 。读read写write执行excute
    • 当一个用户访问文件流程如下:

      1. 判断用户是否是属主,如果是则按属主权限进行访问
      2. 判断用户是否为文件属组,如果是则按属组权限进行访问
      3. 如果不是文件属主,也不是该文件属组,则按其他人权限进行访问
    • rwx的含义

      • rwx分别是读写执行。属主,属组,其他都对应这三个权限,用十进制表示就是 421---->> rwx
    • 修改文件权限

      • 修改权限的意义:

        • 赋予某个用户或组 -----> 能够以(读写执行)操作文件
      • 修改权限使用chmod命令:

        • 对于root用户而言,可以修改任何人的文件权限;对于普通用户仅仅只能变更属于自己的文件权限

        • 两种方式修改权限

          • UGO

            • a u g o赋予rwx 权限 ,-为减去augo的某个权限

            • chmod a=rwx file_Demo #给所有用户和组添加读写执行文件的权限
              chnod u=rwx,go=w file_Demo #给文件所属者添加所有权限,所属组和其他人只有读的权限
              
          • NUM

            • rwx的十进制赋予权限,所有人拥有读写执行的权限为777

            • #rwxr--r--
              chmod 744 file1
              
              #rw-rw-rw-
              chmod 666 file2
              
              #rwx--x--x
              chmod 711 file3
              
              #rw-------
              chmod 600 file4
              
    • 文件权限总结

      • 读取权限:具有读取\阅读文件内容权限
        • 只能使用的命令有:cat head tail less more
      • 写入权限:具有新增、修改文件内容的权限
        • 使用 vim 会提示权限拒绝,但可强制保存,会覆盖文件的所有内容
        • 使用echo 命令重定向的方式可以往文件中写入数据,>> 可以追加内容
        • 使用rm无法删除文件,因为删除文件需要看上级目录是否有w的权限
      • 执行权限:具有执行文件的权限
        • 普通用户需要执行文件,需要配合r权限
    • 文件权限设定小结:

      • 文件 r 权限 ,只给用户查看,无其他操作

      • 文件rw 权限,可以查看和编辑文件内容

      • 文件rx权限,允许查看和执行文件、但不能修改文件

      • 文件rwx权限,能读、能写、能执行、不能删除;

      • 默认系统设定的文件安全权限:644

  • 权限与目录的关系

    • 目录权限总结

      • 读取权限:具有浏览目录以及子目录权限
        • 使用 ls 命令浏览目录及子目录,但同时也会提示权限拒绝
        • 使用 ls -l 命令浏览目录以及子目录,文件属性会带问号,并且只能看到文件名
      • 写入权限:具有增加、删除或者修改目录内文件名权限,需要x权限配合
        • 可以再目录内创建文件,删除文件(跟文件本身权限无关)
        • 不能进入目录、复制目录、删除目录、移动目录等
      • 执行权限:具有执行问价的权利
        • 只能进入目录
        • 不能浏览、复制、移动、删除
    • 目录权限设定小结

      • 目录rx权限,允许浏览目录内文件以及子目录,不允许在该目录下创建文件、删除文件
      • 目录rw权限,能查看目录,能往目录写入文件,但无法进入目录,不太长用
      • 默认系统设定的目录安全权限:755
修改文件所属关系
  • 修改文件所属关系常用的操作:
    • chown(change owner) 能变更文件的属主和属组
    • chgrp (change group) 仅能变更文件的属组
      • -R 递归处理所有的文件以及子目录
特殊权限
什么是特殊权限
  • 特殊权限是为了更加规范文件和目录的操作,让其更加具备安全性
三种特殊权限
  • SUID:SetUID,也就是在属主的权限位的执行权限上是s,当一个执行文件设置SetUID后,用户在执行这个文件时将以文件所有者的身份来执行

    • SUID配置语法

      • chmod u+s /usr/bin/cat
        chmod 4755 /usr/cat
        
    • SUID作用总结

      • 让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限
      • 如果设置的二进制文件没有执行权限,那么 suid 的权限显示就是大 S
      • 特殊权限suid 仅对二进制可执行程序有效,其他文件或目录则无效
      • suid相对危险,不建议vim 或 rm 进行 suid 设定操作
  • SGID

    • SGID设置二进制可执行文件,命令在执行的过程中,会以命令的属组身份运行改命令

    • 设置在目录上,这时在创建新文件或者目录时会自动继承父目录的属组

    • 语法配置

      • chmod g+s /dir
        chmod 2755 /dir
        
  • SBIT

    • 一旦目录被赋予粘滞位,除了root可以删除目录中的所有文件,普通用户对该目录就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件

    • SBIT的配置

      • chmod 1755 /tmp
        chmod o+t  /tmp
        
    • SBIT作用总结

      • 让所有普通用户对该目录具有写入权限,并且能实现每个用户只能删自己的文件
      • 粘滞位目录表现在 othersx 位,用 t 表示,如果没有执行权限则显示为T
      • 粘滞位目录的属主以及root 用户有权限删除目录中的内容,其他用户无权限删除
文件特殊属性
什么是特殊属性,作用是什么
  • 创建一个文件,不允许被修改删除移动,root也不行
  • 创建一个文件,仅允许往文件里面追加数据,不允许修改移动删除
  • 凌驾于rwx属性之上

配置特殊属性

  • #chattr 配置特殊属性
    #chattr [+-=] [选项] 文件或目录名
    #选项:  
    	#a:可对文件进行追加内容;
    	#i:锁定文件,不允许其他操作
    #取消特殊权限,必须是root用户
    
    chattr +i /etc/passwd 
    #设置此文件不允许其他其操作
    chattr +a /var/log/secure
    #设置文件至允许追加