• 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 按数字排序
      # uniq 去重  uniq需要和sort一起使用,先使用sort排序,让重复内容连续在一起
      # wc 指定统计文件中的字节数、行数、字数,并将统计结果显示输出
      # -l 显示文件行数 -c显示文件字节 -w显示文件单词
      
      
    • #awk 文本和数据处理的编程语言
      #参数 -F 指定输入时用到的字符分隔符
      [root@Centos ~]# awk -F ':' '{print $1}' /etc/passwd
      #用:分割,然后输出第1列
      
      
    • #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
      #设置文件至允许追加
      
      

  • 相关阅读:
    SpringBoot启动报错 java.lang.NoClassDefFoundError: javax/validation/ValidationException
    Java String类创建对象问题
    Java代码执行顺序
    Java抽象类与接口(2) ------接口
    Java抽象类与接口(1) ------抽象类
    Manjaro kde2020 使用记录
    生活常用小插件
    技术汇总
    Vue中使用websocket的正确使用方法
    js封装一个websocket
  • 原文地址:https://www.cnblogs.com/ljinw/p/16099078.html
Copyright © 2020-2023  润新知