鸟哥的Linux基础篇整理---5

来源:互联网 发布:multisim连线优化 编辑:程序博客网 时间:2024/05/21 01:54
1、账号信息相关的
     账号也就是用户相关信息的两个文档:
             1)、/etc/passwd用户的基本信息和加密的密码。
             2)、然后对应到/etc/shadow里面的具体的权限和密码(可以本地看看密码有没有 限制)。
      id 用户名 这个命令。显示的当前用户的信息,很多的
  1. cnbjlx24729:~/Desktop$ id xp022430
  2. uid=2060587593(xp022430) gid=2060452353(domain_users) groups=2060452353(domain_users),...
  3. cnbjlx24729:~/Desktop$
       不存在的时候:
  1. xp022430@cnbjlx24729:~/Desktop$ id joey
  2. id: joey: no such user
      群组信息相关的文件:
              1)、/etc/group  
              2)、/etc/gshadow
     /etc/group基本格式如下:
  1. owner:x:500:xp022430
  2. clamav:x:127:
  3. davfs2:x:128:
  4. vboxusers:x:129:xp022430
      格式(组名: 群组密码:GID:此群组支持的账号名称)
      群组支持的账号可以支持多个用逗号隔开。
      如:vboxusers:x:129:xp022430,joey  这样当前vboxusers用户就会有xp022430,joey这两个群组的功能。
      注意:也可以看到有的后面没有,是因为默认包含初始群组了!
      有效群组(effective group)与初始群组(initial group):
      初始群组:当用户一登入系统,立刻就拥有这个群组的相关权限。在/etc/passwd里面对应的用户的第四栏的
                        GID就是初始群组 (initial group)
      groups 命令查看当前用户所在的群组。
  1. cnbjlx24729:~/Desktop$ groups
  2. domain_users adm dialout cdrom sudo audio video ...
        第一个输出的群组即为有效群组 (effective group) 。此时你新建一个文件它的群组默认是有效群组
  1. cnbjlx24729:~/Desktop$ touch Test.txt
  2. cnbjlx24729:~/Desktop$ ls -l
  3. ......
  4. -rw-r--r-- 1 xp022430 domain_users 0 Jun 7 10:35 Test.txt
         切换有效群组命令:newgrp。成功前提:你想要切换的群组必须是你已经有支持的群组
  1. zhaoyuan@Joey:~$ groups
  2. zhaoyuan joey
  3. zhaoyuan@Joey:~$ newgrp joey
  4. zhaoyuan@Joey:~$ ls -l
  5. total 0
  6. -rw-rw-r-- 1 zhaoyuan zhaoyuan 0 6 7 21:05 test.txt
  7. zhaoyuan@Joey:~$ touch test2.txt
  8. zhaoyuan@Joey:~$ ls -l
  9. total 0
  10. -rw-rw-r-- 1 zhaoyuan joey 0 6 7 21:06 test2.txt
  11. -rw-rw-r-- 1 zhaoyuan zhaoyuan 0 6 7 21:05 test.txt
  12. zhaoyuan@Joey:~$ newgrp hahah
  13. newgrp: group 'hahah' does not exist
          可以看到修改有效群组后,新建文件所属群组就变了,用命令查看:第一个变成了你切换的那个。
  1. zhaoyuan@Joey:~$ groups
  2. joey zhaoyuan

2、账号管理。
添加账户的命令:useradd 参数 账户名 (需要root权限)
       常用参数:
       选项与参数:
           -u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
           -g :后面接的那个组名就是我们上面提到的 initial group 啦~该群组的 GID 会被放置到 /etc/passwd 的第
                  四个字段内。
           -G:后面接的组名则是这个账号还可以加入的群组。这个选项与参数会修改 /etc/group 内的相关资料喔!
           -M :强制!不要建立用户家目录!(系统账号默认值)
           -m :强制!要建立用户家目录!(一般账号默认值)
           -s :后面接一个 shell ,若没有指定则预设是 /bin/bash 的 (建立不能登录的就可以-s /sbin/nologin)
               ......
        一般都是用默认的,具体使用的时候也可以--help自己查看。
  1. root@Joey:~# useradd zhangsan
  2. root@Joey:~# cat /etc/passwd | grep zhangsan
  3. zhangsan:x:1003:1003::/home/zhangsan:
  1. root@Joey:~# useradd -m lisi
          默认的没有建立home目录如下:
  1. root@Joey:/home# ls -l
  2. total 12
  3. drwxr-xr-x 15 joey joey 4096 4 6 23:56 joey
  4. drwxr-xr-x 2 lisi lisi 4096 6 7 21:15 lisi
    整体执行步骤:
       1)、在 /etc/passwd 里面建立一行与账号相关的数据,包括建立 UID/GID/家目录等;
       2)、在 /etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码;(注意没有密码)
       3)、在 /etc/group 里面加入一个与账号名称一模一样的组名;
       4)、在 /home 底下建立一个与账号同名的目录作为用户家目录,且权限为 700
    由于此时还没有密码,该账号是暂时被封锁的,我们需调用:passwd 账号来完整完整的输入。
    格式: passwd 参数 账号名称  (也需要root)
    选项与参数:
        --stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
        -l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
        -u :与 -l 相对,是 Unlock 的意思!
       -S :列出密码相关参数,亦即 shadow 文件内的大部分信息。
       -n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
       -x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
        -w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
        -i :后面接『日期』,shadow 的第 7 字段,密码失效日期
   注意:
       1)、需要root权限来设定。
       2)、直接输入passwd不加账号的时候,修改的是当前账号的密码!!!
  1. cnbjlx24729:/$ passwd zhaoyuan
  2. passwd: You may not view or modify password information for zhaoyuan.
  1. root@Joey:~# passwd lisi
  2. Enter new UNIX password:
  3. Retype new UNIX password:
  4. passwd: password updated successfully
  5. root@Joey:~
          useradd -D :查看useradd 的默认值
  1. root@Joey:~# useradd -D
  2. GROUP=100
  3. HOME=/home
  4. INACTIVE=-1
  5. EXPIRE=
  6. SHELL=/bin/sh
  7. SKEL=/etc/skel
  8. CREATE_MAIL_SPOOL=no
  9. root@Joey:~#
         对应的文件为:/etc/default/useradd.

usermod命令:修改已添加的用户的一些信息,对应于useradd
       格式:usermod [-cdegGlsuLU] username
       参数:...

userdel命令:在删除用户的相关数据. 都是需要root权限。
       格式:userdel [-r] username
       选项与参数:
           -r:连同用户的家目录也一起删除。
你也可以:手动的将 /etc/passwd 与/etc/shadow 里头的该账号取消即可。

命令:find / -user username 查出整个系统内属于 username 的文件。
  1. root@Joey:~# find / -user lisi
  2. /home/lisi
  3. /home/lisi/examples.desktop
  4. /home/lisi/.bashrc
  5. /home/lisi/.profile
  6. /home/lisi/.bash_logout
  7. find: `/proc/3817/task/3817/fd/5': No such file or directory
  8. find: `/proc/3817/task/3817/fdinfo/5': No such file or directory
  9. find: `/proc/3817/fd/5': No such file or directory
  10. find: `/proc/3817/fdinfo/5': No such file or directory
  11. find: `/run/user/1000/gvfs': Permission denied
  12. root@Joey:~#

id命令:查询其它用户或自己的相关 UID/GID 等等的信息
       格式:id [username] 不加name的时候就是查询自己的
       不加参数所有的信息就都列出来了。
  1. root@Joey:~# id lisi
  2. uid=1004(lisi) gid=1004(lisi) groups=1004(lisi)

chsh命令:change shell 的简写,就是改变shell了
       格式:chsh [-ls]
       选项与参数:
       -l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
       -s :设定修改自己的 Shell。

groupadd命令:添加一个群组,对应于useradd
       格式:groupadd [-g gid] [-r] 组名
       选项与参数:
           -g :后面接某个特定的 GID ,用来直接给予某个 GID ~
           -r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
  1. root@Joey:~# groupadd lisigrp
  2. root@Joey:~# cat /etc/group | grep lisi
  3. lisi:x:1004:
  4. lisigrp:x:1005:

groupmod命令:修改已添加的某个群组的信息,对应于groupadd
       格式:groupmod [-g gid] [-n group_name] 群组名
       选项与参数:
           -g :修改既有的 GID 数字;
           -n :修改既有的组名

groupdel命令:删除某个群组。和userdel类似
   格式:groupdel [groupname]
以上group相关命令都暂时了解记录以备以后查看,未实际操作。

3、身份切换
su命令切换身份。
格式:  su [-lm] [-c 指令] [username]
选项与参数:
      -:单纯使用 - 如『 su - 』代表使用 login-shell 的变量文件读取方式来登入系统;若使用者名称没有加上去,则
          代表切换为 root 的身份。
       -l :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。
  1. lisi@Joey:/root$ echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  3. lisi@Joey:/root$ su
  4. Password:
  5. root@Joey:~# echo $PATH
  6. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  7. root@Joey:~# su lisi
  8. lisi@Joey:/root$ su -
  9. Password: 
  10. root@Joey:~# echo $PATH
  11. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
       可以看到su切换和su - 切换的时候逇shell环境是不同的。反正用su - 比较好。注意:su切换的时候需要知
道要切换的用户的密码,就是比如你要切换到root,你就需要知道root的密码!
sudo命令:切换身份。
格式:sudo [-b] [-u 新使用者账号]
选项与参数:
    -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
    -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。
具体步骤:
       1)、 当用户执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权限;
       2)、若使用者具有可执行 sudo 的权限后,便让使用者『输入用户自己的密码』来确认;
       3)、若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
       4)、若欲切换的身份与执行者身份相同,那也不需要输入密码。
注意sudo 的执行则仅需要自己的密码即可!但并非所有人都能够执行 sudo , 而是仅有规范到/etc/sudoers 内的
用户才能够执行 sudo 这个指令。visudo命令好像可以改!暂时不试这个!
  1. lisi@Joey:/root$ sudo zhangsan
  2. [sudo] password for lisi:
  3. lisi is not in the sudoers file. This incident will be reported.
  4. lisi@Joey:/root$

4、无法登陆的理解:
     无法登入指的仅是:这个使用者无法使用 bash 或其他 shell 来登入系统而已,并不是说这个账号就无法使用其
他的系统资源喔! 举例来说,各个系统账号,打印作业由 lp 这个账号在管理, WWW 服务由 apache 这个账号在管
理, 他们都可以进行系统程序的工作,但是就是无法登入主机取得互动的 shell而已啦。此时shell:/sbin/nologin

5、w 或 who命令查询当前已登录的用户
  1. cnbjlx24729:~/Desktop$ w
  2. 15:26:38 up 6 days, 6:21, 4 users, load average: 0.48, 0.56, 0.56
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. xp022430 :0 :0 01Jun17 ?xdm? 31:34m 46:42 init --user
  5. xp022430 pts/1 :0 01Jun17 14:43 3.64s 3.64s bash
  6. xp022430 pts/4 :0 Thu16 1.00s 2.08s 0.00s w
  7. xp022430 pts/7 :0 Mon09 22:49m 0.22s 5:46 gnome-terminal
  8. cnbjlx24729:~/Desktop$ who
  9. xp022430 :0 2017-06-01 09:06 (:0)
  10. xp022430 pts/1 2017-06-01 09:46 (:0)
  11. xp022430 pts/4 2017-06-01 16:59 (:0)
  12. xp022430 pts/7 2017-06-05 09:13 (:0)
  13. xp022430@cnbjlx24729:~/Desktop$
lastlog:查看所有用户最后一次登录的时间。
  1. lisi@Joey:/root$ lastlog
  2. Username Port From Latest
  3. root **Never logged in**
  4. ...
  5. hplip **Never logged in**
  6. joey tty1 4 6 00:03:00 +0800 2017
  7. zhaoyuan **Never logged in**
  8. liuyu **Never logged in**
  9. zhangsan **Never logged in**
  10. lisi **Never logged in**

6、两个登录的用户之间交谈。
       格式:write 使用者账号 [用户所在终端接口]
       按空格以后[crtl]-d结束输入。
       在交谈之前,可以通过前面的who命令查看都是谁在线!
  1. xp022430@cnbjlx24729:~/Desktop$ who
  2. xp022430 :0 2017-06-01 09:06 (:0)
  3. xp022430 pts/1 2017-06-01 09:46 (:0)
  4. xp022430 pts/4 2017-06-01 16:59 (:0)
  5. xp022430 pts/7 2017-06-05 09:13 (:0)
  6. xp022430@cnbjlx24729:~/Desktop$ write xp022430 pts/1
  7. Hello! linux
  8. efo
  9. ^Cxp022430@cnbjlx24729:~/Desktop$ write xp022430 pts/1
  10. Hello !Linux!
         在另一个shell窗口我们可以看到:
  1. essage from xp022430@cnbjlx24729 on pts/4 at 15:29 ...
  2. Hello! linux
  3. efo
  4. EOF
  5. Message from xp022430@cnbjlx24729 on pts/4 at 15:30 ...
  6. Hello !Linux!
  7. EOF
      会立刻作出信息的响应,这就有可能打断我正在进行的工作。就用到了下面的命令。
格式:mesg [y/n]
       不加参数时查询当前用户是否接受mesg,y代表接受,n代表不接受。
       带参数时表示重新设定
  1. xp022430@cnbjlx24729:~/source/projects/$ mesg
  2. is y
  3. xp022430@cnbjlx24729:~/source/projects/$ mesg n
  4. xp022430@cnbjlx24729:~/source/projects/$ mesg
  5. is n
       已经设定为n此时再去别的窗口向这个发送消息就会出现如下:
  1. xp022430@cnbjlx24729:~/Desktop$ write xp022430 pts/1
  2. write: xp022430 has messages disabled on pts/1
   但是如果是root用户传过来的消息,是没办法通过命令结束的!
wall命令:wall 直接执行,然后输入即可!会向所有用户发送广播!包括自己.
  1. xp022430@cnbjlx24729:~/Desktop$ wall
  2. nimenhao
  3. Broadcast Message from xp022430@cnbjlx24
  4. (/dev/pts/4) at 15:42 ...
  5. nimenhao
  6. xp022430@cnbjlx24729:~/Desktop$

7、磁盘配额quota.
      quota 就是在回报管理员磁盘使用率以及让管理员管理磁盘使用情况的一个工具。
       作用:
       针对 Linux 系统主机上
           1)、限制某一群组所能使用的最大磁盘配额 (使用群组限制):
           2)、限制某一用户的最大磁盘配额 (使用用户限制):
           3)、限制某一目录 (directory, project) 的最大磁盘配额:
       针对网络服务上
           1)、针对 WWW server ,例如:每个人的网页空间的容量限制!
           2)、针对 mail server,例如:每个人的邮件空间限制。
           3)、file server,例如:每个人最大的可用网络硬盘空间
此处暂作了解,具体用到再查。

8、程序和进程。
     程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的
                                  型态存在;
     进程 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中, 操
                                 作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序
     子进程:就是由当前进程创建的一个进程,成为这个进程的子进程。
指令:ps -l  观察进程相关的输出信息。
  1. xp022430@cnbjlx24729:~$ ps -l
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  3. 0 S 2060587593 12019 5955 0 80 0 - 6233 wait pts/4 00:00:00 bash
  4. 0 S 2060587593 25151 12019 0 80 0 - 6217 wait pts/4 00:00:00 bash
  5. 0 R 2060587593 25175 25151 0 80 0 - 2927 - pts/4 00:00:00 ps
         PPID就是parent uid,父类的uid。此时有时候你杀死个进程它又起来了,那就找到它的父进程看看要不要
杀掉。
父进程产生子进程的概述:
        在 Linux 的进程呼叫通常称为 fork-and-exec 的流程 (注 1)!进程都会藉由父进程以复制 (fork) 的方式产生一
个一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进
程的存在。
         常驻程序就会被我们称为:服务 (daemon) 守护进程,注意:一般daemon 类型的程序都会加上 d 在文件名
后面。
      Linux在死机的时候,以随意的再按 [Alt]+[F1].....[F7] 来切换到其他的终端机界面。来进入到其它终端。

9、在一个bash窗口中同时执行多个任务:
执行的时候分为前台和后台执行。
限制:
         a、这些工作所触发的进程必须来自于你 shell 的子进程(只管理自己的 bash);
         b、前台:你可以控制与下达指令的这个环境称为前景的工作 (foreground);
         c、后台:可以自行运作的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作;
         d、后台中执行的进程不能等待 terminal/shell 的输入(input)
1)、直接将指令丢到后台中执行的命令: &
        如:
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l &
  2. [1] 29704
         执行完后自动显示出来,此时 bash 会给予这个指令一个工作号码(job number),就是那个[1] ,至于后面那个29704则是该指令所触发的PID。当执行完的时候按下按下出现类似:
  1. [1]+ Done ls --color=auto -l (wd: ~/Desktop)
        代表工作做完了。
        为了避免显示混乱,一般使用数据流重导向,把背景显示的信息放到别的地方如文件当中。
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l > ~/Desktop/tttt.txt &
  2. [1] 30414
  3. xp022430@cnbjlx24729:~/Desktop$

2)、将当前的工作丢到背景中暂停:[ctrl]-z
  1. xp022430@cnbjlx24729:~/Desktop$ vim tttt.txt
  2. [1]+ Stopped vim tttt.txt
       此时这个vim的编辑工作处于暂停状态那么怎么恢复那?接着看

3)、观察目前的后台工作状态: jobs
格式:jobs [-lrs]选项与参数:
        -l :除了列出 job number 与指令串之外,同时列出 PID 的号码;
        -r :仅列出正在背景 run 的工作;
        -s :仅列出正在背景当中暂停 (stop) 的工作。
  1. xp022430@cnbjlx24729:~/Desktop$ jobs -l
  2. [1]+ 30883 Stopped vim tttt.txt

4)、将后台工作拿到前台来处理:fg
格式:fg %jobnumber
选项与参数:
     %jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!
如接上面:xp022430@cnbjlx24729:~/Desktop$ fg 1 会自动进入vim编辑界面,继续工作。

5)、让工作在后台下的状态变成运作中: bg
用法和fg基本相同 bg %jobnumber 。这是让它继续工作,不会拿到前台了!

6)、杀死后台当中的工作: kill
格式: kill -signal %jobnumber
格式: kill -l
选项与参数:
    -l:这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
    signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知:
        -1 :重新读取一次参数的配置文件 (类似 reload);
        -2 :代表与由键盘输入 [ctrl]-c 同样的动作;
        -9 :立刻强制删除一个工作;
        -15:以正常的进程方式终止一项工作。与 -9 是不一样的。
  1. xp022430@cnbjlx24729:~/Desktop$ kill -9 1
  2. bash: kill: (1) - Operation not permitted