linux常用命令小结(二)

来源:互联网 发布:arttemplate 遍历数组 编辑:程序博客网 时间:2024/06/05 14:29

       接着上期的命令往下讲。

       001.首先是一个文件,和用户密切相关的文件,叫做passwd。

       我们来看看它的位置,就在/etc/下。

      

cd /etc     //进入到/etc目录ls          //发现/etc下文件和目录过多,不好搜寻,用下面的管道命令来解决:ls -l | grep passwd

      可以得到如下结果:

[root@host etc]# ls -l | grep passwd-rw-r--r--.  1 root   root       1754 Nov  9 22:47 passwd-rw-r--r--.  1 root   root       1713 Nov  9 22:14 passwd-

      第一个文件 passwd就是我们要找到文件,查看一下它的内容:

[root@host etc]# cat passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinusbmuxd:x:113:113:usbmuxd user:/:/sbin/nologinrpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologinvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinrtkit:x:499:497:RealtimeKit:/proc:/sbin/nologinavahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologinabrt:x:173:173::/etc/abrt:/sbin/nologinsaslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinapache:x:48:48:Apache:/var/www:/sbin/nologinhaldaemon:x:68:68:HAL daemon:/:/sbin/nologingdm:x:42:42::/var/lib/gdm:/sbin/nologinpulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinoprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologinvboxadd:x:496:1::/var/run/vboxadd:/bin/falseoracle:x:500:501::/home/oracle:/bin/bash

     从上面可以看出,/etc/passwd中的一行记录对应一个用户的信息,每一行均是7个字段,字段之间以冒号分隔,其格式和含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell

      以最后一行oracle:x:500:501::/home/oracle:/bin/bash为例:

      1.1  "用户名"是代表用户账户的字符串,此处用户名为oracle。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名不能有冒号,因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)开头。


      1.2   “口令”,即登录密码。一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”,此处就是用”*“表示。

     下面是/etc/shadow的内容,已经经过加密:

[root@host ~]# cat /etc/shadowroot:$6$fdfQ2hf8KWnU8Vtw$pVBYbs2qcxXocDEUPwc66iVhcxufuHAV32gBfheJLzGbswmtKrx8gEe7LTyfgAlhDzuIC7Hi2IrH1dQXmEYnW/:16748:0:99999:7:::bin:*:15980:0:99999:7:::daemon:*:15980:0:99999:7:::adm:*:15980:0:99999:7:::lp:*:15980:0:99999:7:::sync:*:15980:0:99999:7:::shutdown:*:15980:0:99999:7:::halt:*:15980:0:99999:7:::mail:*:15980:0:99999:7:::uucp:*:15980:0:99999:7:::operator:*:15980:0:99999:7:::games:*:15980:0:99999:7:::gopher:*:15980:0:99999:7:::ftp:*:15980:0:99999:7:::nobody:*:15980:0:99999:7:::dbus:!!:16748::::::usbmuxd:!!:16748::::::rpc:!!:16748:0:99999:7:::vcsa:!!:16748::::::rtkit:!!:16748::::::avahi-autoipd:!!:16748::::::abrt:!!:16748::::::saslauth:!!:16748::::::postfix:!!:16748::::::rpcuser:!!:16748::::::nfsnobody:!!:16748::::::ntp:!!:16748::::::apache:!!:16748::::::haldaemon:!!:16748::::::gdm:!!:16748::::::pulse:!!:16748::::::sshd:!!:16748::::::tcpdump:!!:16748::::::oprofile:!!:16748::::::vboxadd:!!:16748::::::oracle:$6$T6D/0GSx$EQmfy.97AGKQ2Gu.l0DlIXuM2am9wx.S/dAL78OSZ4QU33DCwZVTpE1e4Nw4uZ.9ABOlmRBNvgPDnSFd3ZfWi1:16748:0:99999:7:::

     1.3  “用户标识号”是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
      通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500,此处的oracle用户用户标识号就是500,即oracle是第一个普通用户。
   

     1.4  “组标识号”字段记录的是用户所属的用户组,此处oracle用户的组号是501。它对应着/etc/group文件中的一条记录:


[oracle@host dbs]$ cat /etc/grouproot:x:0:bin:x:1:bin,daemondaemon:x:2:bin,daemonsys:x:3:bin,admadm:x:4:adm,daemontty:x:5:disk:x:6:lp:x:7:daemonmem:x:8:kmem:x:9:wheel:x:10:mail:x:12:mail,postfixuucp:x:14:man:x:15:games:x:20:gopher:x:30:video:x:39:dip:x:40:ftp:x:50:lock:x:54:audio:x:63:nobody:x:99:users:x:100:dbus:x:81:usbmuxd:x:113:utmp:x:22:utempter:x:35:rpc:x:32:desktop_admin_r:x:499:desktop_user_r:x:498:floppy:x:19:vcsa:x:69:rtkit:x:497:avahi-autoipd:x:170:abrt:x:173:cdrom:x:11:tape:x:33:dialout:x:18:saslauth:x:76:postdrop:x:90:postfix:x:89:wbpriv:x:88:rpcuser:x:29:nfsnobody:x:65534:ntp:x:38:cgred:x:496:apache:x:48:haldaemon:x:68:haldaemongdm:x:42:pulse:x:495:pulse-access:x:494:stapusr:x:156:stapsys:x:157:stapdev:x:158:fuse:x:493:sshd:x:74:tcpdump:x:72:oprofile:x:16:slocate:x:21:vboxsf:x:492:dba:x:500:oracleoinstall:x:501:

      /etc/group文件格式是:  组名:口令:组标识号:组内用户列表,此处可知oracle用户属于dba组,口令在此处仍用特殊符号x替代,oracle的组标识号是500,dba组目前只有oracle一个用户,那下面的oinstall组又是怎么回事呢?oinstall这一行表明:oinstall组的组号是501,同时,本人还将其设置为oracle用户的附属组。


     1.5  “注释性描述”字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出,在上面的/etc/passwd中,该项若没有记录是直接跳过的,只是用两个冒号标识一下。


     1.6  “主目录”,也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
    


      1.7  "登录shell"。用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh,此处的oracle。
      用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

      系统中有一类用户称为伪用户(psuedousers),这些用户在Linux /etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。常见的伪用户如下所示。
伪用户含义            拥有的帐户文件
bin                      拥有可执行的用户命令文件
sys                     拥有系统文件
adm                    拥有帐户文件
uucp                   UUCP使用
lp                        lp或lpd子系统使用
nobody               NFS使用

      除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit,cron,mail,usenet等,它们也都各自为相关的进程和文件所需要。
      由于Linux /etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。只有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。


      以上理论性内容参考自:http://os.51cto.com/art/201003/187533.htm


      2.接下来进入今天的主题,管道命令。在1中,有一条这样的命令:

     通过这条命令我们轻易地找到了/etc中的passwd文件。这条命令中的 ”|“就是管道,它的含义是将位于它前面命令的屏幕输出结果作为后面命令的操作对象(输入)。上面这条命令的含义就是将/etc下的所有文件和目录的输出作为后面的grep命令的输入,grep passwd意为在文件中查找并显示passwd的行,所以整个语句的结果就是查到包含关键字passwd的文件或目录。

[root@host etc]# ls -l | grep passwd-rw-r--r--.  1 root   root       1754 Nov  9 22:47 passwd-rw-r--r--.  1 root   root       1713 Nov  9 22:14 passwd-


     2.1 管道命令和重定向命令的结合(详细请参考http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html)

     之所以会叫做重定向命令,那根据推测,应该存在定向命令。确实如此,Linux中的输入、输出,都是已经预先内定的,都指定了标准的输入和输出位置,有时候我们想要改变输入或者输出的位置,这个时候就需要用到重定向命令了。

     linux shell下常用输入输出操作符是:

    1.  标准输入   (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0   0代表:/dev/stdin
    2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1  1代表:/dev/stdout
    3.  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

    未完待续.......











0 0