Linux学习(4)——系统用户&磁盘&vim

linux系统用户以及用户组管理

转载博客:http://www.92csz.com/study/linux/7.htm

登录文件

passwd和shadow这两个文件是linux系统中最重要的文件之一。如果文件出错,则无法正常登陆。

/etc/passwd

image.png

/etc/passwd由”:”分割成7个字段,每个字段的具体含义如下:

1) 用户名
2) 存放账号的口令。之所以有是’x’,早期的unix系统口令是存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,在这里只用一个’x’代替。
3) 表示用户标识号,也称为uid。
4) 表示组标识号,也叫作gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本上类似。
5) 注释说明,通常记录该用户的一些属性,例如姓名、电话等等。
6) 用户的home目录。如root的home目录为/root,普通用户的为/home/username,该字段可自定义。比如我们建立一个test1用户,想让其home目录在/data目录下,只需修改/etc/passwd文件中test1该字段为/data。
7) shell。用户登录后启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh, tcsh, bash等,而Ubuntu的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash。

/etc/shadow

image.png

与/etc/passwd类似,使用”;”分割为9个字段。此处大概记记即可。

1) 用户名
2) 用户密码,不过已经过加密。为了安全,该文件属性设置为600,只允许root读写。
3) 上次更改密码的日期。这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是365*(2012-1970)+1=15331。
4) 要过多少天才可以更改密码,默认是0,即不限制。
5) 密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。
6) 密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。
7) 账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。
8) 账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。
9) 作为保留用的,没有什么意义。

新增/删除用户和用户组

  1. 新增一个组 groupadd [-g gid] groupname,-g选项可以自定义gid。

  2. 删除组groupdel groupname

  3. 增加用户 useradd [-u uid] [-g gid] [-d HOME] [-M] [-s] username,其中-u自定义uid,-g使其属于已经存在的某个GID,-d自定义用户家目录,-M不建立家目录,-s自定义shell

image.png
创建test11时,加了-M选项,在/etc/passwd文件中home目录字段仍然有/home/test11,不过当ls查看该目录时,会提示该目录不存在。image.png

  1. 删除用户 userdel [-r] username,-r选项的作用是删除用户时连同家目录一起删除。

创建/修改用户的密码

格式:passwd [username]
创建账户后默认是没有设置密码,但该账户同样无法登录系统,因此必须设置密码才可登录。
image.png

用户身份切换

切换用户,命令:su [-] username,不加username为切换至root用户。切换至root用户也可使用sudo su。

Linux磁盘管理

查看磁盘或目录的容量

df查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的。Filesystem表示扇区,Mounted on表示该分区所挂载的地方。其他选项则是修改blocks单位,如-m。
image.png

du用来查看某个目录所占空间大小,默认k为单位。-a选项列出全部文件与目录大小,如果不加任何选项和参数只列出目录大小;-b以bytes为单位;-c为加总;等等。
image.png

磁盘的分区和格式化

由于我并不考虑系统运维这方面,此块的学习暂时搁置。(其实是我懒,找时间会认真看的。)

文本编辑工具vim

心心念念,终于看到我最想学的内容了,就是vim工具。早期的Unix都是使用的vi作为系统默认的编辑器的,后来vim逐渐流行起来。

博客作者认为,vi和vim最大的区别就是编辑一个文本时,vi不会显示颜色,而vim会显示颜色,显示颜色更易于用户进行编辑,其他功能基本一致。所以在linux系统下,使用vi还是vim完全取决你的个人爱好而已。我只学习vim。

简单使用

vim有三种模式:一般模式、编辑模式、命令模式。

  • 一般模式:当你vim filename编辑一个文件时,进入该文件则为一般模式。在这个模式下,可以上下移动光标、删除某个字符;删除某行;复制、粘贴一行或多行。
  • 编辑模式:一般模式下,我们不可以修改某个字符,因此只能进入编辑模式。
  • 命令模式:在一般模式下,输入”:”或”/“即可进入命令模式。

输入vim ex.txt后,进入一般模式。输入”i”,进入编辑模式。
image.png

image.png

编辑完内容后,按ESC退出编辑模式,进入一般模式。此时左下方”insert”字样消失,按”:”进入命令模式。输入wq保存。
image.png

查看我们的内容:
image.png

键盘操作

下面仅粘贴出常用操作。必须经常使用才能记得牢,现在我也只会特别基本的,下面很多都记不清楚。还是用得太少了。

一般模式下还原操作:uu

一般模式下移动光标

(1)方向键移动
(2)ctrl+f屏幕向下移动一页;ctrl+b向上移动一页
(3)0或者shift+6移动到本行行首
(4)shift+4移动到本行行尾
(5)G光标移动到文本最末行
(6)nG(n为数字)移动到第n行
(7)gg移动到该文本的首行

一般模式下查找与替换

(1)/word: 在光标之后查找字符串名为word的字符串,按”n”继续往后搜。
(2)?word: 在光标之前查找字符串名为word的字符串,按”n”继续往前搜。
(3):n1,n2s/word1/word2: 在n1和n2行之间查找word1字符串并替换为word2.
(4):1,$s/word1/word2: 所有行查找并替换。

一般模式下删除、复制、粘贴

(1)x,X分别为向后、向前删除一个字符
(2)dd: 删除光标所在行
(3)ndd(n为数字): 删除光标所在向下n行
(4)yy: 复制光标所在行
(5)nyy(n为数字): 复制从光标所在向下n行
(6)p,P: p复制的数据从光标下一行粘贴,P则从光标上一行粘贴

进入编辑模式

i: 在当前字符前插入字符
I: 在当前行行首插入字符
a: 在当前字符后插入字符
A: 在当前行行末插入字符
o: 在当前行下插入新的一行
O: 在当前行上插入新的一行

命令模式

:w 将编辑过的文本保存
:w! 若文本属性为只读时,强制保存
:q 退出
:q! 不管编辑或未编辑都不保存退出
:wq 保存并退出
:set nu 在每行的行首显示行号
:set nonu 取消行号

至此,vim学习操作基本结束,更具体的指令操作可看http://www.92csz.com/study/linux/9.htm。

下面贴一下博客作者给出的小作业,以及我对应的指令。由于没有iptables这个文件,因此我自己随便找了个文件进行复制。

  1. 请把/etc/init.d/iptables复制到/root/目录下,并重命名为test.txt: cp /sublime_text/sublime.py test.txt

  2. 用vim打开test.txt并设置行号 vim test.txt / set nu

  3. 分别向下、向右、向左、向右移动5个字符 直接用方向键

  4. 分别向下、向上翻两页: 向下(ctrl+f) 向上(ctrl+b)

  5. 把光标移动到第49行: 49G

  6. 让光标移动到行末,再移动到行首:$ / 0

  7. 移动到test.txt文件的最后一行:G

  8. 移动到文件的首行:gg

  9. 搜索文件中出现的p并数一下一共出现多少个: /p(不数了,好多)

  10. 把从第一行到第三行出现的im 替换成ims :1,3s/im/ims/g

  11. 还原上一步操作: u

  12. 把整个文件中所有的iptables替换成iptable :1,$s/im/ims/g

  13. 把光标移动到50行,删除字符”$”(无)

  14. 还原上一步操作

  15. 删除第50行:光标移动到50行(50G),再删除(dd)

  16. 还原上一步操作 (u)

  17. 删除从37行到42行的所有内容(移动到37行,再使用5dd)

  18. 还原上一步操作 (u)

  19. 复制48行并粘贴到52行下面

  20. 还原上一步操作(按两次u)

  21. 复制从37行到42行的内容并粘贴到44行上面

  22. 还原上一步操作(按两次u)

  23. 把37行到42行的内容移动到19行下面

  24. 还原上一步操作(按两次u)

  25. 光标移动到首行,把/bin/sh 改成 /bin/bash

  26. 在第一行下面插入新的一行,并输入”# Hello!” (光标移动到第一行,再o来建新行)

  27. 保存文档并退出 (wq)