linux(3)

一、用户和组的管理
  Linux/Unix是多用户系统:
    root是超级用户,拥有最高权限。其它用户及权限由root来管理。对比Windows系统:
  控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组
    -> 右击某用户 -> 属性 -> 隶属于(哪个组)
  用户和组是从属关系

  1、添加用户:useradd 用户名 (只能由root操作)
    # id 为root
    # useradd xiaohong
    规律:不写组,会自动创建一个组,组名同于用户名xiaohong;
      创建用户后,会在/home目录下,自动生成一个目录,就是该用户的主目录,目录名也同于用户名 xiaohong
    # cd /home
    # ls -l
    属主 属组
    drwx------ 2 xiaohong xiaohong 4096 4月 27 09:32 xiaohong 主目录名

  2、设置密码:passwd 用户名
    # passwd xiaohong 输入密码:123 123

    清密码:passwd -d 用户名
    # passwd xiaohong 输入密码:123 123

  3、改变身份: su 用户名
    su 不写用户名,默认就是root
    目的:获取某用户的权限进行管理
    注意:从root切换到普通用户不需要密码,但从普通用户切换到root或其他用户需要密码。
    练习:从root切换到xiaohong,从xiaohong切换到root
      再返回身份 exit su也会启动一个子进程
    查看最初登录身份:who am i
    查看当前用户名:whoami
    查看当前用户详细身份:id (用户id 用户名 组id 组名)

二、案例:
  1、添加boys组: groupadd 组名
    # id 是root
    # groupadd boys

  2、添加girls组:
    # groupadd girls

  3、查看组信息: /etc/group 组管理配置文件
    # cat /etc/group 重点查看组id和组名
      每一行就是一个组的记录,每一列就是不同的属性

    组名 组id(gid)
    root:x:0:root
    ...
    xiaohong:x:500:
    boys:x:501:
    girls:x:502:

  4、添加用户tom到boys组:useradd -g 组名 用户名
    # useradd -g boys tom
    # passwd tom 密码:123

  5、同理,添加用户alice和rose到girls组:
    # useradd -g girls alice
    # useradd -g girls rose
    # passwd alice 密码:123
    # passwd rose 密码:123

  6、查看用户账户信息: /etc/passwd
    # cat /etc/passwd
    每一行就是一条账户的信息,具有多个属性:
    用户名:口令占位符:uid:gid:描述:用户主目录:登录shell
    root:x:0:0:root:/root:/bin/bash
    ...
    xiaohong:x:500:500::/home/xiaohong:/bin/bash
    tom:x:501:501::/home/tom:/bin/bash
    alice:x:502:502::/home/alice:/bin/bash
    rose:x:503:502::/home/rose:/bin/bash

    uid: 用户id
    gid: 组id

    补充:用户口令文件 /etc/shadow
    分别使用root和xiaohong身份查看
    $ cat /etc/shadow 权限不够
    # cat /etc/shadow 可以查看,但是密码都经过加密MD5

  7、用alice的身份,在其主目录下创建1.txt文件
    # id 是root
    # su alice 不用密码
    $ cd 回alice主目录 /home/alice
    $ pwd
    $ ls
    $ touch 1.txt 创建空文件
    $ ls -l
    -rw-r--r-- 1 alice girls 0 7月 12 10:39 1.txt

      (编辑纯文本)


  8、使用vi编辑器,编辑1.txt文本 (vi基本使用)
    1)vi 1.txt 启动vi 编辑1.txt 纯字符界面
      默认处于:命令模式 可敲大量命令
    2)敲i键,切换到:输入模式 (左下角:插入 INSERT)
    3)输入 I am alice!
    4)敲Esc键,由输入模式 -> 命令模式
    5)敲 : 键(Shift ;)-> 底行模式(冒号模式)
    6)在冒号后输入: wq 回车 保存并退出(Write Quit)
    7)补充:如果保存时出现问题,可以不存盘强制退出
      Esc 冒号模式 shift ; q! 回车

  9、尝试让tom进入alice主目录中,查看并修改1.txt文件。
    $ id 是xiaohong
    $ su tom 密码123
    $ cd /home
    $ cd alice 权限不够
    $ ls -l

    drwx------ 2 alice girls 4096 4月 27 10:50 alice
    drwx------ 2 rose girls 4096 4月 27 10:23 rose
    drwx------ 2 tom boys 4096 4月 27 10:22 tom

三、文件/目录的权限:
  1、user 所有者(属主 owner 文件的创建人) u


  2、group 所有者所在的组 g
    比如:root用户 在 root组
      xiaohong用户 在 xiaohong组
      tom用户 在 boys组
      alice和rose 在girls组


  3、other 其他 o 既不是自己的,也不是同组的

    ls -l 开始的10个字符: d rwx --- ---

    文件类型 文件/目录的权限
    - --- --- ---
    - 文件 所有者 同组人 其他人
    d 目录

  4、三种访问权限:可读r 可写w 可执行x
    Read Write eXcute
    rwx------ 出现的位置固定 rwx 缺失使用-代替
    可读r r--
    可写w -w-
    可执行x --x

    - rw- r-- r-- 普通文件:权限 644
      自己:可读、可写 同组:只读 其他:只读

    d rwx r-x r-x 目录:权限 755
      自己:可读、可写、可执行
      同组:可读、可执行 其他:可读、可执行

    - rwx rwx rwx 可执行文件:777
      对所有人:可读、可写、可执行

    权 权限数字表达法
    421 (使用八进制)
    000 0 ---
    001 1 --x
    010 2 -w-
    011 3 -wx
    100 4 r--
    101 5 r-x
    110 6 rw-
    111 7 rwx

    权
    128 64 32 16 8 4 2 1
    01100001

    97 = 64 + 32 + 1

    将十进制数97 -> 二进制数:01100001
      -> 十六进制:0110 0001
            61
      -> 八进制:01 100 001
            141
    权
    128 64 32 16 8 4 2 1
    11101101

    237 = 128 + 64 + 32 + 8 + 4 + 1

    将十进制数237 -> 二进制数:11101101
            十六进制:1110 1101
      0~9 A B C D E F ED 程序猿更方便表示二进制

    某文件具有如下权限,对于用户自己拥有可读、可写、可执行,对于同组人可读、可执行,对于其他人可读,请写出该权限的八进制数形式____. 754
      - rwx r-x r--
        7 5 4

  5、归纳文件和目录的各种权限的规律:
    1)文件的权限:
      r 可读:可以使用vi、cat等查看文件的内容 Disk I 输入
      w 可写:可以修改后保持磁盘 Disk O 输出
      x 可执行:可以直接运行 命令就是可执行文件

    2)目录的权限:
      r 可读:通过ls 查看目录下的内容
      w 可写:可以改变目录下的内容,比如新建、删除资源
      x 可执行:可以cd进去

      为何tom无法进入alice的主目录?
      $ ls -ld
      drwx------ 2 alice girls 4096 4月 27 10:50 .
        700
      修改为:
      drwx-----x
        701

  6、修改文件/目录的权限:chmod 规则 文件/目录名
    规则:
    角色:u 自己人 user
      g 同组人 group
      o 其他人 other
      a 所有人 all
    操作:+ - 权限:r w x
    数字:644 755 ...
    举例: rw- r-- r--
    u g o
    # chmod u+x 1.txt 针对自己增加可执行权限
    # chmod u-x 1.txt 针对自己去除可执行权限
    # chmod g+w 1.txt 针对同组人增加可写权限
    # chmod a+rx, g+w 1.txt
      所有人都可读,可执行;同组的可写
    # chmod 777 1.txt 数字表达法
    # chmod 644 1.txt
    前提:只有文件的拥有者、root用户可以修改权限

    案例:由root或alice修改alice主目录的权限,让tom能进入其中,并且查看目录下内容,查看1.txt的内容,修改1.txt内容。
    由alice修改:让tom能cd进入
    $ id 是alice
    $ cd 在主目录中
    $ ls -ld 权限 700 rwx --- ---
    $ chmod o+x . 701 rwx --- --x
    或 chmod 701 .

    由alice修改:让tom能查看其主目录下内容
    $ chmod o+r . 705 rwx --- r-x
    或 chmod 705 .

    $ ls -l
    -rw-r--r-- 1 alice girls 12 4月 27 10:50 1.txt
    644
    目前tom可读,但不可写
    -rw-r--rw-
    646
    由alice修改:让tom可以改写1.txt
    $ chmod o+w 1.txt
      chmod 646 1.txt

    练习:让alice或root改变权限,让tom和rose都能进入alice主目录,查看目录下内容,查看1.txt内容,修改1.txt
    $ ls -ld drwx---r-x 705
    drwxr-xr-x 755
    $ chmod 755 .
    或 chmod a+rx .
    $ ls -l -rw-r--rw- 646
      -rw-rw-rw- 666
    $ chmod 666 1.txt
    或 chmod a+rw 1.txt

    准备一个可执行文件:f1 改为可执行,可直接运行
    由alice操作:
    $ id 是alice
    $ pwd 在/home/alice
    $ vi f1
    编辑:date
      sleep 10
      cal
    保存退出
    $ f1 命令找不到 和PATH有关 没有改命令所在路径
    $ /home/alice/f1
    $ ./f1 权限不够
    -rw-r--r-- 644
    -rwxr--r-- 744
    -rwxr-xr-x 755
    $ chmod u+x f1
    $ chmod a+x f1

    举例:写一个shell脚本,求出1~100的累加和
    $ id 是alice
    $ vi sum.sh

    #!/bin/bash
    sum=0
    i=1
    while (($i<=100))
    do
      sum=$(($sum +$i))
      i=$(($i+1))
    done
    echo "Sum=$sum"

    保存退出后
    $ chmod a+x *.sh 针对所有.sh文件,针对所有用户都可执行

四、查看文件内容的方式:cat more vi head tail
  1、cat 适合看小文件,不可翻页,不可编辑
      可以将多个文件合并成一个文件
    $ date > t1
    $ echo Hello > t2
    $ cal > t3
    $ cat t1 t2 t3 > newfile

  2、more 适合看大文件,可以翻页,不可编辑
    控制命令: 空格 -- 翻页
      回车 -- 跳行
      b -- 向前一屏
      f -- 向后
      h -- 求助
      q -- 退出
      / -- 查找
      n -- 继续查找

    将/etc/passwd文件拷贝到alice的主目录下:
    $ id 是alice
    $ cp /etc/passwd ~

    $ cat passwd
    $ more passwd

  3、vi 功能强大文本编辑器(Unix/Linux) vim等都是对vi的加强版
    关注三种模式:如何切换

      回车 i a o O
    底行模式 ----> 命令模式 ----> 输入模式
            <---- (初始模式) <----
            : / ?       Esc

    常用的操作命令:
      O
      i 光标 a
      o 变为输入模式,光标停留位置不同
      向上 k
      向下 j
      向左 h
      向右 l 用小键盘方向键也可
      到行首 ^
      到行尾 $
      到第5行 5G
      屏首 H
      屏尾 L
      屏中央 M
      前翻页 ctrl + b backward
      后翻页 ctrl + f forward

      x 删除一个字符
      dw 删除当前词
      3dw 删除3个单词
      dd 删除当前行
      5dd 删除5行 (当前行开始)
      :5, 10d 冒号模式,删除5~10行

      r 替换一个字符
      cw 替换一个单词
      cc 替换一行
      C 替换从光标到行尾

      yw 拷贝词
      yy 拷贝行 (Y) 5yy 拷贝5行
      p 粘贴
      :1,2co3 拷贝行1,行2到行3之后
      :4,5m6 移动行4,行5到行6之后 剪切

      :w 存盘 write (类似Windows中 ctrl + s)
      :w 新文件名 另存为新文件
      :wq 存盘退出 或 ZZ (shift + z + z) 或:x
      :q! 强制退出不存盘

    其它命令:
      ~ 大小写转换
      J 把当前行和下一行连起来
      u 撤销上一步 undo
      :set number 显示行号 :set nu
      :set nonumber 取消行号 :set nonu
      :21 光标跳到指定行
      21G 到21行 G表示文件为 1G第一行
      /字符串 从当前行往下查找
      ?字符串 从当前行往上查找
      n 继续向下查找
      N 反方向继续查找
      :r file2 在光标所在位置插入另一个文件 (合并)
      :1,$s/旧串/新串/g 替换全文
    说明:s表示替换 g表示全部替换 global
    将所有: 换成@
    :1,$s/:/@/g

    练习:将文本中所有home都替换成 192.168.0.2
      :1,$s/home/192.168.0.2/g

  4、head 和 tail
    查看文件的头几行: head -3 文件名 头3行
    查看文件的后几行: tail -5 文件名 后5行
    技巧:使用tail -f 文件名 动态刷新实时监控文件
      用途:常用于查看系统的日志文件;
        日志文件经常被更新,追加新的内容,需要监控。
    $ tail -f 1.txt
    $ ctrl + c 结束监控进程

    select * from emp
    where id=1;

    select 列名, 表达式, 函数, ... 列的投影
    from 表名, ...
    where 记录的匹配条件 行的选择

五、常用技巧
  1、过滤:grep 过滤出n行


  2、统计:wc 统计:行、单词、字符 的数量


  3、排序:sort


  4、管道: |
    管道符:用于连接两个命令,前一个命令的输出,作为后一个命令的输入。(前一个命令的输出,作为后一个命令传入的参数)
    例子1:将/etc/passwd的头10行,写入文件f2中
    $ head -10 /etc/passwd > f2

    例子2:将/etc/passwd的头10行排序后,写入文件f3中
    $ head -10 /etc/passwd | sort > f3

    例子3:将/etc/passwd排序后的头10行,写入文件f4中
    $ sort /etc/passwd | head -10 > f4

  5、常见用法
    1)管道more: 分屏显示
      对比:ls -l /etc
        ls -l /etc | more 空格 回车 q

    2)管道grep: 过滤
      对比:ls -l /etc
        ls -l /etc | grep ssh 找到含有ssh的行
      drwxr-xr-x 2 root root 4096 4月 25 11:20 ssh

      练习:查找出tom的账户信息
        cat /etc/passwd | grep tom
        tom:x:501:501::/home/tom:/bin/bash

      练习:找出girls组的所有用户的账户信息,按照用户名排序
        /etc/group 组 girls:x:502:
        /etc/passwd 用户

        cat /etc/passwd | grep 502 | sort

    3)管道wc:统计
      cat f1 | wc
      3 行 4 单词 18 字符

      练习:统计出girls组有多少账户
        cat /etc/passwd | grep 502 | wc 行数就是账户数

六、进程管理
  1、查看当前所有进程 ps -ef
    以全格式显示当前系统所有进程
    每一行就是一个进程的信息
      -e 所有进程
      -f 全格式

    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 09:07 ? 00:00:03 init

    Uid: 用户名 该进程由哪个用户发起的 (重要)
    Pid: 进程id 进程的唯一标识 (重要)
    PPid: 父进程id
    C: cpu占有率
    Stime: 开始的时间 (重要)
    TTY: 开始该进程的终端号
    Time: 运行时间
    CMD: 启动该进程的命令名 (重要)

    启动sleep进程: sleep 3000
    其它窗口:ps -ef | grep sleep
    alice 3421 3212 0 17:49 pts/0 00:00:00 sleep 3000
    进程id: 3421

  2、根据pid杀进程:kill 进程id
    前提:只有进程的发起者、root才可杀进程
    和权限有关
    $ kill 3421 没有权限
    $ su 密码:123456
    # kill 3421

  3、根据进程命令名批量杀进程:pkill 命令名
    # pkill sleep

    关机:halt halt: must be superuser.
    重启:reboot reboot: must be superuser.
    必须是root才有权限操作!

原文地址:https://www.cnblogs.com/KalosOwen/p/8987541.html