在第一章,我们学习了如何获取帮助,现在我们将学习Linux命令的一些技巧,在这一章我们将学习以下主题:
·更改密码
·更改用户
·获取用户信息
·与其他用户进行通讯
·文件和目录
·有趣的命令
更改密码
作为一个Linux用户,需要定期更改密码来保护你的账户,在更改密码时,要符合下面的最小要求:
·密码至少6位,不过8位或更多位会更安全些。
·混合使用字符、数字和其他特殊符号设置密码。
·使用大写和小写字符。
·确保密码不出现在“攻击字典”中,攻击者经常使用“攻击字典”来暴力破解你的密码,如果你的密码出现在攻击字典中,将会很容易被破解。
更改密码很容易,只要使用命令“passwd”即可。输入“passwd”命令后,首先会让你输入原来的密码,这样做是防止其他人更改你的密码,然会输入两次新密码,在输入新密码时,要符号上面的最小要求,不然系统不会更改你的密码。使用过程如下:
[cuiyh@cuiyb ~]$ passwd
Changing password for user cuiyh.
Changing password for cuiyh
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
如果你以root用户登录系统,你可以更改其他用户的密码。如果你仅仅是想更改密码,那很简单,在passwd后再加上你想更改用户名即可。在更改用户密码时也有一些选项可供使用,下面是一些常用的选项:
-d:移除指定用户账户的密码。
-l:锁定一个账户。当一个账户在一段时间不被使用时,这个选项十分有用。
-u:解除使用选项“-l”锁定的账户。
-e:强迫用户在下一次登录时更改他的密码。
更改用户
基本上,有两种方式登录Linux系统:根用户登录和非根用户登录。使用非根用户登录系统是一个好的习惯,因为根用户能够做任何事,一个小的错误都可能造成大的结果,作为根用户,你可能偶然性的破坏你的系统,而你在做这些事情的时候,Linux不会询问你。因此,在做一些不是仅根用户能够完成的事情时,我们最好使用非根用户登录Linux系统。
临时更改用户身份,可以使用“su”命令(Ubuntu用户除外,相关知识我们在以后会讲到)。例如:
[cuiyh@localhost ~]$ su cuiyh
这条命令会更改你当前的用户账户为“cuiyh”。如果当前你是普通用户,下一步系统会提示你输入账户“cuiyh”的密码。如果当前你是根用户,则不需要输入密码。如果你仅仅输入命令“su”,则会更改为根用户。
在使用命令“su”时,我们最好一直使用选项“-”,如果不使用选项“-”,系统的一些环境设置还是属于原来用户账户。比如,我们前面的命令执行完毕之后,我们再使用下列命令时,会提示权限不够,这是因为我们现在的环境设置还是root用户的。如下所示:
[cuiyh@localhost root]$ ls
ls: .: 权限不够
如果我们先执行命令:
[root@localhost ~]# su – cuiyh
然后在执行命令:
[cuiyh@localhost ~]$ ls
cuiyb
这时,会正常显示。
获取用户信息
如果你在个人计算机上使用Linux系统,可能只使用一个用户登录。然而,如果你使用的是公司Linux服务器,则存在其他用户。在后者的情况下,有几个有用的命令可以帮助你获取当前连接到同一机器的用户信息。首先是“users”命令,这条命令只是简单地显示目前登录系统的用户列表,例如:
[root@localhost ~]# users
cuiyb cuiyh jiacj root
执行结果表明目前有四个用户登录我的Linux系统。
如果你想获取登录用户的更多信息,命令“who”是个不错的选择。默认情况下,该命令不仅显示当前登录用户的列表,而且显示这些用户的IP地址和登录的时间。例如:
[root@localhost ~]# who
root pts/1 2009-08-05 04:32 (192.168.0.1)
cuiyh pts/2 2009-08-05 04:48 (192.168.0.1)
jiacj pts/3 2009-08-05 04:48 (192.168.0.1)
cuiyb pts/4 2009-08-05 04:48 (192.168.0.1)
如果你想看看登录用户再做什么,命令“w”可以帮助你。这条命令显示用户名、在哪儿登录、登录时间、统计信息以及用户当前使用的程序(或者使用过的最后一个程序)。例如:
[root@localhost ~]# w
04:58:39 up 28 min, 4 users, load average: 0.00, 0.00, 0.07
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.0.1 04:32 0.00s 0.10s 0.03s w
cuiyh pts/2 192.168.0.1 04:48 10:35 0.04s 0.04s -bash
jiacj pts/3 192.168.0.1 04:48 10:25 0.05s 0.05s -bash
cuiyb pts/4 192.168.0.1 04:48 10:20 0.04s 0.04s –bash
如果你想获取尽可能多的用户信息,可以试试命令“finger”。这条命令甚至可以显示用户是否有未读邮件。例如:
[root@localhost ~]# finger cuiyh
Login: cuiyh Name: cuiyh
Directory: /home/cuiyh Shell: /bin/bash
On since 三 8月 5 04:48 (CST) on pts/2 from 192.168.0.1
21 minutes 10 seconds idle
No mail.
No Plan.
与其他用户进行通讯
在Linux命令行下,有一些命令可以进行实时通讯,类似于聊天功能,同时也允许你发送电子邮件。
实时通讯
有两个命令可以实时与其他用户进行通讯。命令“write”可以实现一对一的通讯。如果想发送一个信息给所有用户,可以使用命令“wall”。如果不想接收来自其他用户的信息,可以使用命令“mesg”来转换信息接收的关或开。
·使用“write”进行一对一通讯
如果你想与其他用户在系统上进行实时聊天,你可以使用命令“write”。这条命令允许在两个用户之间进行通讯,即一对一的通讯。使用它非常简单:首先,使用命令“write”后跟你打算与其通讯的用户名来开启一个write会话。例如:
[root@localhost ~]# write cuiyh
接着,命令“write”打开一个提示符,表示用户可以输入文本。无论对方在做什么,只要他的终端开启,这些文本都将被显示。我们以用户cuiyh与用户root进行通讯为例,来演示如何开启、关闭write会话。
1、使用命令“write root”,用户cuiyh打开与用户root的write会话。之后用户cuiyh可以输入发给用户root的文本,然后回车,即发送:
[cuiyh@localhost ~]$ write root
hi root, I'm having a problem.
2、同一时刻,root在终端中接收到cuiyh的信息。如果root回复,则先输入回车放好cuiyh的信息,然后输入命令“write cuiyh”。接着root可以键入回复信息,从而建立了与cuiyh的有效会话,之后再进行通讯就不必在输入命令“write”后跟用户名了。
[root@localhost ~]#
Message from cuiyh@localhost.localdomain on pts/2 at 06:14 ...
hi root, I'm having a problem.
[root@localhost ~]# write cuiyh
hi cuiyh, how can I help you?
well, my mouse does't react anymore.(这条信息是cuiyh发给root的)
3、通讯双方可以使用快捷键“Ctrl+C”来终止会话。
·使用“wall”与所有用户进行通讯
另一个实时通讯命令是“wall”。这条命令将把输入的信息发给所有的用户。使用方法很简单,只需要输入命令“wall”回车即可,然后系统出现提示符提示输入文本,输入完文本后,按快捷键“Ctrl+D”即可发送给所有用户。例如:
[root@localhost ~]# wall
I'll shut down the system in 5 minutes.
Broadcast message from root (pts/1) (Wed Aug 5 06:31:43 2009):
I'll shut down the system in 5 minutes.
我们也可以使用命令“wall”发送文本文件的内容给其他用户。例如:wall < mymessage.txt将发送当前目录中下的文本mymessage.txt的内容给所有当前在线用户。
·禁止实时通讯
如果你不想接收来自其他用户的任何信息,可以使用命令“mesg”。这条命令只要两个参数。“mesg n”可以保证没有人可以发送信息给你的终端。“mesg y”可以重新打开接收信息功能。
通过命令行发送邮件
我们可以使用命令“mail user”来发送邮件,“user”是本地用户名(例如:mail root)或者是网络上的一个用户(例如:mail someone@example.com)。接着mail程序将打开输入接口,首先让你输入邮件的主题,接着输入邮件的正文。当正文输入完毕后,另起一行,输入符号“.”,然后回车,出现符号“Cc:”,然后回车,邮件即被发送。例如:
[root@localhost tmp]# mail cuiyh
Subject: 4 PM meeting
Hi cuiyh, can we meet at 4 PM?
Thanks,
root
.
Cc:
有时我们想发送一个邮件给某个用户,但不需要打开输入接口输入文本,例如:当某个错误发生时,我们想执行一个脚本自动发送一个信息通知某个用户,在这种情况下,邮件的正文不是非常重要,你可能仅仅想递交一个邮件信息给相关用户,下面的命令可以实现这个功能:
[cuiyh@localhost ~]$ mail -s "something is wrong" root < .
这条命令将发送一个主题为“something is wrong”,正文为空的邮件给root用户。注意符号“< .”,正常情况下我们需要另起一行输入“.“才能发送邮件,但加上这个符号后,命令行会自动给我们提供这个功能。
当我们要查看邮件时,我们只要输入命令“mail”就可以了,例如:
[cuiyb@localhost ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/cuiyb": 3 messages 2 new 3 unread
U 1 root@localhost.local Wed Aug 5 23:57 15/639 "Meeting"
>N 2 cuiyh@localhost.loca Thu Aug 6 00:02 14/660 "something is wrong"
N 3 root@localhost.local Thu Aug 6 00:02 14/629 "Meeting"
&
要阅读某个邮件,我们只要输入序号,然后回车即可。当阅读完毕后,我们可以输入“reply”来进行邮件的回复,输入“delete”删除邮件,输入“q”退出。
文件和目录命令
·pwd:显示当前目录,这条命令显示完整的目录路径。
·cd:更改当前目录命令。
[root@localhost ~]# cd tmp //进入当前目录中的子目录tmp
[root@localhost tmp]# cd /etc //进入根目录下的etc目录
[root@localhost tmp]# cd . //进入当前目录
[root@localhost tmp]# cd .. //进入上一级目录
[root@localhost tmp]# cd //进入家目录
[root@localhost tmp]# cd ~ //进入家目录
[root@localhost tmp]# cd - //进入最近一次访问过的目录
·mkdir:建立目录命令。
[root@localhost ~]# mkdir cuiyh //在当前目录下创建目录cuiyh
[root@localhost ~]# mkdir cuiyh/cuiyb //如果在当前目录下不存在目录cuiyh,这条命令将提示错误信息:“mkdir: 无法创建目录 “cuiyh/cuiyb”: 没有那个文件或目录”
为了能用一条命令创建一个完整的目录结构,我们可以加上选项-p,例如:
[root@localhost ~]# mkdir -p test1/test2/test3
这条命令将在当前目录下创建目录test1/test2/test3,而不管test1或者test2是否存在。
·rmdir:删除目录命令。但是这条命令并不是非常有用,因为它要求被删除目录为空。如果目录非空,使用命令“rm –r”或者“rm –rf ”可以删除非空目录。前者在删除目录是有提示信息,后者直接删除,没有提示信息。
·ls:列举文件和目录命令。例如,下面的这条命令将显示root用户家目录中的所有文件和目录(不包括隐藏文件),同时也显示它们的属性:
[root@localhost ~]# ls -l
总计 108
第一列 第二列 第三列 第四列 第五列 第六列
-rw------- 1 root root 1088 08-03 19:33 anaconda-ks.cfg
drwxr-xr-x 3 root root 4096 08-06 01:57 cuiyh
drwxr-xr-x 2 root root 4096 08-03 12:31 Desktop
-rw-r--r-- 1 root root 34452 08-03 19:33 install.log
在这个例子中,可以看到系统用不同的列来显示文件的属性,它们分别是:
第一列:文件类型及权限。第一个字符表示文件类型,如果第一个字符是“-”,则说明是文件,如果第一个字符是“d”,则说明是目录。后面9个字符代表权限,第2-4个字符表示文件所有者对此文件的访问权限;第5-7个字符表示用户组对此文件的访问权限;第8-10个字符表示其他用户对此文件的访问权限。关于权限的其他内容,我们将在第七章详述。
第二列:文件的链接数。
第三列:文件拥有者及所属群组。在这个例子中,这些文件拥有者都是root用户,所属群组都是root群组。
第四列:文件大小。
第五列:文件创建日期及时间。
第六列:文件名。
除了选项“-l”,命令“ls”还有许多其他的选项。其中一个特别有用的选项就是“-d”选项,下面我们将解释原因。我们使用命令“ls”时,经常使用通配符,例如:
[root@localhost ~]# ls *
将递归显示当前目录中的所有文件。
[root@localhost ~]# ls /etc/*a.*
将递归显示目录/etc中含有符号“a.”的所有文件。
[root@localhost ~]# ls [abc]*
将递归显示当前目录中以字符“a”或“b”或“c”开头的所有文件。
以上几个命令在执行时,没有使用选项“-d”,因此会递归显示文件,也就是说如果一个目录符合通配符的模式,命令在执行时也会显示匹配目录下的文件。当使用选项“-d”时,只会显示目录的名称,而不会显示目录中的内容。命令“ls”其他一些有用的选项如下所示:
-a:显示所有文件包括隐藏文件。正常情况下,我们看不到以符合“.”开头的文件,即隐藏文件。
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-t:用文件和目录的更改时间进行排序。
-h:用“K”,“M”,“G”来显示文件和目录的大小,只能配合选项“-l”一起使用。
-S:用文件和目录的大小进行排序。配合选项“-l”效果十分好。
·rm:删除文件命令。这条命令有以下几个有用的选项:
-r:递归删除所有文件。
-f:不询问用户是否删除文件,而是直接删除文件。
-i:交互式删除文件,即删除文件之前询问用户是否删除文件。
-v:显示命令执行过程。
·cp:复制文件命令。这条命令十分简单,这条命令的基本结构为:cp source destination。source:可以是文件、目录或者是符合通配模式的文件。例如:
[root@localhost ~]# cp ~/* /tmp
这条命令将把当前用户家目录中的所有文件拷贝到目录/tmp中。
这条命令有以下一些有用的选项:
-a:此参数的效果和同时指定"-dpr"参数相同。
-b:删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。
-f:强行复制文件或目录,不论目标文件或目录是否已存在。
-i:覆盖既有文件之前先询问用户。
-p:保留源文件或目录的属性。
-r:递归处理,将指定目录下的文件与子目录一并处理。
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在,才复制文件。
·mv:移动文件命令。这条命令的基本结构为:mv source destination。这条命令也可以用来更改文件名称。例如:你可以使用命令“mv /somedir /somethingelse”,将目录“/somedir”更改为“/somethingelse”。它有以下几个选项:
-b:若需覆盖文件,则覆盖前先行备份。
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。
-i:覆盖前先行询问用户。
-u:在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
-v:执行时显示详细的信息。
有趣的命令
·cal:显示日历命令。例如:
[root@localhost tmp]# cal 8 2009
将显示2009年8月的日历。
·clear:清屏命令。执行该功能也可以使用快捷键“Ctrl+L”。
·uname和hostname:显示系统信息命令。
·wc:统计单词、行和字数命令。
·date:显示和更改日期命令。例如:
[root@localhost tmp]# date
2009年 08月 07日 星期五 23:04:00 CST
显示当前日期。
改变当前日期的格式是:“mmddhhmm”,即“月日小时分钟”。例如:
[root@localhost tmp]# date 08072303
将日期更改为:8月7日23点3分。
这章我们就学习到这儿,在下一章,我们将更加详细地学习Linux文件系统!