Linux使用

一、linux系统启动
  1. 修改root用户密码

    1
    sudo passwd root
  2. 停机和关机

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    shutdown -H		停机
    shutdown -P 关机(断电)
    shutdown -r 重启
    shutdown -h 相当于 -P ,除非指定 -H
    shutdown [options] [time] 在指定时间执行操作
    shutdown -h now 马上关机
    shutdown -h +n 在 n 分钟后关机
    shutdown -h 13:14 在今天 13:14 关机

    shutdown -k 只发送 wall message
    shutdown -c 取消 shutdown 命令 执行
    shutdown --no-wall 执行 shutdown 命令前不发送 wall message
二、linux系统目录结构
  1. 输入 ls -/ 命令查看目录结构

    1
    bin  boot  dev  etc  home  init  lib  lib64  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var
  2. 目录结构的作用和含义

    • /bin 存放常用的命令,如 cat、chmod、cp 等
    • /boot 存放启动linux需要的核心文件
    • /dev 存放linux的外部设备
    • /etc 存放系统管理需要的配置文件和子目录
    • /home 用户主目录,以用户名命名,如 /codecho
    • /lib 存放系统最基本的动态链接共享库,作用和windows中的DLL文件类似,几乎每个程序都使用到这些共享库
    • /lost+found 一般为空,当系统非法关机后,该目录存放一些“孤儿???”文件
    • /media linux识别设备后将其挂载到此目录
    • /mnt 系统临时挂载点
    • /opt 存放安装的第三方软件
    • /proc 虚拟的文件系统,非真实存在,记录和系统相关的信息
    • /root root用户主目录
    • /sbin 存放root用户使用的命令
    • /srv 存放一些服务启动后需要的数据
    • /sys 也是一个虚拟的文件系统,是对linux系统下所有设备的映射
    • /tmp 存放临时文件
    • /usr 存放用户的程序和文件
    • /usr/bin 存放一般的应用程序
    • /usr/sbin 存放root用户使用的应用程序
    • /usr/src 存放linux内核源码
    • /var 存放经常会变化的文件,比如系统的日志
    • /run 存放系统启动后的信息,重启时清空
三、linux文件基本属性
  1. 使用 ls -l 或 ll 命令显示文件/文件夹的属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    drwxr-xr-x  23 root root      4096 Jan 25 19:47 ./
    drwxr-xr-x 23 root root 4096 Jan 25 19:47 ../
    drwxr-xr-x 2 root root 4096 Jan 25 17:23 bin/
    drwxr-xr-x 3 root root 4096 Dec 12 2018 boot/
    drwxr-xr-x 18 root root 3740 Jan 25 16:29 dev/
    drwxr-xr-x 91 root root 4096 Jul 19 09:49 etc/
    drwxr-xr-x 3 root root 4096 Dec 26 2018 home/
    lrwxrwxrwx 1 root root 33 Dec 12 2018 initrd.img -> boot/initrd.img-4.15.0-42-generic
    lrwxrwxrwx 1 root root 33 Dec 12 2018 initrd.img.old -> boot/initrd.img-4.15.0-20-generic
    drwxr-xr-x 19 root root 4096 Dec 12 2018 lib/
    drwxr-xr-x 2 root root 4096 Jan 25 17:22 lib64/
    drwx------ 2 root root 16384 Dec 12 2018 lost+found/
    drwxr-xr-x 4 root root 4096 Dec 12 2018 media/
    drwxr-xr-x 2 root root 4096 Apr 27 2018 mnt/
    drwxr-xr-x 3 root root 4096 Dec 27 2018 opt/
    dr-xr-xr-x 134 root root 0 Jan 25 16:29 proc/
    drwx------ 11 root root 4096 Jul 16 20:19 root/
    drwxr-xr-x 25 root root 800 Jul 19 09:09 run/
    drwxr-xr-x 2 root root 4096 Dec 27 2018 sbin/
    drwxr-xr-x 2 root root 4096 Apr 27 2018 srv/
    -rw------- 1 root root 993249280 Dec 12 2018 swapfile
    dr-xr-xr-x 13 root root 0 Jan 26 00:29 sys/
    drwxr-xr-x 3 root root 4096 Jan 25 19:47 test/
    drwxrwxrwt 22 root root 4096 Jul 19 10:58 tmp/
    drwxr-xr-x 12 root root 4096 Jan 25 18:36 usr/
    drwxr-xr-x 12 root root 4096 Jun 18 15:40 var/
    • 第一个字符为 d 时,表示是目录
    • 第一个字符为 - 时,表示是文件
    • 第一个字符为 l 时,表示是链接文件
    • 第一个字符为 b 时,表示是装置文件里面的可供储存的接口设备(可随机存取装置)
    • 第一个字符是 c 时,表示是装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
    • rwx rwx rwx 分别表示 文件所有者(owner) 、所有者同组用户(group)、其他用户(others) 拥有该文件的权限
    • r 表示读权限,- 表示没有读权限
    • w 表示写权限,- 表示没有写权限
    • x 表示执行权限,- 表示没有执行权限
    • 特殊情况: t 表示 sticky bit ,可以理解为 防删除位,一般用在目录上,如 /temp 目录,用户只能删除自己的文件,不能删除其他用户的文件
  2. 更改文件属性的命令

    • chgrp:更改文件所属的用户组 -R 表示递归更改所属的用户组,更改某个目录下的所有文件的所属的用户组
    1
    chgrp [-R] 所属的用户组 文件/目录
    • chown:更改文件所属用户,也可以同时更改文件的所属的用户组

      1
      2
      chown [-R] 所属的用户 文件/目录
      chown [-R] 所属的用户:所属的用户组 文件/目录
    • chmod:更改文件的9个属性 其中 xyz 表示三个权限的数字之和,如下所示

      1
      2
      3
      4
      5
      6
      -----------------使用数字改变文件的权限-----------------
      chmod [-R] xyz 文件/目录
      各权限代表的数字:r=4 w=2 x=1 -=0(没有权限则为0)
      x: [r+w+x] = [4+2+1] --> 7 表示 owner 所拥有的权限
      y: [r+w+x] = [4+2+1] --> 7 表示 group 所拥有的的权限
      z: [r+w+x] = [4+2+1] --> 7 表示 others 所拥有的权限
      1
      2
      3
      4
      5
      6
      -----------------使用符号改变文件的权限-----------------
      将用户分为四种类型:a=all(所有用户) u=user(所属用户) g=group(所属用户组) o=others(其他用户)
      将操作分为 +(添加) -(去除) =(设置)
      chmod u=rw,g=wx,o=x test.txt 将test.txt文件的权限设为rw--wx--x
      chmod a-w test.txt 去除所有用户对test.txt文件的写权限
      chmod a+x test.txt 添加所有用户对test.txt文件的执行权限
四、linux文件与目录的操作
  1. linux根目录:/

  2. 文件/目录的常用操作命令

    • ls:列出目录

      1
      2
      3
      ls -a 列出所有的文件/目录,包括以 . 开头的文件
      ls -d 列出目录本身,不包括其内容
      ls -l 列出所有详细信息,包括权限、日期、所属用户等
    • cd:切换目录

      1
      2
      3
      cd [绝对路径/相对路径] 
      cd / 切换到根目录
      cd .. 返回当前目录的上一级目录
    • pwd:显示当前目录

      1
      pwd	显示当前目录
    • mkdir:创建目录

      1
      2
      mkdir -m xyz 目录名 创建目录时同时设置目录的权限,如 mkdir -m 777 test
      mkdir -p 目录1/目录2/目录3 递归创建多级目录,如 test1/hello/world
    • rmdir:删除空目录

      1
      rmdir -p 目录1/目录2/目录3 连带其上级目录一起删除
    • cp:复制文件/目录

      1
      2
      cp [options] source dest
      cp -r test test1/test2 递归复制
    • rm:删除目录或文件

      1
      2
      3
      4
      rm [-fir] 文件/目录
      rm -f 文件/目录 直接删除文件/目录,没有警告信息
      rm -i 文件/目录,删除前显示警告
      rm -r 文件/目录,递归删除
    • mv:移动目录/文件,或者修改名称

      1
      2
      3
      mv [-fi] source dest
      mv -f source dest 若目标文件存在,直接覆盖
      mv -i source dest 若目标文件存在,询问是否覆盖
  3. linux文件内容查看

    • cat:从第一行开始显示内容

      1
      2
      3
      4
      cat -b test.txt 列出行号,空白行不显示行号
      cat -n test.txt 列出行号,空白行也显示行号
      cat -E test.txt 显示结尾的断行字节 &
      cat -T test.txt 将 tab 制表符显示为 ^|
    • tac:从最后一行开始显示内容,和 cat 相反

    • tail:显示文件最后 n 行内容

      1
      tail [-n number] 文件名 number 为要显示的行数
五、linux用户和用户组管理
  1. 添加用户账号

    • useradd [options] 用户名

      1
      2
      3
      4
      5
      6
      sudo useradd -d /home/pain -m pain
      -d 指定用户主目录
      -m 如果主目录不存在则创建
      -g 指定用户所属用户组
      -G 指定用户所属的附加组
      -s 指定用户登录shell
  2. 设置用户账号密码

    • passwd [options] 账号

      1
      2
      3
      -l 锁定账号
      -e 强制账号密码过期
      -d 强制删除账号密码
  3. 删除用户账号

    • userdel [options] 账号

      1
      2
      userdel -r pain 
      -r 将账号的主目录也删除
  4. 修改用户账号

    • usermod [options] 账号

      1
      2
      3
      4
      usermod -s /bin/hello -d /home/hello -g test pain
      -s 指定新的登录shell
      -d 指定新的用户主目录
      -g 指定新的用户组
  5. 添加用户组

    • groupadd [options] 用户组

      1
      2
      -g GID 指定用户组的id
      -o 表示新用户组的id可以和已有用户组的id相同
  6. 删除用户组

    • groupdel 用户组
  7. 修改用户组

    • groupmod [options] 用户组

      1
      2
      groupmod -g 102 group2
      将group2的用户组id改为102
  8. 切换用户组(前提是该用户属于要切换的用户组)

    • newgrp 要切换的用户组
六、linux磁盘管理
  1. df:查看文件系统的整体磁盘空间使用量

    1
    2
    3
    df [options] 目录/文件
    -a 列出所有的文件系统
    -T 显示文件系统类型
  2. du:查看文件和目录的磁盘使用空间

    1
    2
    3
    du [options] 文件/目录
    -a 列出所有的文件与目录容量
    -h 以易读的方式显示
七、linux vi/vim
  1. vi/vim主要分为三种模式:命令行模式、编辑模式、底部命令行模式

    • 命令行模式:此时用户输入会被识别为命令

      1
      2
      3
      i 切换到编辑模式
      x 删除光标所在位置的字符
      : 切换到底部命令行模式
    • 编辑模式:可以输入内容编辑文件,按下 esc ,退出编辑模式

    • 底部命令行模式:输入命令

      1
      2
      3
      4
      q 退出
      w 保存
      wq 保存退出
      q! 不保存退出
    • 常用按键:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      —————————————底部命令行使用的复制粘贴、搜索替换等操作—————————————
      /key 寻找光标后方的名为 key 的字符串
      ?key 寻找光标前方的名为 key 的字符串
      n 重复上一个寻找的操作,如执行 /key 寻找光标后方的名为 key 的字符串,按下 n 继续向光标后方寻找
      N 反向重复上一个寻找的操作,如上,按下 N 向光标前方寻找
      :n1,n2s/key1/key2/g 在n1行到n2行之间寻找名为key1的字符串,并将其替换为key2
      :1,$s/key1/key2/g 从第一行到最后一行之间寻找key1的字符串,并将其替换为key2
      :$s/word1/word2/g 同上,写法不同
      :1,$s/key1/key2/gc 从第一行到最后一行之间寻找key1的字符串,并将其替换为key2,取代之前会有提示信息,让用户确认是否替换
      :$s/word1/word2/gc 同上,写法不同
      dd 删除光标所在的一整行
      nx 连续向后删除 n 个字符
      ndd 删除光标后方的 n 行
      d$ 删除光标到该行最后一个字符
      d0 删除光标到改行第一个字符
      yy 复制光标所在行的内容
      nyy 复制光标后方的 n 行内容
      y$ 复制光标到该行最后一个字符
      y0 复制光标到该行第一个字符
      p,P p 将复制的内容粘贴到光标的下一行, P 将复制的内容粘贴到光标的上一行
      c 重复删除多个数据,如 10cj 删除光标下方10行
      u 复原前一个动作
      ctrl+r 重做前一个动作

      —————————————底部命令行模式切换到编辑模式的操作—————————————
      i,I i 从光标处输入 I 从光标所在行第一个非空格符处输入
      a,A a 从光标处的下一个字符处输入 A 从光标所在行最后一个字符处输入
      o,O o 从光标处的下一行输入 O 从光标处的上一行输入

      —————————————编辑模式切换到底部命令行模式的操作—————————————
      ESC 从编辑模式退出到底部命令行模式

      —————————————底部命令行模式切换到命令行模式的操作—————————————
      :w 保存内容
      :w! 强制保存
      :q 不保存退出
      :q! 强制不保存退出
      :wq 保存并退出
八、linux yum命令
  1. yum:查找、安装、删除软件包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    yum [options] [command] [package]
    -y 安装过程选择 yes
    -q 不显示安装过程
    command 要执行的命令
    package 软件包

    yum check-update 列出可更新的软件
    yum update 更新所有软件
    yum list 列出可安装的软件
    yum install package 安装指定的软件
    yum update package 更新指定的软件
    yum remove package 删除指定的软件
九、Shell脚本
  1. shell:一种应用程序,它是用户和linux内核之间的桥梁,用户通过shell来间接地使用内核

  2. shell脚本:一种为shell编写的脚本程序

  3. shell的分类:

    • Bourne Shell(/usr/bin/sh或/bin/sh)
    • Bourne Again Shell(/bin/bash)是linux的默认shell
    • C Shell(/usr/bin/csh)
    • K Shell(/usr/bin/ksh)
    • Shell for Root(/sbin/sh)
  4. 查看系统可用的shell

    1
    2
    3
    4
    5
    6
    7
    8
    cat /etc/shells

    /bin/sh
    /bin/bash
    /bin/rbash
    /bin/dash
    /usr/bin/tmux
    /usr/bin/screen
  5. 查看当前系统的默认shell

    1
    2
    3
    echo $SHELL

    /bin/bash
  6. 编写一个简单的shell脚本

    1
    2
    #!/bin/bash
    echo "hello world,this is a shell script"
  7. 执行shell脚本:

    1
    2
    3
    4
    5
    ./helloworld.sh		注意要在shell脚本所在目录
    hello world,this is a shell script

    /bin/sh helloworld.sh
    hello world,this is a shell script
十、linux命令(经常使用的)
  1. 文件管理

    • cat [options] filename

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      -n | --number	从1开始对输出的行数编号
      -b | --number-nonblank 和-n相似,但是对空白行不编号
      -s | --squeeze-blank 连续两行以上空白行,替换为一行空白行
      -E | --show-ends 在每行结束处显示 $
      -T | --show-tabs 将 TAB 符显示为 ^|

      cat test1.txt 显示test1.txt中的内容
      cat test1.txt test2.txt 同时显示test1.txt和test2.txt中的内容
      cat test1.txt test2.txt > test3.txt 将test1.txt和test2.txt中的内容写到test3.txt中
      cat /dev/null > test4.txt 将test4中的内容清空

      /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据(报告写入成功),读取它则会立即得到一个 EOF
    • chgrp:参考 三

    • chmod:同上

    • chown:同上

    • find path [options],命令行上第一个 -(),! 之前的部分为path,后面的是expression,如果path为空字符串,使用当前路径,如果expression为空字符串,使用-print为预设expression

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      find . -name ".txt"		在当前目录查找所有以 .txt 结尾的文件
      find . -iname "T*" 查找文件名满足T*的文件,忽略大小写
      find . -cmin +10 查找修改时间超过10分钟的文件
      find . -amin +10 查找超过10分钟内被访问的文件
      find . -newer test3.txt 查找比test3.txt文件修改时间更晚的文件
      find . -anewer test3.txt 查找比test3.txt文件更晚被读取的文件
      find . -type c 查找文件类型是 c 的文件
      c的取值
      d 目录
      l 符号链接
      f 普通文件
      c 字符设备
      b 块设备
      s 套接字
    • mv:参考 三

    • rm:同上

    • tee [-ai][file]

      1
      2
      3
      tee test1.txt -a	读取用户输入的内容,将其输出到test1.txt文件中
      -a | --append 附加到文件后面,而非覆盖
      -i | --ignore-interrupts 忽略中断信号