参 数 -d
为了保证系统的安全,在Linux系统中,如果某个用户账号不再使用,就应该从系统中删除。在Linux系统中可以通过直 接删除/etc/passwd和/etc/shadow文件中对应行的办法来删除系统账号,但这种方法不利于初学者,更增加了管理员的负担。因此在Linux系统中提供了userdel命令来实现从系统中删除已有账户。
userdel [-r] [用户名]
如果使用参数-r,则表示在删除用户的同时,将该用户的主目录一并删除。 在登录的用户间传递消息:
提供了几个用于向登录用户发送消息的工具,以便管理员在需要的时候使用这些工具向其
他登录用户发送系统消息。1) mesg命令
该命令用于设置终端机的写入权限,即如果mesg使用y参数表示允许其他用户将消息传到自己的终端机界面上。如果mesg使用n参数表示不允许其他用户将消息传到自己的终端机界面上。该命令的使用格式如下: 参 数 y n 2) wall命令
该命令能将消息内容发送给每一个在线的用户,但是该用户的必须首先使用mesg命令允许其他用户将消息传到其终端上。改名的使用格式如下: wall
也可以直接使用wall,然后输入信息,不过信息结束时需加上 EOF (使用键盘键Ctrl+D)。 3) write命令
该命令可以向指定的用户发送信息。该命令的使用格式如下: write
其中参数ttyname是可选项,当一个用户多次登录系统时,可以选择使用该参数指定其登录的终端。 root@myhost root]# write tom
含 义 允许其他用户将消息传到自己的终端机界面上 不允许其他用户将消息传到自己的终端机界面上 管理组
1. groupadd命令
该命令用于向系统新增一个组,新增的组账号在默认的情况下最小从500开始。通常的情况下,其命令格式如下:
groupadd [选项] [组名]
groupadd工具无需使用参数,但在某些特殊情况下,需要使用如下表所示的参数。 参 数 -g
管理员有时候可能需要更改组账号的内容,此时可以使用groupmod命令。其命令格式如下: groupmod [选项] [组名] 参 数 -g
在向系统创建用户账号的时候,系统会自动创建与该账号同名的组,但是在删除该用户账号的时候,系统并不会自动删除该组,因此需要系统管理员手动删除该组账号。groupdel命令提供了删除特定组账号的工具,该命令无需任何参数。其使用格式如下: groupdel <组账号>
shell及shell编程
在Linux系统中,shell是操作系统的外壳,为用户提供使用操作系统的接口,它是命令语言、命令解释程序和程序设计语言的统称。
shell是用户和操作系统之间的一个接口。用户在命令提示符下输入的每个命令都首先由shell程序进行解释,然后再传给Linux内核的。 shell是一个命令解释器。它拥有自己内建的shell命令集,可以用它来启动、挂起、停止一些程序。此外shell也能被系统中的其他有效的Linux应用程序所调用。
shell还是一个解释型的程序设计语言。shell程序设计语言支持绝大多数高级程序设计语言中常用的元素,比如函数、变量、数组和控制结构。shell编程简单易学,在任何命令提示符中能键入的命令都可以在shell程序中使用。而且一旦掌握,它将成为工作中的得力工具。
和DOS和Windows不同,Linux提供了多种shell程序供用户选择使用,使用不同类型shell的原因是它们都有各自的特点。一般某个用户登录系统时的shell都在/etc/passwd
文件的最后一个字段中定义,用户可以通过修改该字段来替换其使用的shell。
另外,用户在文本模式下登录系统后,Linux的初始化程序initd就会为每个用户启动一个shell,可以使用“Alt+F1~F6”来获取shell提供的多个虚拟控制台,使用虚拟控制台的最大好处就是,当一个虚拟控制台上的程序由于出错给锁住输入
时,用户可以进入另一个虚拟控制台,然后杀死该进程。如果系统使用了X Window的图形模式,那么虚拟终端的切换就要使用“Ctrl+Alt+F1~F6”
/etc/shells文件中,列出了目前系统可以使用的shell。并且给出了这些shell程序的位置
bash的功能
shell是操作系统的外壳。RedHat Linux 9中默认使用的shell是bash,它为用户提供使用操作系统的接口,承担着用户与操作系统内核之间进行沟通的任务。除此之外,bash程序还兼备如下的功能: 1)交互式处理
从用户登录系统开始,shell程序就是在系统终端中显示不同的命令行提示符(root用户登录系统则提示符显示“#”,普通用户登录则显示“$”),然后等待用户输入命令。在接收来自用户输入的命令后,bash会根据命令的 不同的类型(包括程序或shell内置命令)来执行,在执行完
毕后,bash将结果回传给用户,并且再次回到命令提示符,以等待用户的下一次输入。这种模式会一直继续下去,直到用户执行exit或是按下Ctrl+D来注销,bash才会结束,bash的这种与用户沟通的方式称为“交互式处理”。 2)命令补全功能
所谓“命令补全”是指在用户输入命令的时候,无需输入完整的命令行,Linux系统的shell会自动查找出最符合的命令名
称,供用户选择。这样的功能可以帮用户节省输入长串命令的
时间。例如,在/root目录下有一个testexecvp.c文件,如果想查看其中的内容,并不需要完整输入该文件的名称,而只要输入开头的几个字母,即输入“more /root/teste”,然后按下Tab键一次,Linux的bash会自动补足完整的命令(more /root/testexecvp.c)。另一种情况就是,如果系统中有多个文件都与输入的前缀相同,那么当用户连续按下2次Tab键时,系统会显示当前目录下所有具有相同前缀的文件名称,供用户选择。例如,输入“more test”后按2次Tab键,结果如图下所示。
shell的补全功能,不但方便,而且可以避免由于用户输入错误的路径而执行错误的程序。 3)查阅历史记录—history命令
在RedHat Linux 9中,每当用户输入的命令并按下Enter后,都会被记录在命令记录表中,默认情况下,bash默认使用的命令记录表文件为用户主目录下的.bash_history(文件名前面的“.”表示这是一个隐藏文件)文件。可以使用环境变量HISTSIZE来定义命令记录表的条数,默认的记录条数为1000条。bash的history功能提供了一种执行命令的最快的方法,就是使用命令记录号码。在RedHat Linux 9的命令记录中,每条用户执行过的命令都会被赋一个记录号码,用户可以利用这些记录号码来执行指定的要执行的旧命令。其语法如下: !<记录号>
4)别名(alias)功能
Linux中的别名功能是指提供给用户使用自定义的简单字符串,来替换复杂的命令选项,或是替换连续多个命令的连续组合的功能,从而使得用户可以自定义符合自己习惯的操作命令。
例如,对于熟悉DOS和Windows的用户来说,dir命令可以方便地显示当前目录的内容,但是在Linux中完成该功能的命令是“ls –l”。如果希望使用dir来代替ls –l,则可以使用alias功能来创建一个到ls –l的别名,如下图所示。
myhost root]# alias dir=”ls –l” 5)后台处理
Linux是多用户多任务的操作系统,它允许多个用户同时登录系统,也允许多个程序同时执行。但因为shell使用交互式模式,目前执行的命令会一直掌握系统的控制权,直到该程序结束为止,这类程序称为前台程序(Foreground)。shell采用的这种前台程序接管系统控制权的模式,使得个别用户无法使用Linux提供的多任务功能来增加效率,因此,shell提供了后台处理功能来解决上述问题。
取消:[root@myhost root]# unalias dir
通常,Linux后台运行的都是比较耗时的程序,如编译核心或是下载Linux的安装文件等,但是后台任务在执行期间,用户仍然可以和shell继续交互,以下达其他的命令。要在RedHat Linux 9中要执行后台程序,只要在输入命令的时候,在命令后面加上“&”符号。系统就会开始以后台的方式执行该命令,屏幕将显示该后台运行程序的进程PID,然后shell将回到命令提示符状态,以等待用户的下一个命令的输入。例如,将top命令投入后台运行。如下图所示。
当前某个任务在前台运行之后,就无法使用“&”将它投入后台运行,但是可以先使用“Ctrl+z”组合键暂停该程序,然后在命令提示符下输入“bg”命令,即可将该任务投入后台执行。 如果要查看目前系统中正在运行的后台程序,可以使用jobs命令。
来回切换:fg/bg 6)输入/输出重定向
在Linux系统中,标准输入和输出有3种形态: 标准输入(stdin):通常是指键盘。
标准输出(stdout):通常是指将命令执行的结果输出到终端机或屏幕上。 标准错误输出(stderr):是指在命令发生错误时,将其错误信息输出到屏幕上。
一般情况下,程序的输入对象都是标准输入,输出是标准输出。在Linux中提供了输入(<和<<)和输出(>和>>)的重新定向功能,它可以将程序的输入和输出由标准设备重定向到文件、打印机或其他装置(/dev/null)。
这里重定向(>和<)是改写重定向,就是会删除原来的文件,而重定向(>>和<<)是追加重定向,就是新的内容将被添加到文件原来内容的后面。
先使用ls命令查看/etc/pam目录的内容,然后将查看结果重定向到ls_result.txt文件中。其命令和执行结果如图所示 [root@myhost root]# ls –l /etc/xinetd.d > ls_result.txt
然后使用输入重定向查看ls_result.txt文件,可在命令提示符中输入如下命令: [root@myhost root]# cat < ls_result.txt
7)管道
管道功能可以将多个命令集成到一起,以执行一个较为复杂的工作,除了第一个和最后一个命令之外,每个命令的输入都是前一个命令的输出,而每个命令的输出也将成为下一个命令的输入。例如: [root@myhost root]# ls –l /usr/bin | grep lib |less
以上的命令执行的过程是先列出/usr/bin目录的所有内容,然后通过管道(|)将ls命令的结果传给grep命令,当成其标准输入,接着grep会由此输入中查找含有lib的字符串文件,最后将搜索的结果再通过管道传给less命令。
3.bash中的特殊字符
在Linux下有一些符号会被shell特殊对待,这些符号可以用来指定特殊的范围或功能,除了前面介绍的外,例如>、>>、<、<<、|和!,还有以下可以在shell中使用的特殊字符。 1)通配符(*和?)
“*”和“?”是Linux系统中最常用的两个通配符,在字符串查找的时候,通配符可以代替任意的字符。其中“?”可以代替一个任意字符,“*”可以代替任意多个字符。
例如,执行“ls –l /root/test*”命令就会列出/root目录下所有以test打头的所有文件名,如下图所示。 2)命令取代符(`)
命令取代符“`”在Esc键下方,与“~”符号在同一个键上。两个“`”符号包围的命令,是该命令行中首先被执行的命令。例如,“echo `date`”命令,首先执行date命令,然后使用echo来显示date命令的结果,而不是显示字符串date,如下图所示。 3)命令分隔符(;)
如果需要执行一连串的命令,可以一次输入这些命令,而在命令间使用“;”分隔,Linux的shell会一次解释并执行这些命令。
例如,在Linux的终端中,从/root目录下先执行cd /etc命令,然后再执行more passwd命令来查看/etc/passwd文件的内容,其过程如下图所示。
[root@myhost root]# cd /etc ; more passwd 4)注释符(#)
注释符“#”通常使用在Linux的shell脚本程序或应用程序的配置文件中,使用“#”开头的行为注释行,shell在解释该脚本程序的时候不会执行该行。对于有经验的程序员来说,注释行的使用可以增加程序的可读性,也可以使日后的维护更加简单。
创建和执行shell程序
可以选择使用shell脚本程序。Linux的shell程序是一个非常有用且很容易掌握的工具,可以帮助用户轻松地完成繁
重的任务,提高使用和维护系统的效率。另外,Linux的图形界面也是通过shell脚本解释启动的,很多应用程序本身就是一个shell程序
shell程序与C语言等高级语言程序不同,shell程序是通过shell命令解释器解释执行的,不生成二进制的可执行代码,这一点和DOS下的批处理文件类似。不同的shell解释器对应的shell程序的语法也不完全相同。由于bash是Linux下默 认提供的shell解释器,并且bash也是使用最广泛、与其他shell兼容性最好的解释器,因此下面介绍的shell程序的知识都是基于bash解释器的。
创建和执行一个shell程序非常简单,一般需要以下3个步骤: (1)利用文本编辑器创建脚本内容。
(2)使用“chmod”命令设置脚本的可执行属性。 (3)执行脚本。
一个合法的shell脚本程序,都是以如下图所示的shell解释器声明开始的,即在shell程序的第一行。其中“#!”后面的“/bin/bash”,表示实际使用的解释器。例如,以perl作为shell解释器,则可以该声明可以是“/usr/bin/perl”;与其他行不同,这里前面虽然以“#”开头,但不是注释行。 1.创建shell程序
在RedHat Linux 9的命令提示符下使用gedit addusers.sh或vi addusers.sh,创建文本文件addusers.sh.,在系统打开的文本编辑窗口中输入如下的语句(其中行首编号除外)。输入完毕后保存退出。 1 2 3 4 5 6 7
#!/bin/sh if [ -f $1 ] ; then if [ -f $2 ] ; then
/usr/sbin/newusers < $1 /usr/sbin/pwunconv /usr/sbin/chpasswd < $2 /usr/sbin/pwconv
注意:
2.设置addusers.sh文件的可执行属性
addusers.sh文件编辑完毕并保存后,在命令提示符下执行如下命令,设置其可执行的属性(假设addusers.sh文件保存在/root目录下)。
[root@myhost root]# chmod a+x addusers.sh 3.执行addusers.sh脚本
shell脚本的执行方法也很简单,只需要在命令提示符下输入如下命令即可: [root@myhost root]# ./ addusers.sh account.txt password.txt 其中account.txt是用户账号文件,password.txt是用户口令文件。
shell的环境变量:
在Linux的shell中使用的变量分为以下环境变量、内部变量和用户变量3类。环境变量是Linux系统环境的一部分,通常不需要用户去定义。shell使用环境变量来存储系统信息,这些变量可以提供给在shell中执行的程序使用,不同的shell会有不同的环境变量及其设置的方法。内部变量是由系统提供的,用户不能修改它们。用户变量是用户在编写shell脚本的时候定义的,可以在shell脚本中任意使用和修改。