linux 笔记达内03

复习Linux命令:
1)等待:sleep 秒数     自动化脚本中作为步骤间隔时间
2)任务管理:
 查看系统所有进程:ps -ef
 结束当前进程:ctrl+c
 挂起当前进程:ctrl+z
 查看后台任务:jobs
 前置:fg 任务号
3)命令帮助手册:man  命令名    
             回车-跳行  空格-翻页   q-退出
4)查看目录下内容:ls
 查看目录下内容的详细属性:ls -l 
  类型、权限、属主、属组、大小、最后一次修改时间
  是否隐藏
 ls -al   ls -F   ls -R   ls -t   ls -ld 查看当前目录属性
5)清屏:clear
6)查看磁盘空间分布:fdisk -l    df -k    mount
7)查看当前shell:  ps     查看进程
     ps -ef  查看所有进程
8)shell切换:bash  csh  sh  ksh ...   启动子进程
     exit 退出子进程
9)输出重定向: >   覆盖
                   >>  追加
     将前面命令的结果 输出 到某文件中
     本质:对文件的写操作  写出
10)查看文件内容:cat  文件名 ...
     本质:对文件的读操作  读入内存
11)查看系统环境变量值:echo $系统变量名
          echo ~     echo Hello
          echo $PATH     命令的搜索路径    
12)新建目录:mkdir  目录路径名
13)新建文件:touch  文件路径名
14)拷贝文件:cp  源文件路径  新路径
15)移动/重命名:mv  源文件路径  新路径
16)删除文件:rm  文件名      存在交互  y   n
                 rm -f  文件名   关闭交互
17)删除空目录:rmdir  目录名
18)删除非空目录:rm -r  目录名    存在交互  y   n
                      rm -rf  目录名   关闭交互
                     
注意:如果是root用户,在/目录下,千万不能:
       rm  *   删除所有内容
建议:平时少用root登录,root拥有最高权限,为了防止误操作。

用户  使用账户的人          允许很多人 同时使用系统
账户  root  是账号,是数据  使用相同或不同账号登录系统
       用户名、密码

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

思路:系统区分不同用户、不同组也是为了管理不同权限
    管理员可以授予、回收、修改不同资源的不同权限

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

密码:password
简写为:passwd

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

     (编辑纯文本:包括各种源程序、配置文件)
          .py   .java   .c   .json   .sql    .html

          : (shift ;)         i
    底行模式 <-- 命令模式 --> 输入模式
     wq回车                  <--Esc
          
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) 写入磁盘 并 退出vi
7)补充:如果保存时出现问题,可以不存盘强制退出
    Esc    冒号模式 shift ;     q! 回车
   或ctrl+c 结束vi进程

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
   700 
 rwx------   出现的位置固定 rwx 缺失使用-代替
 可读r     r--
 可写w    -w-
 可执行x  --x

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

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

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

 - rwx rw- r--     764

二进制之父:莱布尼茨    伏羲
0
1

00
01
10
11

二进制 八进制数
权
421  权限的数字表达法:用1位八进制数表示一种身份的三种权限
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
                -> 十六进制:0~9 A~F    61    让程序员更方便表示二进制
                             0110 0001
                               6   1
                -> 八进制:0~7            141
                            01 100 001
                             1   4   1

128 64 32 16 8 4 2 1
11101001

233 = 128+64+32+8+1
将十进制数233 -> 二进制数:11101001
                     十六进制:1110 1001      E9
                                   E     9
                     八进制:11 101 001        351
                                3   5   1

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

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  ...
           u    g    o
举例:  rw- r-- r--
# 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
$ id        是alice
$ cd       在主目录 /root/alice
$ 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

说明:如果alice不小心将自己主目录权限改为666或644,会让自己缺少目录的x权限
 755  rwx r-x r-x
 644  rw- r-- r--    自己是无法进入自己主目录中   cd回车 会失败
如何解决?
 使用root身份将alice主目录的权限改为755
 $ su       输入密码 
 # chmod  755  /home/alice

准备一个可执行文件: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文件,针对所有用户都可执行

比如:tomcat的bin目录下,有大量.sh文件,
    包括启动服务器startup.sh   关闭服务器shutdown.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 结束监控进程

面试题:需要跟踪、监控Linux某日志文件xxx.log
  tail -f xxx.log

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  用户

先根据组名找到gid:
 cat /etc/group | grep girls

再根据gid找到与之有关的用户信息:
 cat /etc/passwd | grep 502 | sort

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

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

小结:|常用法
 |more  分页
 |grep  过滤
 |sort  排序
 |wc   统计

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

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0    0  19:41   ?        00:00:03  init
root         2     1    0  19:41   ?        00:00:00  [keventd]
root         3     1    0  19:41   ?        00:00:00  [kapmd]

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

uid       Stime      CMD                                                Pid
 __用户在__时刻使用__命令启动了一个进程,被系统分配进程号pid为__

补充:top   查看系统资源使用情况,包括CPU、进程、内存Memory等
     特点:动态实时刷新   ctrl + c结束进程

启动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

说明:某些时候kill 进程id 无法直接关闭进程,可能是信号丢失引起;
      可以使用kill -9 进程id    -9选项   百分百杀进程

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

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

作业:盘点重要的、常用的十类命令。
  最实用的命令 id  pwd  ls -l、 任务管理、进程管理、磁盘文件管理、网络管理、特殊技巧;
  建议分类记忆,后续需要时查阅相关文档、手册,进行适当的扩展。
原文地址:https://www.cnblogs.com/guog1/p/14155311.html