Linux基础
时间:2006-07-28 来源:mylxiaoyi
这是自己当初在看Linux官方网站上的一个小课程时做的小翻译~~
在现在的世界中,可以说Linux已经是相当的普级和流行了,虽然还没有达到Windows那样的地步,而且要达到那样的地步还有好长的路要用.有越来越多的人认识到了Linux的优秀并且开始学习使用Linux.然而对比Windows而言,Linux的入门确实是要难一些的.而且要真正的学习和使用Linux还有许多的命令要学,而且一些的配置也要我们自己来完成.本来呢Linux这样做是为了给用户最大的自由,可是对于一个Linux新手来说,这却是很大的一个困难.甚到还有的人认为Linux是像DOS一样的东西.为什么会有这样的说法呢?因为在他们看来要学习Linux就得学习一些命令,这不正是DOS的做法嘛!现在流行的操作系统都提供了优秀的图形界面,一些常用字的操作我们只需要轻点鼠标就可以完成.其实这在Linux的世界中也可以做到的.Linux可以采用Gnome,KDE以及一些其他的窗口管理器,也可以方便的来完成我们的操作.但是Linux不是Windows.每一个认真的来使用Linux人都应该学会一些常用的Linux命令,只有这样我们才可以体会到Linux的强大和优秀.
在Linux的世界中我们执行命令可以使用Shell,所谓的Shell就是一个和Linux内核进行交互的接口,而我们的所谓的Linux命令或是Shell命令正是通过和Linux内核的交互来完成的.在现在的Linux世界中最流行的Shell是Bash,当然了还有一些其他的优秀的Shell可以供我们来使用,例如说Csh或是Ksh等等.
在我们开始我们的Shell命令之前我们应先来认识一下我们用户主目录下的.bashrc文件.这是Bash的配置文件.在Linux的世界是有许多这样类似的配置文件.这样的配置文件为我们提供了极大的自由,我们可以在其中加入我们自己所喜欢的任何内容.现在也许你会说我并没有看见这个文件啊.事实上这是一个隐藏的文件,在Linux中所有的隐藏文件名都是以.开头.这样的文件多是一些配置文件,隐藏起来正是为了避免用户的误操作.我们可以通过命令ls -a为查看.这个命令会列出当前目录下所有的文件,包括隐藏文件.当然了我们在用图形界,可以在查看中勾上显示隐藏文件就可以了.
下面我们来认识一下所谓的别名的问题:所谓的别就是一个名称的另一种说法,在Linux中可以用alias来实现.例如下面的命令:
alias cp='cp -v -i'
在我们执行了这样的命令以后,当我们执行cp命令时实际上执行是cp -v -i命令.cp是复制文件的命令,还可以以另一个文件为进行复制.在这里我们有必要说一下Linux中命令的构成.在Linux世界中一个命令是以空格来区分的,例如上面的命令中Linux会将cp解释成为一个命令,而短横线-后的内容会被认为是这个命令的参数.但是命令和参数必须要用空格,否则就会被认为是另一个命令,从而会有其他的结果.可以单个列写参数,也可以像-vi这样来列写参数.而上面的命令说的就是当我们在执行这个命令时要先询问,在命令执行后要显示了命令的执行结果.
同理我们还可以设置以下的命令:
alias rm='rm -i'
alias mv='mv -i'
rm命令是一个移除文件的命令,这是一个相当危险的命令,如果我们进行了误操作,那么这个文件是不可以再找回来的,也许我们辛苦一天的结果就这样被丢弃了.所以我们设置这样的别名,当我们执行这个命令时,Linux会进行询问.
mv命令是一个移动文件的命令,这个命令也可以实现更改文件名的功能.我们设置了这样的别名,这样我们在进行操作前Linux会发出询问,从而保证安全性.不会因为误操作而导致想不到结果.
我们可以将这些命令加入.bashrc文件中:
#my personal alias
alias cp='cp -v -i'
alias rm='rm -i'
alias mv='mv -i'
这里以#开头的Linux会认为这是注释而不加解释.
这样在我们注销再登陆后这个文件就可以发生作用.经过样的配置以我们就有了一个安全的Shell环境了.如果我们不注销我们可以使用下面的命令来使这个文件发生作用:
source .bashrc
如果我们安装了类似于KDE这样的窗口管理程序,我们就可以在图形界面利用鼠标操作来完成文件的复制,删除,移动和重命名等操作.然而作为一个Linuxer来说我们应该掌握这些我们会经常用到的Linux命令.
cd命令:
cd命令是更改当前目录的命令(change directory)
cd /[directory name] 这个命令会使我们进入Linux的系统文件夹
cd .. 这个命令会使我们退出当前目录回到上一级目录
cd [sub-dirctory name] 这个命令会使我们进入子目录sub-dirctory name
在Linux中我们的命令并不一定要输入完全,当我们输入几个字符时按下<Tab>键,Linux会自动补齐其他的部分.这可以大大加我们的输入速度.
cd 这个命令会便我们回到我们的用户主目录
ls命令:
ls命令是列出文件或是文件夹的命令
例如ls命令可以列出当前目录下的文件或是文件夹
而ls -a命令则可以列出当前目录下的所有文件和文件夹,包括隐藏的文件
ls -l命令则可以列出当前目录下文件和文件夹的详细信息.这个输入格式如下:
-rwxr-xr-x 1 mayuelong root 50920 7月 2 09:53 ../bitnet
在这个格式化中第一部分是文件的属性,接下来是指1个文件,mayuelong则是指文件的属主,root是指组群,下面的数字是指文件的大小,后面的日期则是文件修改的时间.
ls命令还有一些更灵活的用法,如ls a*则是列出当前目录下的所有以a开头的文件.
ls其他的命令参数:
ls -l -t 这个命令会按照生成时间的新旧列出当出当前目录下文件的详细信息,在这个信息列表,最新生成的文件会列在前面.如果我们想按照相反的顺序列出可以使用下面的命令:
ls -ltr
这里的r是指逆序.
ls -lS
这个命令是按照文件由大到小的顺序列出文件的详细信息,而下面的命令则是按照由小到大的顺序列出详细信息:
ls -lSr
ls -lX
上面这个命令会按照字母的顺序列出文件的详细信息,如果有以.zip结尾的则列在最后.如果我们想以逆序列出可以使用下面的命令:
ls -lXr
我们还可以通过命令ls --help来得到一些更详细的帮助信息.
在Windows中是通过文件的扩展名来识别文件类型的,例如.exe是指可执文件,.txt是指纯文本文件.而在Linux世界则不是这样的.在Linux并没有扩展名的区别.我们可以通过命令file来使Linux告诉我们这是一个什么类型的文件.例如下面的命令:
$ file Shell.txt
而他的输入则显示为:
Shell.txt: UTF-8 Unicode text, with very long lines
这就告诉我们这是一个文本文件.
如果某一个文件是文本文件,那么我们就可以用命令more或是less来阅读.在用这个命令阅读时我们可以使用q来退出.但是这两个命令进行比较似less要显得更好一些.
cp命令:
cp命令是将一个文件从一个地方复制到另一个地方,或是以一个的文件建立一个文件的副本.在具体的说cp命令以前我们行简单介绍一下建立文件夹的命令:mkdir.例如建立一个名为mydir的目录我们可以使用下面的命令:
mkdir mydir
进行文件的复制我们可以简单的使用下面的命令:
cp filename target-dir
这个目录是将文件filename复制到目标文件夹中.
在这里我们有必要说一下几个特殊的目录表示:
~ 是指用户主目录
.. 是指上一级目录
. 是同级目录
用上面的命令进行文件复制后我们可以使用命令ls -l filename来看出复制后的文件信息的不同.如果我们希望复制后的文件和复制前的文件一样,我们可以使用下面的命令:
cp -p filename target-dir
但是有时我们并不希望两个完全一样的文件存在不同的文件中,似乎这是没有意义的.为了解决这样的问题我们可以使用mv命令,这是一个移动文件的命令.
我们还可以为cp命令指定参数来实现整个文件夹的复制,如下面的命令:
cp -r source-dir target-dir
上面的命令用-r参数来实现将整个文件从一个地方复制到另一个地方.
我们还可以通过cp命令来建立一个文件的副本,也就是以一个不同的文件名来进行文件的复制,如下面的命令:
cp stuff stuff2
你也可以指定一个你所喜欢的名字来代替stuff2.
这们我们就有了两个内容相同而文件名不同的文件了.
mv命令:
我们可以使用mv命令来在不同的目录间进行文件的移动或是将一个文件重命名.例如我们可以使用下面的命令将文件stuff改为joke:
mv stuff joke
在这个命令中前一个文件为改名以前的文件,就是源文件,而后面的则是有想要的新的名字.在这里我们有必要说一下在Linux中有关文件名的一些问题.在Linux的文件名中我们可以使用空格,但是空格并不是一个好主意,因为我在命令行输入这样的文件时不得不用一个反斜线(\)放在空格的前面来告诉Linux这个空格中是文件名的一部分,而不是文件或是命令的分隔标记.因而在Linux我们是尽量使用文件名中含有空格,我们可以使用下划线,这样就可以避免空格带来的问题了.
我们可以使用下面的命令来移动文件:
mv filename target-dir
这样就可以将文件filename移动到目标目录target-dir中了.
我们还可以用这个命令来移动一个文件夹,但是我们要知道在这个命令中我们不需要使用参数-r,例如下面的命令形式:
mv source-dir target-dir
这个命令就可以将一个目录sorce-dir移动到另一个目录target-dir中.
mkdir命令:
我们可以使用mkdir命令来建立一个我们自己的空目录,例如下面的命令:
mkdir mydir
这样我们就建立了一个名为mydir的空目录.如果我们还想要这个命令结出命令执行的结果,我们可以加上一定的参数,如下面的命令:
mkdir --verbose mydir
这样在命令执行后就会显示命令的一些执行信息.
与mkdir命令相对的就是命令rmdir,这个命令可以使我们移除一个目录,如下面的命令:
rmdir mydir
但是我们要知道的是这个命令只有我们要移除的目录是一个空目录才可以正确的执行,否则就会给出错误信息.
rm命令:
rm命令是一个删除文件的命令,我们可以用他来删除一个我们不再想要的文件.但是我们要十分小的使用这个命令,因为由这个命令删除的文件我们以后就不会再把他找回来了.这也就是我们为什么要在.bashrc文件中加入alias rm='rm -i'的原因.这样当我们执行一个命令时就会得到如下面的一些询问信息,然后由我们来决定如何做:
rm:是否删除一般文件‘bitnet’?
这时如果我们输入了y,Linux就会删除这个文件,而我们也就永远的不会再见到他了.如果我们输入了n或是其他的字答,Linux则不会删除.在这里我们不用担心,因为在默认的情况下这个询问的回应是n,这样我们就不会因为不小心的操作给带来麻烦了.
但是这样的设置也还是有一个小麻烦的,那就是当我们要删除一类的文件,例如是用通配符指定的*.c或是其他的,而且我们很明确我们确实不再需要他们,但是这时的Linux还是会一个一个的来询问我们是否要删除某一个文件,而我们就要不断的输入y.这样的询问很麻烦,也不是我们需要的,所以我们可以可以加上-f参数来强制删除这些文件,如下面的命令;
rm -f *.c
这样Linux就不会用任何的询问了,而是直接的将这些文件删除.但是我们可是要小心啊.
管道:
在Linux系统中我们可以进行命令的组合来完成我们的工作.其中最常用的一个就是管道命令.管道是一个很形象的说法,也就是将一个命令的输出接入另一个命令的输入.我们要在Linux中使用管道命令并不是使用命令pipe,而是我们在要用到管道命令的时候输入|.这就是一个输入输出导入的命令,我们可以用这个命令来实现命令间输入输出相接.
例如我们可以使用下面的命令来查看目录/proc下的文件内容:
ls -l /proc
但是这个命令的执行结果实在是太长了,Linux没有办法在一屏内显示完全.当然了如果我们有很好的耐心,我们可以上下翻滚屏幕来查看,但是如果我们使用管道命令我们就可以解决类似这样的问题了.如下面的命令:
ls -l /proc | more
这样执行结果就会在一屏一屏的来显示了,我们可以通过空格或是回车来实现翻滚屏幕.
但是更好一点的办法是我们可以用下面的命令;
ls -l /proc | less
通过管道命令我们可以将ls命令的输出接入less命令的输入.这样我们就可以通过空格或是回车向下翻屏,更好的一点就是我们可以通过小方向键来实现屏幕的上下翻滚.这样就大大的方便了我们的查看.
在Linux的学习和使用我们是没有办法将全部的命令都学会和掌握的,因而对于使用Linux的人来说如何得到帮助就显得尤为重要.在Linux中可以有几种常用的方法可以使得我们得到帮助的信息.
一是我们可以使用命令的帮助信息.例如我们知道命令cp,但是却不是太清楚他的一些命令参数,这时我们可以简单的用命令cp --help来得到简要的帮助信息.
二是我们可以使用Linux中的man命令来得到详细的帮助信息.例如我们想要了解一些关于mkdir命令的帮助信息,我们可以使用下面的命令:
man mkdir
这个命令会将查找得到man帮助手册页的相应信息详细的列给我们.
三是我们可以使用与man命令相类似的info命令.我们也可以用这个命令来得到mkdir的帮助信息:
infor mkdir
另外一个我们可以得到帮助信息是命令apropos.确切的说这并不是一个帮助信息的命令,而是可以列出与我们要查看的内容相关的man手册页的相应信息.如下面命令:
apropos xterm
这个命令的执行结果如下:
resize (1) - set TERMCAP and terminal settings to current xterm window size
xkibitz (1) - allow multiple people to interact in an xterm
xterm (1) - terminal emulator for X
这些都是与xterm相关的man帮助手册页.然后我们可以对这些结果中特定的手册页进行查看.例如下面的命令:
man 1 xterm
在这里要多说一句就是这些的帮助命令的执行结果一般都是相当的长的,我们在查看时最好用管道命令将其导出.这样就会大大的方便我们的查看.
其他的一些有趣有用的命令:
touch命令:
我们可以用touch命令来更改一个文件的时间或是日期,而且我们还可以用这个命令来新建一个空文件.
我们可以这样的想一下,你的老板在向你大喊大叫,要求你要在午饭之前完一份报告,而我们的工作又实在是太忙了,似乎这样的要求有一些苛刻,所以我们想要做的就是可以完成这个报告晚一些,但是看上去要你是早就完成的一样.这时我们可用下面的命令:
touch -t 05070915 report.txt
在这个命令中前四个数字是指日期,在这里是指5月7日,后面的四个数字是指时间,这里是9:15.这样在我们做过手脚以后这个文件看上去就像很早就完也了一样,只是交得有一些晚而已.想来这样我们就可以免去老板的一顿批了啊.不过我们也确实是付出了努力的,要不再多的手脚也是没有用啊.:-)
find命令:
我们有时并不会很清楚地记得我们曾经处理过的文件,因而我们常常会用到查找的命令find.如果我们使用图形界面如KDE,我们可以使用他提供的强大的搜索工具.但是我们也可以在Shell下用命令find来实现.例如也许我们想要用一下我们以前处理过的报告,但是们又不记得他在哪里了,我们就可以使用下面的搜索命令:
find -name report.txt
这个命令是要Linux在当前目录下查找名为report.txt的文件.如果我们没有指定目录,Linux会在当前目录下查找,我们也可以指定Linux的查找目录,如下面的命令:
fine /usr -name report.txt
这个命令会使用Linux在/usr目录下进行查找.如果查找成功,Linux就会给了查找到的路径.
但是大多数的情况下我们要进行查找是因为我们记不太清我们曾经处理过的文件名了,这里我们可以用通配符来进行查找.*可以指代任意个字符,而?只可以指找一个字符.例如我们只记得文件中含用me,我们可以用下面的命令来进行查找:
find -name *me*
也许我们要查找的文件只是不久以前我们刚做过的(这样快就忘,唉~~),我们可以使用下面的命令:
find -mmin +0 -mmin -120
这样这个命令就可以列出我们最近两个小时内曾经处理过的文件.一般这样的情况下文件也许会很好,我们最好用管道命令导出,这样就可以方便我们的阅读了.
grep命令:
grep命令与我们上面讨论的find命令相类似也是一个查找的命令,所不同的是find命令用来查找文件,而grep命令是在文件中查找字符串.这个命令格式如下:
grep string filename
这个命令是在filename文件中查找字符串string,并将含有这个字符串的行显示在屏幕上.
这个命令不仅可以在文件中查找指定的字符串,而且还可以从任意的输入流中查找字符串.例如我们在Linux中常有这样的情况我们装上一个rpm包以后却记不这个包的名字了,如何从系统这样多的包中找到指定的包,我们可以用下面的命令来做到:
rpm -qa |grep *.rpm
例如我们还可以将查看命令用管道导入grep,这样我们就可以查找特定文件了,例如我们要列出当前目录下含用my字符串的文件,我们就可以用下面命令:
ls -l | grep my
who命令:
正如我们现在所知道的,Linux是一个多用户的操作系统,可以用不同的用户同时登陆开始他们不同的工作.那么我们如何知道有哪些用户登陆到我们的系统呢?这时我们可以使用who命令.who命令可以列出当前我们系统上的用户.其命令格式为:
$ who
其执行结果如下面的显示的这样:
mayuelon :0 Jul 31 18:21
mayuelon pts/1 Jul 31 18:21
mayuelon pts/2 Jul 31 18:21
mayuelon pts/4 Jul 31 18:32
在这个结果显示中,最前面的就是用户名,然后是用户登陆时所用的端口号,最后面是登陆的时间和日期.
这个命令对于网络管理员来说似乎显得更为重要,因为管理员可以通过这个命令来清楚当前有哪些用户登陆到了我们的系统.对于老板来说,也许他会通过这个命令来看有哪些员工迟到了.对于是我们来说这个命令可以使得我们知道我们打开了不只是一个终端,所以我们要记得注销啊.
tee命令:
我们可以使用tee命令来将那些将显示在屏幕上的内容存在一个文件中.多数的情况下我们都是在管道符后面使用这个文件.例如我们可以用下面的命令将当前目录下的文件的信息存在另一个文件中:
ls -l | tee list
这样就会在当前目录下产生一个名为list的文件,而这个文件的内容就是我们当前目录下的那些文件的详细信息.
但是有时我们会希望在用这样的tee命令产生的文件后面加上当前的时间,这时我们可以用下面的命令:
date | tee -a list
这样就可以在这个文件的后面记录我们这次操作的时间了,在这里我们要注意的是我们在文件中新增内容时一定要用-a参数,这样才可以将新增加的内容存在文件的末尾,否则的话这个文件就会被改写.
>命令:
与上面的tee命令相类似的我们可以将一个命令的输出内容存放在另一个文件中.而这个命令要比上面的命令来得更简洁一些,这样我们就不需要输入管道符了.
例如如果我们要将当前目录下的文件信息列表存放在list文件中我们可以用下面的命令来做到:
ls -l > list
和上面同样的想法如果我们要在文件的末尾加上时间,我们可以用这样的命令:
date >> list
这样的命令会将新增的内容追加在文件的末尾而不会改写整个文件.
2>命令:
我们可以用这个命令来产生一个文件来存放我们得到的错误信息.
一般情况下我们会很少用到这个命令,因为我们都知道Linux是多么的完美.但是也许有的时候我们要从网上下载一个软件,但是我们安装上以后,也许是因为缺少一些必要的文件,这个文件不能正常的工作.这时我们就可以用这个命令来产生一个错误信息文件:
[program X that doesn't wor] 2>program_X_error
这样我们就可以知道为什么我们的软件不可以正常的工作,我们也可以这个文件发给软件的开发者,这样他就可以帮助我们来解决这样的问题.
whoami命令:
也许在的情况下我们会用不同的用户名进行工作,而我们忙得也不晓自己在用哪一个用户名了,这有时可不是一个好事.这时我们就可以用whoami命令来叫Linux告诉我们我当前是哪一个用户登陆,也就是这个命令会返回当前用户的用户名.如下面的命令:
$ whoami
其执行结果为:
mayuelong
这样我们就不会弄错我是谁了:)
whatis命令:
在Linux系统有许多的命令,但是有时我们也不知道一个命令是用来做什么的.这时我们就可以用whatis命令来显示出这个命令的功能.例如下面的命令:
$ whatis grep
而其执行结果如下:
grep (1) - print lines matching a pattern
这样我们就可以十分清楚一个命令的功能作用了.当然查找的命令得是我们的系统中的有.如果没有,你想叫我们可爱的小企鹅去哪里呢?
如果我们执行下面的命令:
$ whatis whatis
会是什么样的呢?
其执行结果如下:
whatis (1) - search the whatis database for complete words
嘻嘻,看来还是一样的输出啊:).
whereis命令:
whereis命令可以用来很好的查找其他的命令或是程序.例如我们想要从网上下载一个程序,但是这个程序的运行要有其他程序的支持,而我们又不知道我们是否有这个程序.这时我们就可以使用下面的命令来进行查找:
$whereis [programname]
如果查找成功会显示出这个程序的路径.
例如我们要查找vi程序,我们可以使用下面的命令:
$ whereis vi
而这个命令的执行结果如下:
vi: /bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1p/vi.1p.gz
从这里我们可以看出vi程序的路径以及其man手册页的路径.
但是如果我们查找不到程序或是命令,Linux就会将这个字符串显示出来,而不会有其他的提示.
与whreeis命令相类似就是which命令,这个命令也可以查找出一个命令或是程序的路径.有时一个程序的运行要有其他程序的支持,但是这个程序却并不知道所需要的程序在什么地方.例如一个程序的运行需要Java,但是这个程序却认为Java在另外的一个地方,这时我们可以输入命令:
$ which java
而Linux会告诉我们:
/usr/bin/java
这样我们就可以通过一定的配置来使程序运行起来.
有的时候由于软件版本的变化,互相依赖的程序文件的路径也许会发生变化.但是开源软件可以使得我们来更改软件的设置来使软件运行起来.
echo命令:
echo命令可以将我们所输入的内容显示在屏幕上,也就是说这个命令起到了打印字符串的作用.例如我们执行下面的命令:
$ echo Hello,Linux
而这个命令的执行结果如下:
Hello,Linux
这在正常的状况下并不会显出有多大的用处.但是当我们开始写脚本程序时,我们就会发现这个命令是一个相当有用的命令.脚本程序是类似于小程序,我们可以利用脚本程序一次执行一系列的程序.我们可以在脚本程序中使用echo命令来告诉我们在某一个时刻脚本执行哪些动作,或者是提示我们应做的事情,例如输入文本等.在日常的生活我们还可以用echo命令及管道(|)和tee命令来书写一些小便条来提醒我们要做的事情.
wc命令:
这个命令可以以行数,单词数,字符数的顺序显示出一个文件中的内容.例如我们执行下面的命令:
$ wc test
而这个命令的执行结果如下:
1 1 6 test
在这个结果中我们可以看出在这个文件中有一行,一个单词,六个字符,以及文件的名字.
dir命令:
如果我们曾经用过DOS系统我想也许我们就不会对这个命令感陌生.事实上在Linux世界,dir=ls -l,这两个命令会给出我们同样的结果.当我们使用终端来使用FTP程序来上传和下载时这个命令就会显得更为有用了.(但是在我看来这个命令似乎与ls命令的执行结果相同)
pwd命令:
pwd命令会给出我们当前工作目录的详细路径信息.有时也许我们会不记得我们是在哪一个目录下进行我们的工作了,这时我们就可以用这个命令来显示路径.如我们执行下面的命令:
$ pwd
而命令的执行结果如下:
/home/mayuelong/Documents
这也就是我们正在当前的目录下进行我们的工作.
date命令:
date命令会给我们当前时间的详细信息.例如我们执行下面的命令:
$ date
而这个命令的执行结果常会是下面的样子:
日 8月 7 01:13:53 CST 2005
从这个执行结果我们可以看出当前的时间是2005年8月7日星期一,01:13:53.
如果我们只是想知道当前的日期,我们可以用下面的命令:
$ date +%D
如果我们只是想知道当前的时间,我们可以用下面的命令:
$ date +%T
如果我们想知道这一年的圣诞节,我们可以输入下面的命令:
$ date --date 'Dec 25'
这样我们就会圣诞节来的一天的信息.
而这个命令还有一些其他的选项,我们可以用$ man date或是$ info
date命令来得到一些更详细的信息.
cal命令:
cal命令会在屏幕上显示出日历.例如我们执行下面的命令:
$ cal
Linux就会在屏幕上打印出这个月的日历.其格式如下:
八月 2005
日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
如果我们指定年份,Linux就会在屏幕上打印这一年的日历.例如命令:
$ cal 2005
这个命令会使得Linux打印这一年的日历.
如果我们执行下面的命令:
$ cal 12 2005
这个命令会使得Linux打印出2005年12月份的日历.
如果我们指定选项-m,那么一个星期就会从周一开始,而在许多的国家中正是这样的.
exit命令:
exit命令可以使得我们退出终端.如果我们工作在文本模式下,输入这个命令以后系统就会提示要我们重新登陆.如果我们要以另一个用户登陆,我们可以使用logout命令.而如果我们工作X-Windows下,exit命令只是退出我们使用的终端.
下面的一些命令对于系统管理员来说是要经常用到的,因为我们需要了解我们系统的运行情况.
last命令:
我们可以使用last命令来列出今天登陆到我们的系统的用户以及他们使用的终端.例如我们执行下面的命令:
$ last
命令的执行结果如下:
mayuelon pts/3 Sun Aug 7 00:57 still logged in
mayuelon pts/2 Sun Aug 7 00:48 still logged in
mayuelon pts/1 Sun Aug 7 00:48 still logged in
mayuelon :0 Sun Aug 7 00:47 still logged in
从这个结果中我们就可以看出登陆到我们系统的用户名以及所使用的终端,登陆时间以及所使用的时间等信息.这样我们就可以很好的来了解登陆到我们系统上的用户的一些信息了.
df命令:
如果我们要了解我们的硬盘空间情况,我们就会常用到df命令.在Linux中已经有了许多图形界面的程序来告知我们的Linux分区可用的磁盘空间的情况.但这仍是一个快速的好方法.
例如我们执行下面的命令:
$ df
而这个执行结果一般如下:
Filesystem 1K-块 已用 可用 已用% 挂载点
/dev/hda8 14884620 5175180 8941136 37% /
/dev/shm 127468 0 127468 0% /dev/shm
这样我们可以很好的来了解我们的磁盘空间的情况了.
free命令:
我们可以用free命令来知道在我们的系统上内存的使用情况,如果我们执行下面的命令:
$ free
而命令的执行结果如下:
total used free shared buffers cached
Mem: 254940 242972 11968 0 16976 122196
-/+ buffers/cache: 103800 151140
Swap: 514040 0 514040
有时一些会运行得相当的慢,我们可以用这个命令来查看一下我们的内存使用情况.Linux的内存管理是相当的不错的,但是却是有一些程序会狂吃内存.如果我们发现了这样的程序,我们可以条掉他.
du命令:
我们可以使用du命令来查看一个文件的大小.这个命令可以作用到目录也可以作用到一个特定的文件.如果我们执行下面的命令:
$ du test
命令的执行结果如下:
8 test
在默认的情况下,du命令会显示出最接近于千字节的数.我们可以指定-b选项来以字节数显示:
如下面的命令:
$ du -b test
命令的执行结果如下:
510 ../test
从这里我们可以看出这个文件大约有510B的大小.
我们还可以将这个命令用于目录上.
top命令:
我们可以使用top命令来知道有哪些进程正在运行以及我们的系统正在做着什么.这个命令可以显示我们的CPU正在被如何的来使用.他会列给我们一个很详细的正在运行的事件的清单,包括进程的PID以及使用的CPU所占的百分比等情况.
ps命令:
我们可以用ps命令列出我们当前系统上下在运行的系统进程.如果我们只是输入ps命令,Linux就会列出我们作为用户正在运行的系统进程.如我们执行下面的命令:
$ ps
命令的执行结果如下:
PID TTY TIME CMD
2893 pts/2 00:00:00 bash
3686 pts/2 00:00:00 vim
3728 pts/2 00:00:00 bash
3729 pts/2 00:00:00 ps
如果我们忘记了我们的用户名,我们可以输入ps -u命令,这是用户模式,而我们的用户名就会在第一列显示,不过显示出来的却是我们的ID号.事实上这个命令还可以显示内存的使用情况以及其他的信息等.
我们还可以用命令ps -au来查看其他用户的进程信息.如果我们并不是网络的一员,那么这个命令只会查看我们以及root的进程信息.如果我们正在进行侦探工作,我们可以使用命令ps -a来看一下谁在使用哪一个进程.
kill命令:
kill命令是一个表达很明确的命令.我们可以用这个命令来结束一个程序的运行进程.我们可以用ps命令得到程序进程的ID或是PID.我们可以用kill加上一个PID来结束一个程序进程.换句说是我们杀掉了这个程序.这个命令只有在出现有麻烦的进程时才会使用.要杀掉一个进程首先我们要输入ps命令来得到程序的进程列表.例如我们可以用下面的命令来终止上面所列出的PID为3686的Vim进程:
$ kill 3686
这样我们就可以终止Vim程序了.
如果我们不想使用ps和kill这样的两步命令,而我们还知道这个程序的名字时我们还可以使用下面的命令:
$ killall vim
root用户在Linux的世界中拥有最高的权限.我们可以使用kill命令杀掉所有的进程.但是我们要注意的就是我们以root用户在使用这个命令时首先要运行ps -au,可不要把我们要用到的程序也kill掉啊.:)
如果我们不小心执行了命令$ find *,这样Linux就会查找所有的东西.如果要停止这样的查找过程,我们可以使用CTRL-C命令,而没有必要使用kill命令.
Linux的文件系统:
对于一个Linux新手来说刚接触Linux时会发现Linux的文件系统与其他的不同.所谓的文件系统也就是指Linux中数据的存储和管理方式.
在Windows或是Mac系统,用户可以通过单击图标和拖动文件来将文件复制到软盘或是一个硬盘的其他部分.则使用KDE或是Gnome的用户也可以用这样的方式来解决问题.如果我们要使用软盘一类的东西,那么我们就要在这里说一下Linux所使用的文件系统.
自Win95以来的Windows用户所使用的文件系统是vfat,而Linux所使用的是一个不同的文件系统,被称为ext2.当然了还有一些其他的文件系统的.我们可以选择同时在我们的机器上安装Windows和Linux系统.这样我们有时就会从硬盘的Windows分区中的进行文件的存取.我们可以使用mount来做到这一点.也许我们还会在这个命令中使用选项来表明我们正在试图联接是的Windows分区的vfat文件系统.
一样的道理,现在的软盘虽然是要淘汰的产品,但是也许有时还是要使用软盘来进行文件的存取的.在使用软盘进行文件存取之前我们还是要用mount命令的.如果这个人是一个Windows用户,那么我们还要是在命令中指明文件系系类型的啊.如果我们要从我们的Linux分区中向软盘存入文件,我们就要将我们要mount的软盘格式成为Linux的ext2文件系统了.
现在市场上销售的大多数软盘都是预先为Windows格式化好的.如果我们要将Linux文件拷入Windows格式的软盘中是不会有问题的.如果我们要将Linux文件拷入软盘是为了在另一个Linux机器上使用或是我们要以后再使用,那么我们最好还是要将其格成Linxu的ext2文件系统.格式软盘的工作也会被认为是一件系统管理的工作,我们要使用root的身分来进行.我们可以用下面的命令来格式化一个软盘:
$ mke2fs /dev/fd0
这个命令是"make an ext2 file system"的缩写.另一部分是设备名.正如我们以前所提到的,在Linux世界中所有的都是文件,包括硬件设备.
这时软驱就会发出一些声音,并且会在屏幕上显示出一些信息来.
这样我们就会有一个Linux格式的软盘了.我们可以用下面的命令来检测一下我们的软盘:
$ e2fsck /dev/fd0
在一些图形界面的管理工具中可以一次实现在格式和检测的工作的.
挂载文件系统:
正如我们在前面所谈到的一样,在Linux世界中软盘,光盘或者是硬盘的其他分区的组织方式与其他系统是不一样的.虽然Linux的一些图形管理工具可以提供给我们的单击图标以进入软盘,而这后面的方法是与其他的一些系统是不同的.在Linux世界,软盘或是其他的设备必须被挂载后才可以使用.这就意味着这些只是Linux系统中的临时文件,换句话,这只是告诉Linux这是我们要与之进行存取的文件.
我们可以使用下面的命令来挂载我们要使用的软盘:
$ mount -t ext2 /dev/fd0 /mnt/floppy
(我们只有用root用户来输入这个命令才可以.另外在Linux中一般挂目录在/mnt中)
这个命令会认为我们有一个软驱,而且我们要使用的软盘是一个Linux格式的软盘,如果我们要挂载一个Windows格式的软盘,那就将选项改为-t vfat,并且在我们的/mnt目录下有一个名为floppy的目录,如果没有,我们要自己建立一个(mkdir /mnt/floppy)
我们输入这个命令后,我们是在告诉Linux系统软盘是我们Linux文件系统的一部分,而且我们可以将我们要存放到软盘上的文件拷贝到目录/mnt/floppy中,就像这中是我们系统的一个目录一样.如果我们操作正确的话,当我们输入命令df后我们会看到关于软盘的信息.
现在如果我们要向软盘中拷贝文件,我们可以用下面的命令:
$ cp filename /mnt/floppy
如果我们要在软盘上建立我们的子目录,我们可以先进入软盘:
$ cd /mnt/floppy
然后就可以建立我们所需要的目录了:
$ mkdir mydirectory
我们也可以使用下面的命令将一个目录拷贝到软盘中:
$ cp -r directory /mnt/floppy
我们也可以用这个命令来挂载其他的设备.如我们可以用下面的命令来挂载光盘:
$ mount -t iso9660 /dev/hdb /mnt/cdrom
(光盘的设备有时会不同,所以挂载进也会有不同的命令)
在这个命令中,iso9660是标准的光盘文件系统./dev/hdb是指非SCSI类型的光驱,而挂载点为/mnt/cdrom,如果不存在这个目录则需要我们来建立这个目录.
也许有的朋友是在自己的电脑同时装有Linux和Windows系统,那么有时我们需要访问Windows分区,我们可以使用下面的命令来访问Windows分区:
$ mount -t vfat /dev/hda1 /mnt
在我们的硬盘分区中,/dev/hda1指Windows系统中的C盘,而/dev/hda2是指硬盘的逻辑分区,/dev/hda5是指Windows系统中的D盘,依次类推.
而有时因为编码的问题,挂载后的分区并不能很好的来解决中文显示的问题,我们可以用下面的命令来挂载:
$ mount -o iocharset=utf8 /dev/hda1 /mnt
这时当我们切换到挂的目录里用ls看一下,我们就会发现一些有趣的现象,在这里文件夹显示为蓝色而文件则显示为绿色(或是红色),我们不会像在Linux中用到的那样的多彩颜色,因为Windows的文件系统并不会区分文件类型.所有的东西看上去都像是二进制程序而不是通常的文件.
我们挂载的文件系统只是标准的Linux系统中的临时文件,当我们完成我们的工作以后,我们要卸载这些临时文件.卸载的命令如下:
$ umount /mount_point
这里挂载点就我们在挂时所用到的目录,这样就可以将我们挂载上的设备卸载下来了.
Linux系统沿用了UNIX的文件属主和权限的概念.这是因为Linux设计成为一个网络操作系统,不同的人会使用不同的程序或是文件.很明显这就存在着保持事物有组织和安全的需要.我们可不希望一个普通的使用者会使用一个可以清空整个系统的程序.这也涉及安全和隐私的问题.
正如我们以前所提到的一样,Linxu是一个多用户多任务的操作系统,这样Linux最大的优点就是不同的人可以使用同一台电脑或是同一个以不同的身分做着不同的工作.这也就涉及到了文件权限的问题.
如果我们在我们的一个目录下面执行命令ls -l我们会得到类似于下面的一些输出:
总用量 116
-rwxr-xr-x 1 mayuelong root 50920 7月 2 09:53 bitnet
从这个输出中我们看出bitnet这个文件创建于7月2日9:53,文件的大小为50920字节,这个文件属于root组群,他实上属于用户mayuelong,这只是一个文件.最左边则是文件属性的标记:
1 短横线将这个文件的属性分为三部分
2 第一部分是指属主(mayuelong)的权限.
3 最前的短横线表示这是一个普通的文件含有各种数据.如果是一个目录,那么最前面的将是字符d
4 第二个短横线后面的第二部分表示组的权限.在Linux系统中会创建不同的组来访问文件.
在一个文件的权限符号中有三个标记:
r 可读
w 可写
x 可执行
chmod命令:
chmod命令是我们在Linux世界是用于更改文件属性的程序.但是我们在前面所提到的一样,其他的用户是不可以修改你的个人文件的,但是也许我们希望他们连读的权限也没有,这时我们就可以使用这个命令来修改相应的权限.
这个命令的语法格式如下:
$ chmod [a/o/g/u] [+or-] [r/w/x]
前的标记是Linux系统中所有的四种概念的用户:
a 所有的用户
o 其他的用户(others)
g 组成员(group)
u 自己(user)
标记+可以增加文件的权限,而-可以减少文件的权限.
例如前面的例子,我们不希望其他的人读我们的文件,我们可以使用下面的命令:
$ chmod og-r myfile.txt
这样其他的人就不可以读我们的个人文件了.
我们前面还说过也许我们会Windows分区或是Windows格式化的软盘中拷贝文件.虽然这些文件并不是可执行文件,但是却会显示出这样的信息(-rwxr-xr-x).如果我们要将更改为正确的属性,也就是除去他的可执行属性,我们可以用下面的命令:
$ chmod a-x file
在这里我们要注意的就是如果我们在拷贝时是用的root用户,那么我们也要用root用户来执行chmod的操作.
在Linux系统中我们还可以使用数字来更改文件的属性.正如我们在前面说过的,一个文件的属性分为三部:一是属主的权限,一是群组的权限,一是其他用户的权限.这样我就可以分别用一个数字来表示这些权限.例如下面是一个用数字来改变文件的权限的例子:
$ chmod 644 list.txt
在这个命令中,6是指可读和可写,而4是指可读.在一个文件的三个权限中,可读,可写,可执行可以分别用4,2,1来表示.这样一个文件的属性就类似于一个算术的加减法.
例如我们在前面所使用的例子,我们希望除了我们自己组群以及其他人都没有任何权限,这时我们就可以用下面的命令来做到了:
$ chmod 600 myfile.txt
下面我们来介绍两个在实际中会使用到的例子:
在Linux世界中我们可以使用一个名为fetchmail的命令模式程序来收取我们的邮件.如果我们正在使用我们的电脑以不同的用户在完成不同的工作,这个程序就会显得更为有用.他会给不同的用户发送邮件.而这些不同的邮件地址存放在一个我们所建的一个名为.fetchmailrc文件中.这个文件中还包括收取邮件的用户名和密码.这时如果我们是联网的就要涉及一个安全的问题.这是我们必须使用chmod 600/chmod og-r来解决文件的权限问题.
我们下面再看一个实际中的例子.随着互联网的流行,网站就要友好和交互.使用脚本程序也就变得更为普遍.如果我们用perl写了我们自己的脚本程序,我们也要处理权限问题,使用用户可读,可执行,但是不可以改写脚本内容.这时我们可以用到下面的命令:
$ chmod 755 script
chown命令:
chown命令可以用来改变文件的所有权.chown就是指change owner,改变所有者的意思.但是他并不会改变文件的读写和执行的权限.这个命令虽然是一个所有都可以使用的命令,但是可能只有我们是root用户时才会使用到这个命令.这个命令的一般用法如下:
$ chown owner:group file
例如也许我们挂载上Windows分区以后为了结省时间直接用root用户来拷贝文件,这时这个文件的所有者就是root,只有root对这个文件有写的权限,而也许我们希望是我们是这个文件的属主,这时我们就可以用root用户来使用下面的命令:
$ chown bob:bob file
这样就可以改变这个文件的所有者了.由此可见当我们在使用不同的用户进行工作这个命令变会显得更为有用了.
备份文件
电脑并不是完美的.Linux是一个几乎完美的系统,但是如果有事情发生时就会造成数据的丢失.要避免这个问题的最好的办法就是要备份.在Linux中有两个程序来完成备份的工作:tar和gzip.
首先我们会使用tar程序.这个程序可以将许多的文件放入一个包中,常称为tar包.例如如果我们有下面的一些文件:
notes_1.txt
$ chown owner:group file
例如也许我们挂载上Windows分区以后为了结省时间直接用root用户来拷贝文件,这时这个文件的所有者就是root,只有root对这个文件有写的权限,而也许我们希望是我们是这个文件的属主,这时我们就可以用root用户来使用下面的命令:
$ chown bob:bob file
这样就可以改变这个文件的所有者了.由此可见当我们在使用不同的用户进行工作这个命令变会显得更为有用了.
备份文件
电脑并不是完美的.Linux是一个几乎完美的系统,但是如果有事情发生时就会造成数据的丢失.要避免这个问题的最好的办法就是要备份.在Linux中有两个程序来完成备份的工作:tar和gzip.
首先我们会使用tar程序.这个程序可以将许多的文件放入一个包中,常称为tar包.例如如果我们有下面的一些文件:
notes_1.txt
notes_2.txt
notes_3.txt
notes_4.txt
notes_5.txt
而现在我们将他们放入一个称为note的目录中.我们现在要做的就是备份这个文件并将他们放入软盘中.我们可以通过下面的命令来来将他们放入一个tar包:
$ tar -cvf note.tar notes*.txt
这个命令是tar我们要使用的程序名.我们要保证我们的电脑中有这个程序.下面的是一些选项:c(--create) v (--verbose,用来显示这些文件) f (--file,创建一个文件,在这个命令中最后一个选项必须是这个选项),然后是我们要创建的文件的名字和我们要备份的文件.
在这个命令中我们是假设在这个目录中还有其他的文件,而我们又不希望将这些包含其中,如果我们要这个目录下所有文件装入tar包,我们可以用*.*来代替文件notes*.txt.
如果我们要备份整个目录及其子目录,我们可以进入这个目录,然后执行下面的命令:
$ tar -cvf backup.tar *
但是这个只是我们备份的第一步,我们下一步的工作就是要使用gzip程序压缩这些文件.
正如我们前面所提到的一样,tar只是将这些文件放入一个文件,但是在大小上并没有缩小,也许这些文件会变得更大.如果我们要减少这些文件的大小我们可以使用压缩命令gzip.
如果我们要压缩我们的tar包,我们可以使用下面的命令:
$ gzip note.tar
这样这个tar文件就会被压缩了,我们也可以对一般的文件来使用这个命令,但是gzip就要是和tar包一起使用的.
这个命令的结果就是产生一个名note.tar.gz的文件.
这两个文件的扩展名就是告诉我们这是一个tar包而我们是使用gzip程序来压缩的.
我们还可以在tar命令中加入选项来一步完成打包和压缩的过程.如果我们加入z选项,然后指明要创建的是一个以.gz为扩展名的文件,这样我们就可以一步来完成我们要两步才完成的工作了.如上面的操作我们可以用下面的命令来做:
$ tar -czvf backup.tar.gz *
这里我们要记住的就是f必须是最后一个选项.
解包和解压缩
我们使用tar和gzip来备份文件,但是也许我们会在某一天需要解包和解压缩.来完成这个工作最简单的办法就是使用tar来完成整个过程.我们要确定tar包的位置,然后要问自己几个问题:
我们解压这些文件后是不是要对这些文件做一些修改?如果我们做了,那么这个tar就会成为一个旧的tar包.如果我们在同一个目录下解压,就会覆盖病在已经存在的这些文件.如果我们需要保存这些旧的文件,我们可以在一个不同的目录地行解压.如果我们不要这些旧的文件了,然后我们可以再创建一个新的tar包.
如果我们要解压一个tar包,我们可以用下面的命令:
$ tar -xzvpf backup.tar.gz
在这个命令中一些选项的含义如下:
-z 首先解压文件.
-x 从tar中释放文件
-v 显示释放的文件
-p 保存原始文件的属性
-f 使用这些文件
这样这些文件就被解压缩了,而我们原始的tar包也会被保存.
我们还可以分别的解包和解压:
$ gzip -d backup.tar.gz
或者是:
$ gupzip backup.tar.gz
(gupzip命令会自动运行-d选项)
如果我们只是压缩了一个文件我们可以用这样的方法来解压.
其他的压缩工具:
大多数的Linux发行版本还包含了其他的一些压缩工作.其中的一个就是Windows系统上著名的zip程序.如果我们要压缩一个文件给我们还在使用Windows系统的朋友,这个程序将是一个很好的选择.我们可以用man命令来得到关于这个命令的详细的信息.
bzip2
bzip2是Linux系统上另一个相当有名的压缩工具.Linux的系统内核就是用这种方式来压缩的.如果我们编译了我们自己的内核,那么就会有一个选择来生成bzip格式的压缩内核.这个命令的用法与gzip的用法相类似,我们也可以用man命令来得到更为详细的信息.
系统管理:
在Linux世界,root用户就相当上帝.这就意味着当我们以root身分在工作时我们就要十分的小心.也许是我们小小的错误就会给Linux系统带来损害.在我们开始以root用户身分进行我们的工作以前,我们最好先来认识一下.bashrc文件.最好地方法就是在这个文件中加上这样的几句,以保证我们Shell环境的全性:
#my own alias
alias cp='cp -iv'
alias rm='rm -i'
alias mv='mv -iv'
保存退出以后我们可以注销登陆,再重新登陆,这样我们就有一个相对安全的Shell环境了.当然了下面的命令也可以使得我们无需注销而使我们的配置文件生效:
$ source .bashrc
sudo命令:
正如一条船上不可能有两个船长,一个组织不能有两具领导人一样,在Linux系统超级用户只有一个root.然而如果我们是唯一的root用户,我们可以使用sudo命令来分配给我们的合作伙伴一定的root权限,也就是普通用户可以使用一定的root程序或是命令.在Linux系统中su是superuser的意思,当然也可以理解为switch user,因为我们可以使用这个命令在不同的用户之间进行切换.一般的Linux发行版本中都是有这个程序包的,如果没有我们可以到http://www.courtesan.com/sudo下载安装.如果我们已经安装了这个程序,我们就可以以root用户来执行下面的命令:
# visodu
这个命令可以使得我们可以编辑sudoers文件.
但是直接执行这个命令似乎是不可以,要指出这个命令的完全路径:/usr/sbin/visudo
例如下面的是一个sudoers的文件例子:
#
# This file MUST be edited with the 'visudo' command as root
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
User_Alias TRUSTED = mike
# Cmnd alias specification
Cmnd_Alias INTERNET = /usr/sbin/traceroute,/usr/sbin/ntpdate
Cmnd_Alias KILL = /bin/kill,/usr/bin/killall
Cmnd_Alias TOOLS = /bin/mount,/bin/umount
# User privilege specification
root ALL=(ALL) ALL
TRUSTED ALL=INTERNET,KILL,TOOLS
这个文件所写的是一些什么样的意思呢?
User_Alias TRUSTED = mike
在一句中指出mike可以信任的用户,我们信任他们什么?在第二句中指出我们可以放心的让他们来使用程序组:INTERNET,KILL,TOOLS.而这些命令是什么呢?在命令的定义中对这些命令组进行了定义.例如我们创建了KILL程序组,这样mike就可以杀掉那些只有root用户才可以杀掉的不能正常运行的程序了.这样就给予普通用户一定的root权限.
这样当一个普通用户来执行可信任的命令时只要用下面的格式就可以了:
$ sudo +command
例如,我们要挂载某个Windows分区,我们可以这样的用sudo命令来做了:
$ sudo mount /dev/hda6 /mnt/win_e
然后Linux会要求我们输入密码.如果我们犯了错误,sudo命令可是要嘲笑我们了.
这样我们就可以根据我们的情况在sudo命令中加入更多的可信任用户和可信任程序了.
su命令:
正如我们所一再强调的,当我们在以root用户工作时,我们一定要万分的小心.这样才至于给我们的系统造成损害.来保护我们自己的方法除了在.bashrc文件中加入alias命令以外,我们还可以使用su命令来执行一些root的命令.
su命令可以使用我们以其他的用户登陆却可以执行root的命令或是程序.在Linux系统中远程登陆是不可以使用root用户,所以我们要远程登陆的话,su命令是不可代替的命令.我们可以以一个普通的用户登陆,然后用su命令来执行root程序.
例如我们执行下面的命令:
$ su
这样Linux就会要求我们输入root的密码.我们在输入正确的密码以后就可以用root来工作了.使用su命令一个最大的好处就是我们可以执行单个的命令.例如我们以tar包的形式下载了一个程序.我们可以将这个源码包下载到我们的一个目录中,然后使用一个可以执行./confiugre和make命令的用户进行操作,当我们要安装时,我们可以用su命令来完成.这时我们可以执行下面的命令来进行安装:
$ su -c "./make install"
在这个命令中我们需要加入-c选项来执地实际的引用命令.然后我们输入root密码后就可以开始我们的安装进程了.
su命令不仅可以执行root的命令,而且还可以执行其他用户的命令.例如下面的命令:
$ su bob -c "less /home/bob/file"
如果我们知道bob的用户密码,我们就可以使用这个命令了.
安装程序:
作为系统管理员,一个最重要的任务就是要安装程序.这也意味着要卸载程序.安装卸载的方法取决于我们正在使用的Linux的发行版本.当然了也还有一些其他的因素,例如是开发者和开发商提供的安装脚本.现在市场上的一些主要的发行版本是有一定的区别的,每一个发行版本都采用自己的安装包管理机制.下面就市场上的几个主要的发行版本介绍一下Linux上软件的安装方法:
Slackware:(http://www.slackware.com)
Slackware的安装包是以.tgz为扩展名的,安装程序的命令为:
# installpkg program.tgz
在安装程序的时候我们可以使用-warn选项,这样我们就可以知道我们正在安装的程序文件的名称了.
卸载程序可以用下面的命令:
# removepkg program.tgz
这样这个命令可以移除程序以及一些相关的文件,例如文档等.
我们要更新安装程序可以用下面的命令:
# upgradepkg new_version.tgz
这样就可以将我们的安装程序升级到一个新的版本了.
Debian GNU/Linux(http://www.debian.org)
Debian是另一个被认为是纯粹主义者的发行版本,所谓的纯粹是指许可的纯粹.只有真正的开源软件包才可以进入Debian的官方发行版本中.但是这并不是说不可以使用非官方的软件包,而事实上人们是经常这样做的.在Debian系统中,软件包是deb为提高扩展名的,安装一个软件包我们可以用下面的命令:
# dpkg -i package.deb
这样就可以在我们的Debian系统上安装新的软件包了.
也许Debian系统是保持系统更新最容易的系统了.所以这样的说是因为他的apt-get系统.apt代表Advanced Package Tool.如果我们有一个很好的带宽联接,我们就可以用这个管理工具来升级我们的系统了.要使用这个管理工具,首先输入:
# apt-setup
这样他会询问我们一些关于我们要取得软件包的镜像以及一些相关的信息.然后我们就可以自由的来使用这个工具了.
如果要简单的安装一个程序我们可以用下面的命令:
# apt-get install new_package.deb
这样他就会在远程的服务器上查找这个软件包并进行安装.这个方法更好的优点就是他可以自动的解决一些软件包的依赖关系.这样就会为我们省去不少的麻烦.
如果我们要卸载一个软件包,我们可以用下面的命令:
# apt-get remove unwanted_package.deb
这个管理工具最大的优点就是我们可以用这个来更新我们的系统.如果我们要更新我们的系统,先输入下面的命令:
# apt-get update
然后输入:
# apt-get upgrade
这样就可以使得我们的Debian系统时刻保持最新了.
(注:在使用apt时可以不带扩展名,只要指出软件包的名称就可以进行升级和安装)
Red Hat(http://www.redhat.com)
在现在的Linux市场中最流的三个商业发行版本是Red Hat,SuSE,Mandrake.他们都是采用最流行的RPM(Red Hat Package Managment system)软件包管理方法来安装和升级Linux程序.
安装一个RPM包可以用下面的命令:
# rpm -i new_program.rpm
-i选项意思就是安装(install).这个命令就会简单的将Linux程序以及一些相关的文档安装在我们和计算机上.如果我们还不能确定这个软件包是否已经在我们的计算机上安装,我们可以查看一个已经安装的软件包列表,然后pipe管道导出.例如我们要查看我们是否已经安装流行的Apache模块,我们可以用下面的命令:
# rpm -qa | grep mod_
这个命令可查看我们的软件包的名称以及版本号.如果有新的版本了,我们可双提供者的FTP站点上下载亲的RPM包来开更新我们已经有的RPM包:
# rpm -F new_improved_package.rpm
也许我们更关心的是我们下载下来的程序的安全性.在以前就有过类似的例子,有的破坏者在更改我们要下载的软件包.RPM系统给我们提供了一个证明我们下载的RPM软件包的权威性和是否被更改的方法:
# rpm -v -checksig some_package.rpm
这个方法的前提是:
1 我们已经安装了gpg(GNU project's Pretty Good Privacy)
2 我们可以取得我们使用的Linux发行商的公共密钥.
下面我们要简要的说一下两个新的发行版本:LindowsOS和Xandros.他们都是微软Windows的替换品.如果我们已经使用了一段时间的Linux就会发现他们在商业,科学和技术上的局限.使用这些发行版本的人都是Linux用户组织形式的敌对者.他们还使用M$的模拟器WINE来运行没有太大用处的Widnows程序.所以他们的使用环境只是家庭或是办公室.他们都是基于Debian系统的,所以Debian系统的安装和升级方法也适用于他们.
Gentoo Linux
在Gentoo Linux系统中安装和升级的方示是Portage.这个工作是用emerge命令来完成的.
如果要取得Gentoo Linux最新式安装程序,我们可以用下面的命令:
#emerge rsync
然后执行:
#emerge -up system
然后我们就可能性安装新的软件包了.在安装的时候最好加上-p选项,这样就可以检查软件包的依赖性:
#emerge -p PACKAGE-NAME
我们还可以使用-u选项来升级我们已经安装的软件包:
#emerge -u PACKAGE-NAME
如果我们要得到更多的Gentoo Linux的系统管理方法,我们可以参考他们的文档:
http://www.gentoo.org/main/en/docs.xml
通用软件包安装方法:tar包
正如我们前面提到的,每一个发行版本都有自己的软件包安装和升级的方法.但是也有许多的开发者,他们只是提供他们程序的源码包.这并没有什么可担心,我们只要几步就可以使用他们的程序在我们的计算机上安下家来.
我们首先要做的就是下载下来我们所需要的源码包.例如我们下载下来的tar包名为nice_network_monitor_app.tar.gz并且放在一个我们喜欢的目录.然后我们要将这个包解压在这里:
$ tar -xzvpf nice_network_monitor_app.tar.gz
然后我们进入解压后的目录,查看一下INSTALL或是README文件.然后执行下面的命令:
$ ./configure
这上命令用来检查我们现在的系统中是否存在要编译和运行这个程序所需要的库以及其他的所需程序.如果能够顺利通过就会生成make文件,然后我们执行下面的命令:
$ make
这命令就会进行编译以生成可执行文件.这一步结束以后我们的要做的就是安装程序了:
# make install
(通常这个安装命令只有root用户可以执行)
这样这个程序就会被安装到作者主认为他应在那里运行的地方,一般的是/usr/bin或者是/usr/X11/bin或是直接放在/bin目录.
系统备份:
作为一个系统管理员,第二重要的工作就是要备份系统数据,有人认为是这个作为一个系统管理员最重要的工作.正是因为数据使得计算机显得如此的重要.事实上现在的商业活动都是要依赖于计算机才可以更有效的来进行.
尽管备份系统数据是如此的重,但是备份数据却是作为一个系统管理员来说最容易的和最少体力的活动.因为在我们决定了要备份哪些数据,何时备份,备份在哪里以后,所有的工作可以由Linux来自动的完成.
备份系统数据最常用的方法就是使用磁带.如果你的手头正好有一个,我们可以用下面的命令来备份我们的整个系统:
$ tar -cf /dev/ftape /
在这里有一个很重要的问题,那就是磁带的空间要足够的大可以使得我们备份整个系统.但是如果不是这样的,我们可以用下面的方法:
$ tar -cMf /dev/ftape /
加入-M选项以后Linux就会磁带满以后提示我们插入新的磁带
另外的一个备份方法说是将我们的数据放在其他的计算机上.而且这是一个最有效率的工作,我们可以设置一个cron来自动完成所有的工作(所谓的cron就是一个按照事先安排的时间来自动完成工作的后台程序.)
首先我们要制造一个tar包.这一次我们是将一个目录的内容打包.
$ tar -czpf mystuff.tar.gz /hom/acme-inc/
现在我们就有了一个整个目录/home/acme-inc/的tar包.现在我们的工作就是要将这个tar包放在我们网络上的另一台计算机上.
第一种方法是一个虚构(fudge)的方法.但是我并不是他不是一个很好的方法.如果在我们要备份数据的计算机上安装有网络服务器,这就是一个相当不错的方法.例如如果我们用Apache架设了虚拟(Virtual)站点(Website),我们所谈到这种方法就是很理想的而且是很容易设置的.我们可以对这些站点进行备份而且可以安全的将这些备份放在我们网络上的另一台计算机上.
我们需要的就是在我们的目标机上要安装有wget程序.(所谓的目标是指我们要存放备份数据的计算机).wget是一个可以通过HTTP或是FTP协议来取得文件的实用程序.我们使用这个程序是因为他可以相当容易的取得我们的tar包,因为我们知道这个tar所在的确切地方.而且wget是一个非交互的程序.我们可以通过下面的方式来设置我们的cron程序并且使他工作:
$ wget +主机URL
现在我们已经做了tar包,我们最好的方法就是将这个tar包拷贝到我们机器网络服务器的根目录,一般来说这个目录是/var/www.不过要根据不同的发行版本来确定这个目录.我们只需要执行下面的命令来将这个文件拷贝或是移动到目标目录:
$ cp mystuff.tar.gz /var/www
现在这个文件就位于/var/www/目录下.如果在我们的本地网络中这个机器名为hal9000,而在我们的其他机器上就可以执行下面的命令来取得这个文件:
$ wget http://hal9000/mystuff.tar.gz
我们可以写一个脚本程序来完成第一部分的工作.这个脚本如下:
#!/bin/sh
#script to create backup file and
#copy it to webserver directory
#create tarball
tar -czpf mystuff.tar.gz /home/acme-inc/
#move/copy tarball
#change cp to mv if your partioal to moving it
#fell free to change /where/it/is to the real place
cp /where/it/is/mystuff.tar.gz /var/www
#end script
我们将这个文件命名为backup_script,并且将其设为可执行文件:
$ chmod u+x backup_script
我们可以将这个放在我们的crontab中当我们希望的时候我们就可以执行他.使用下面的命令来编辑这个文件:
$ crontab -e
我们在前面所说的例子并不安全.我们只是简单的介绍了一个这个想法.对于我们使用这个方案的人来说,我们希望的是将我们的tar包拷贝到公共的服务器上成为可能.如果我们的服务并不是对公众开放,只有一些局域网内的连接,这也是没有问题的.只要我们在文件中有一些必须的信息,我们就不必须对公众开放.然后我们就可以实行下面的计划.
这个计划相对来说要安全得多,但是也要复杂一些.这就像是我们的生活,我们打开我们的大门要比在大门上加一把锁来得容易得多,但是明显地加一把锁要安全得多.但是要实行这个计划也要求在我们的计算机上安装一些先决的条件,我们必须有OpenSSH的服务器和客户端.这个要依赖于scp(Secure copy).我们也需要expect软件包.这是在的expect是一个交互的程序,不同于我们上面所谈到的wget.
我们用同样的方法创建一个tar包,但是这一次我们并不是将他拷贝到网络服务器的主目录下,而是将他放在其我们创建的地方.scp程序会按照我们所说的取得这个文件.为了实现这个计划,我们要修改一下我们刚才的脚本并且要再写一个脚本程序.我们所修改的脚本如下:
#!/bin/sh
#script to create backup file and
#scp it to another machine in our network
#create tarball
tar -czpf mystuff.tar.gz /home/acme-inc/
#call the expect script
./automate_scp mike@merlot:/home/mike PASSWORD
#end script
在这里我们所做就是调用automate_scp将这个文件移动到我们网络中一个名为merlot的机器上我的主目录下.我们真正的密码就是已经在我们所看见的PASSWORD中给出.这是一个潜在的安全冒险.所以我们要将这个文件的权限设为0700,这样其他的登陆到这个系统的人就会看到这个文件了.现在我们来创建名为automate_scp的脚本:
#!/usr/bin/expect -f
#tell the script it should be looking for a password
set password [index $argv]
#use scp to copy our file
spawn /usr/bin/scp mystuff.tar.gz [index $argv 0]
#be on the look out password
expect "password:"
#here comes the password
send "$password
#that's all folks!
expect eof
我们要备份系统时最好是有选择的来备份数据.在大多数的情况下,我们并不一定要备份所有的数据.最好的办法就是我们建立一个文件,在这个文件中包含着我们真正感兴趣的以及如果我们的硬盘发生了问题我们希望找回来的数据.首先我们要建立一个文件:
$ ls -al > backmeup
这里的al选项做了两件重要的事,一个是-a会列出这个目录下所有的文件,而这里的-1可以保证我们列出的内容只在一列显示.这样就会方便我们的编辑工作.现在我们只要进入这个文件来决定哪些是我们真正想要的而哪些不是我们想要的.在我们编辑好这个文件以后我们就可以用下面的命令来创建我们的tar包了:
$ tar -czvpf backup.tar.gz `cat backmeup`
注:这里使用的是反引号.
这个命令中cat命令将执行的结果传给tar命令,tar命令就会以基于这个执行结果来创建tar包.
我们还可以通过查看文件是否发生改动或是是否有新文件产生,我们可以阶段性的备份.一般的我们可以用find命令来查看在一段时间文件是否发生改动,然后决定这个改动是否是我们所需要的.这就是所谓的增值备份.例如我们用下面的命令来创建我们的tar包:
$ tar -czvf acme-complete.tar.gz /home/acme/ >/home/acme/YYMMDD.complete.log
这里我们将整个目录创建为一个tar包.使用-v选项来将我们备份的文件导入一个日志文件.这是一个可选的选项,但是很快我们就会发现这是一个很有用的办法,告别是我们要创建增值备份的时候.我们可以在以后的时候运行diff实用程序来查看日志文件来了解我们的工作.如果我们的这个命令的执行结果显示并没有太大的不同,也许我们就不会再做下一步的备份工作.我们可以用下面的命令来做我们的增值备份:
$ fine /home/homedir -mtime -1 print | tar -cvzf acme_complete.tar.gz -T - >
YYMMDD.bkup.lop
在这个命令中我们使用选项-mtime -1 -print,我们可以查看在过去的一天内是否有文件被修改可是创建.这个结果用管道导入tar命令然后这些文件就会被加入到原始的tar包中.如果我们是每周做备份而不是每天做备份,我们就可以将-1改为=7.
我们可以手动来做这样的工作,但是如果我们用下面的脚本来做就会是一个更好的方法:
#!/bin/sh
#get the date in YYYY-MM-DD format
this_day=`date +%Y-%m-%0e`
#make the backup and create log file for each day
find /home/acme -mtime -1 -print | tar -czvf acme_complete.tar.gz -T - > $this_day.backup.log
然后我们就可以这个文件放我们喜欢来存放备份的地方.
我们还可以将数据备份到光盘上.首先我们要建立一个我们要放在光盘上的备份数据镜像,我们可以用下面的命令:
$ mkisofs -o ace_bkup.iso -R -v /home/acme/
-o选项必须放在我们要创建的镜像名的前面.-R选项可以使得文件能够保持原始的文件名.这对于Linux来说是相当重要的.我们并不希望我们的文件最后看起来像是MS-DOS的文件.-v选项可以打印出我们备份的文件.现在我们就可以将这个镜像放在光盘上了.我们可以使用下面的命令来做:
$ cdrecord -v speed=2 dev=2,0 acme_bkup.iso
在这个例子中我们是假设CD-RW的设备为2,0.我们可以用下面的命令来检测:
$ cdrecord -scanbus
另外在这个例子中我们使用的是双速,当然这个是可以改变的.
这些都是命令行的选项,所在当然可以把他们组合起来用脚本程序来自动的完成.
帐户管理:
作为一个系统管理员,不论环境的大小,我们的任务之一就是在我们的系统上添加帐户.这就是说给一个人一个用户帐户,使他可以登陆我们的网络中中一台或是几台机器.这时我们要依据我们自身以及公司的条件来决定给予这个多大的权利.
首先我们来看一下给系统添加帐户的一般方法.现在大多数的发行版本都提供了图形化的管理方式来管理我们系统上的用户.还有一些发行版本例如Debian提供了简单的命令行工具来添加用户帐户.如果我们执行下面的命令:
# adduser
这时Linux就会提示我们的输入登陆使用的用户名.我们可以选择一个我们所喜欢的名字作为我们的登陆名.例如下面的命令就添加了一个名为susan有的用户名:
# adduser susan
当我们的添加一个用户时我们要考虑以下几个问题:
1 在我们的用户中不要带有空白符
2 避免在我们的用户名中使用连接符和下划线.
3 不要使用过长的用户名.
如果我们希望在我们创建用户帐户时有更多的控制选项,我们可以使用标准的命令行工具useradd.让我们来看一下我们可以使用的选项.首先我们执行下面的命令:
# useradd -D
我们就会看到用户帐户是如何默认添加的:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
在这个例子,所有的用户帐户都会被添加到user组中.如果我们查看一下/etc/group,我们就会看到在我们的系统上列出的所有的组.我们就会看到100所指的为user用户组.这是系统默认的情况.正如我们已经知道的,一个添加到系统的帐户要用一个目录来保存用户的文件.这在Linux系统中默认的是/home目录.而INACTIVE=-1是指用户帐户过期的时间.在我们的这个例子中是永不过期.有时我们会添加一些临时的帐户,我们所希望的是在一定的时间以后我们要删除关于这个帐户的所有内容.但是就是一个最好的系统管理员有时也会忘记这样的事情.所以我们就要设置一个用户过期的时间,这样在这个时间以后这个用户就不可以再登陆系统了.而下面的SHELL=/bin/bash则是指用户登陆到系统以后所使用的Shell.Bash是Linux发行版本中标准的Shell,当然作为一个系统管理员我们也可以来安装其他的Shell.最后一项对于我们系统管理员来就是会显得更为重要.SHELL=/etc/skel意味着位于这个目录下的文件在我们创建用户帐户时会被拷贝到用户的主目录.也许我们想要在这个目录添加其他的文件或是我们对这个目录中的文件进行更改.例如我们要在.bashrc中添加新的行,以使得他对于用户来说更安全:
alias cp='cp -i -p'
alias rm='rm -i'
alias mv='mv -i'
也许我们要添加下面的一句来使得我们的用户登陆时提示显得更漂亮:
PS1='\[\033[45m\]\[\033[1;33m\][\@]\u@\h:\W >\[\033[0m\] '
如果我们不喜欢现在的颜色我们可以更改45m和33m的值.
如果我们要在添加用户时有更多的选项,我们可以查看man手册页来得到一些更详细的帮助信息.下面我们来看一个添加帐户时最平常的选项:
# useradd -c "William Shakespeare -AKA,The Bard" -d /home/wshakespeare \-m -k
/etc/skel -g 100 -s /bin/bash wshakespeare
下面来看一下我们在这个命令中所做的工作.我们添加了William Shakespeare作为我们系统上的一个用户.这里的-c选项是一个简单的注释,必须在引号和用户密码文件/etc/passwd的帮助说明之间.而-d选项指出我们要在哪里建立用户目录.-m选项建立这个目录,-k选项要将下面的目录中的文件拷贝到用户目录中去.-g选项指出我们要将这个用户放在哪一个用户组中.-s选项指出这个用户要使用的Shell,而最后的则是我们要添加的用户登陆名.
也许我们也看到了我们并没有用-p选项来指定密码.在我们执行了这样的命令以后,我们的用户Shakespeare还没有,所以还不可以登陆.这就是一点点的复杂.在现在的大多数的Linux发行版本中使用影子口令系统.这是一个加密在的口令所以我们系统上的其他人是不可以看见的.现在我们遇到的问题就是我们添加了一个用户帐户我们需要一个已经加密的口令来使用用户正常的登陆,例如我想给这个用户一个密码"h4m13".如果我们用-p选项来指定这个密码,那么Linux系统就会拒绝我们的登陆请求,因为我们的这个密码并没有经过密.如果我们查看一下/etc/shadow文件我们就会看到经过加密的口令的样子.在Linux系统中这种加密采用的MD5的加密算法.如果我们要为用户指定一个密码,我们可以用下面的命令来做到:
# passwd user
作为一个系统管理员,我们也要删除帐户.要删除帐户我们可以用下面的命令:
# userdel wshakespeare
在这种情况下我们只是删除了wshakespeare的用户帐户,但是我们并没有删除他的用户目录和文件,如果要删除所有的wshakespeare内容,我们可以使用-r选项:
# userdel -r wshakespeare
这样就会删除他的所有内容,包括他的电子邮件.所以我们使用这个选项时一定要小心.
目录权限:
一个目录也可以像文件一样给予一定的权限.如果我们查看一下Linux中的目录,我们就会大多数的目录都有着类似的权限设置:drwxr-xr-x.这里的d用来区别这是一个目录,而不是一个文件.这与平常的权限设置也是一样的.但是有一个小小的不同.如果我们查看一下/tmp目录我们就会发现在这样的权限设置:
drwxrwxrwt 14 root root 4096 Aug 12 09:52 /tmp
许多程序执行时都要产生临时文件,所以组和其他的用户对这个目录都有写的权限.但是在这个权限设置中最后一个t是最重要的不同.这就是所谓的粘性位.在一般的情况下,如果我们对一个目录有写的权限,我们可以在这个目录中创建文件,也可以删除目录中的文件.而不论这个文件是不是我们创建的.如果有粘性位我们就不可以这样的做了.除非这个文件是我们创建的,否则我们是不可以删除他的.也就是说任何人都可以在有t的权限设置的目录中创建文件,但是只有拥者才可以删除这个文件.
我们可以这样的来测试一下:
我们创建两个目录,一个名为jack,一个名为jill,我们对jack目录这样的来设置权限位:
$ chmod 1777 jack
进入这个目录,建立一个文件:
$ touch pail_of_water
再设置另一个目录的权限位:
$ chmod 0777 jill
并且建立另一个文件:
$ touch up_the_hill
自动完成任务:
作为一个系统管理员,主要的任务之一就是要完成服务器的维护工作.大多数的这些任务都可以自动完成而不需要用户的干涉.在这一部分,我们将会谈到一些用这样的方式来完成工作的广泛用的程序.
at用法:
at程序可以用来执行命令,而且这样的命令只是执行一次.这个命令较为常见的用法是用在安排好的选定的条件下.如果我们希望我们公司的服务器每周六重启,那么at命令并不是一个有效的命令,而这样的工作可以由cron来完成.现在我们来假设,老板要求我们在1:00开会.这时我们就可以用来at命令来提醒我们了.我们可以在我们的系统中输入下面的命令:
# at 12:45
这样就会使得我们在开会前会有较多的时间来完成我们的一些准备工作.我们就会看到at提示:
at>
现在我们就可以输入一些我们要执行的命令了.我们在这里输入命令,这个命令可以告诉我们最近登陆到我们的服务器的人并且将其输入到文件'log-ins'中.由分号分隔的第二个命令则会打印出这个文件:
last > $HOME/log-ins;lp $HOME/log-ins
按下回车并按下CTRL-D来结束我们的输入,我们就会看到类似这样的输出提示:
job 15 at 2005-09-03 21:00
当然我们的工作的标号会随着我们使用的at命令而会有所不同.
我们可以有多种的方法来表明在哪一个时间我们希望at执行命令.我们甚至可以在teatime时间来执行我们的命令.这个时间是指下行4:00.
如果我们要at的命令队列中删除一个命令,我们可以用下面的命令;
# atrm 15
这个命令可以从at的命令队列中删除标号为15的工作.
如果我们要查看在at队列中的命令,我们可以用下面的命令:
# atq
我们还可以控制哪些用户可以使用at命令.在默认的情况下,/etc/at.deny控制谁不可以用at.也就是说在文件at.deny中列出的用户不可以使用这个命令.我们也可以建一个/etc/at.allow文件.有了这个文件系统就会忽略掉at.deny文件.所以没有在at.allow文件中出现的用户就不可以使用at命令.使用这个文件还是另一个文件就会在我们的管理风格中成为一个问题.如果我们希望用户可以做任何事直到他超出了他的权利范围,我们可以使用默认的at.deny文件.如果没有人使用这个命令,我们可以使用at.allow文件.但是在这里我们要记住的就是root用户总是可以使用at命令.
cron:
从一个系统管理员的角度来看,cron也许是最好的选择.我们可以在任何时间指定任何事.
我们可以有多种的方法来安排我们的要用cron来完成的工作,最常用的方法就是使用crontab.一般情况下,每一个用户都可以通过编辑来拥有一个工作的安排时间表.我们可以在其中加入或是删除我们所希望的工作.要编辑这个文件我们可以用下面的命令:
# crontab -e
在我们开始我们的工作安排之前明白这个文件的格式是相当重要的.crontab文件的语法格式并不是很容易掌握的.在这个文件中每一行会被分为几个部分.按照顺序,每一部分的含义如下:
Minute Hour Day(of the month) Month Weekday
我们并不会在同一个时间使用到所有的选项.如果我们使用了前四个,那么我们就不再需要最后一个了.最后一个选项是相当有用的,因为他可以使得我们在每个星期运行我们的工作.如果我们不想指定一个时间段,我们就要在相应的地方用*来代替.
一旦我们决定了要运行哪一个命令,我们就可以在文件的最后加入这个命令.所以一个常规的crontab文件类似于下面的样子:
30 3 * * 0 $HOME/bkup_script
这个命令的是在周日3:30运行我们主目录下的脚本来备份我们的文件.在我们输入这个命令后,我们就可以保存退出了.
如果我们要列出在crontab文件中列出的工作,我们可以用下面的命令:
# crontab -l
如果我们要删除crontab文件,我们可以用下面的命令来做到:
# crontab -r
我们还可以通过组合数字与字符来修改命令的执行.例如下面的例子:
0-59/1 * * * $HOME/shutoff_cam >/dev/null 2>&1
我们可以看到时间的一部分:0-59是指每一个小时的0-59分钟.
在大多数的Linux发行版本中在/etc目录下会有三个目录,cron.hourly,cron.daily,cron.monthly.正如我们所猜想的一样,这些目录可以使得系统不管理员每个小时或是每星期来运行工作.
在现在的世界中,可以说Linux已经是相当的普级和流行了,虽然还没有达到Windows那样的地步,而且要达到那样的地步还有好长的路要用.有越来越多的人认识到了Linux的优秀并且开始学习使用Linux.然而对比Windows而言,Linux的入门确实是要难一些的.而且要真正的学习和使用Linux还有许多的命令要学,而且一些的配置也要我们自己来完成.本来呢Linux这样做是为了给用户最大的自由,可是对于一个Linux新手来说,这却是很大的一个困难.甚到还有的人认为Linux是像DOS一样的东西.为什么会有这样的说法呢?因为在他们看来要学习Linux就得学习一些命令,这不正是DOS的做法嘛!现在流行的操作系统都提供了优秀的图形界面,一些常用字的操作我们只需要轻点鼠标就可以完成.其实这在Linux的世界中也可以做到的.Linux可以采用Gnome,KDE以及一些其他的窗口管理器,也可以方便的来完成我们的操作.但是Linux不是Windows.每一个认真的来使用Linux人都应该学会一些常用的Linux命令,只有这样我们才可以体会到Linux的强大和优秀.
在Linux的世界中我们执行命令可以使用Shell,所谓的Shell就是一个和Linux内核进行交互的接口,而我们的所谓的Linux命令或是Shell命令正是通过和Linux内核的交互来完成的.在现在的Linux世界中最流行的Shell是Bash,当然了还有一些其他的优秀的Shell可以供我们来使用,例如说Csh或是Ksh等等.
在我们开始我们的Shell命令之前我们应先来认识一下我们用户主目录下的.bashrc文件.这是Bash的配置文件.在Linux的世界是有许多这样类似的配置文件.这样的配置文件为我们提供了极大的自由,我们可以在其中加入我们自己所喜欢的任何内容.现在也许你会说我并没有看见这个文件啊.事实上这是一个隐藏的文件,在Linux中所有的隐藏文件名都是以.开头.这样的文件多是一些配置文件,隐藏起来正是为了避免用户的误操作.我们可以通过命令ls -a为查看.这个命令会列出当前目录下所有的文件,包括隐藏文件.当然了我们在用图形界,可以在查看中勾上显示隐藏文件就可以了.
下面我们来认识一下所谓的别名的问题:所谓的别就是一个名称的另一种说法,在Linux中可以用alias来实现.例如下面的命令:
alias cp='cp -v -i'
在我们执行了这样的命令以后,当我们执行cp命令时实际上执行是cp -v -i命令.cp是复制文件的命令,还可以以另一个文件为进行复制.在这里我们有必要说一下Linux中命令的构成.在Linux世界中一个命令是以空格来区分的,例如上面的命令中Linux会将cp解释成为一个命令,而短横线-后的内容会被认为是这个命令的参数.但是命令和参数必须要用空格,否则就会被认为是另一个命令,从而会有其他的结果.可以单个列写参数,也可以像-vi这样来列写参数.而上面的命令说的就是当我们在执行这个命令时要先询问,在命令执行后要显示了命令的执行结果.
同理我们还可以设置以下的命令:
alias rm='rm -i'
alias mv='mv -i'
rm命令是一个移除文件的命令,这是一个相当危险的命令,如果我们进行了误操作,那么这个文件是不可以再找回来的,也许我们辛苦一天的结果就这样被丢弃了.所以我们设置这样的别名,当我们执行这个命令时,Linux会进行询问.
mv命令是一个移动文件的命令,这个命令也可以实现更改文件名的功能.我们设置了这样的别名,这样我们在进行操作前Linux会发出询问,从而保证安全性.不会因为误操作而导致想不到结果.
我们可以将这些命令加入.bashrc文件中:
#my personal alias
alias cp='cp -v -i'
alias rm='rm -i'
alias mv='mv -i'
这里以#开头的Linux会认为这是注释而不加解释.
这样在我们注销再登陆后这个文件就可以发生作用.经过样的配置以我们就有了一个安全的Shell环境了.如果我们不注销我们可以使用下面的命令来使这个文件发生作用:
source .bashrc
如果我们安装了类似于KDE这样的窗口管理程序,我们就可以在图形界面利用鼠标操作来完成文件的复制,删除,移动和重命名等操作.然而作为一个Linuxer来说我们应该掌握这些我们会经常用到的Linux命令.
cd命令:
cd命令是更改当前目录的命令(change directory)
cd /[directory name] 这个命令会使我们进入Linux的系统文件夹
cd .. 这个命令会使我们退出当前目录回到上一级目录
cd [sub-dirctory name] 这个命令会使我们进入子目录sub-dirctory name
在Linux中我们的命令并不一定要输入完全,当我们输入几个字符时按下<Tab>键,Linux会自动补齐其他的部分.这可以大大加我们的输入速度.
cd 这个命令会便我们回到我们的用户主目录
ls命令:
ls命令是列出文件或是文件夹的命令
例如ls命令可以列出当前目录下的文件或是文件夹
而ls -a命令则可以列出当前目录下的所有文件和文件夹,包括隐藏的文件
ls -l命令则可以列出当前目录下文件和文件夹的详细信息.这个输入格式如下:
-rwxr-xr-x 1 mayuelong root 50920 7月 2 09:53 ../bitnet
在这个格式化中第一部分是文件的属性,接下来是指1个文件,mayuelong则是指文件的属主,root是指组群,下面的数字是指文件的大小,后面的日期则是文件修改的时间.
ls命令还有一些更灵活的用法,如ls a*则是列出当前目录下的所有以a开头的文件.
ls其他的命令参数:
ls -l -t 这个命令会按照生成时间的新旧列出当出当前目录下文件的详细信息,在这个信息列表,最新生成的文件会列在前面.如果我们想按照相反的顺序列出可以使用下面的命令:
ls -ltr
这里的r是指逆序.
ls -lS
这个命令是按照文件由大到小的顺序列出文件的详细信息,而下面的命令则是按照由小到大的顺序列出详细信息:
ls -lSr
ls -lX
上面这个命令会按照字母的顺序列出文件的详细信息,如果有以.zip结尾的则列在最后.如果我们想以逆序列出可以使用下面的命令:
ls -lXr
我们还可以通过命令ls --help来得到一些更详细的帮助信息.
在Windows中是通过文件的扩展名来识别文件类型的,例如.exe是指可执文件,.txt是指纯文本文件.而在Linux世界则不是这样的.在Linux并没有扩展名的区别.我们可以通过命令file来使Linux告诉我们这是一个什么类型的文件.例如下面的命令:
$ file Shell.txt
而他的输入则显示为:
Shell.txt: UTF-8 Unicode text, with very long lines
这就告诉我们这是一个文本文件.
如果某一个文件是文本文件,那么我们就可以用命令more或是less来阅读.在用这个命令阅读时我们可以使用q来退出.但是这两个命令进行比较似less要显得更好一些.
cp命令:
cp命令是将一个文件从一个地方复制到另一个地方,或是以一个的文件建立一个文件的副本.在具体的说cp命令以前我们行简单介绍一下建立文件夹的命令:mkdir.例如建立一个名为mydir的目录我们可以使用下面的命令:
mkdir mydir
进行文件的复制我们可以简单的使用下面的命令:
cp filename target-dir
这个目录是将文件filename复制到目标文件夹中.
在这里我们有必要说一下几个特殊的目录表示:
~ 是指用户主目录
.. 是指上一级目录
. 是同级目录
用上面的命令进行文件复制后我们可以使用命令ls -l filename来看出复制后的文件信息的不同.如果我们希望复制后的文件和复制前的文件一样,我们可以使用下面的命令:
cp -p filename target-dir
但是有时我们并不希望两个完全一样的文件存在不同的文件中,似乎这是没有意义的.为了解决这样的问题我们可以使用mv命令,这是一个移动文件的命令.
我们还可以为cp命令指定参数来实现整个文件夹的复制,如下面的命令:
cp -r source-dir target-dir
上面的命令用-r参数来实现将整个文件从一个地方复制到另一个地方.
我们还可以通过cp命令来建立一个文件的副本,也就是以一个不同的文件名来进行文件的复制,如下面的命令:
cp stuff stuff2
你也可以指定一个你所喜欢的名字来代替stuff2.
这们我们就有了两个内容相同而文件名不同的文件了.
mv命令:
我们可以使用mv命令来在不同的目录间进行文件的移动或是将一个文件重命名.例如我们可以使用下面的命令将文件stuff改为joke:
mv stuff joke
在这个命令中前一个文件为改名以前的文件,就是源文件,而后面的则是有想要的新的名字.在这里我们有必要说一下在Linux中有关文件名的一些问题.在Linux的文件名中我们可以使用空格,但是空格并不是一个好主意,因为我在命令行输入这样的文件时不得不用一个反斜线(\)放在空格的前面来告诉Linux这个空格中是文件名的一部分,而不是文件或是命令的分隔标记.因而在Linux我们是尽量使用文件名中含有空格,我们可以使用下划线,这样就可以避免空格带来的问题了.
我们可以使用下面的命令来移动文件:
mv filename target-dir
这样就可以将文件filename移动到目标目录target-dir中了.
我们还可以用这个命令来移动一个文件夹,但是我们要知道在这个命令中我们不需要使用参数-r,例如下面的命令形式:
mv source-dir target-dir
这个命令就可以将一个目录sorce-dir移动到另一个目录target-dir中.
mkdir命令:
我们可以使用mkdir命令来建立一个我们自己的空目录,例如下面的命令:
mkdir mydir
这样我们就建立了一个名为mydir的空目录.如果我们还想要这个命令结出命令执行的结果,我们可以加上一定的参数,如下面的命令:
mkdir --verbose mydir
这样在命令执行后就会显示命令的一些执行信息.
与mkdir命令相对的就是命令rmdir,这个命令可以使我们移除一个目录,如下面的命令:
rmdir mydir
但是我们要知道的是这个命令只有我们要移除的目录是一个空目录才可以正确的执行,否则就会给出错误信息.
rm命令:
rm命令是一个删除文件的命令,我们可以用他来删除一个我们不再想要的文件.但是我们要十分小的使用这个命令,因为由这个命令删除的文件我们以后就不会再把他找回来了.这也就是我们为什么要在.bashrc文件中加入alias rm='rm -i'的原因.这样当我们执行一个命令时就会得到如下面的一些询问信息,然后由我们来决定如何做:
rm:是否删除一般文件‘bitnet’?
这时如果我们输入了y,Linux就会删除这个文件,而我们也就永远的不会再见到他了.如果我们输入了n或是其他的字答,Linux则不会删除.在这里我们不用担心,因为在默认的情况下这个询问的回应是n,这样我们就不会因为不小心的操作给带来麻烦了.
但是这样的设置也还是有一个小麻烦的,那就是当我们要删除一类的文件,例如是用通配符指定的*.c或是其他的,而且我们很明确我们确实不再需要他们,但是这时的Linux还是会一个一个的来询问我们是否要删除某一个文件,而我们就要不断的输入y.这样的询问很麻烦,也不是我们需要的,所以我们可以可以加上-f参数来强制删除这些文件,如下面的命令;
rm -f *.c
这样Linux就不会用任何的询问了,而是直接的将这些文件删除.但是我们可是要小心啊.
管道:
在Linux系统中我们可以进行命令的组合来完成我们的工作.其中最常用的一个就是管道命令.管道是一个很形象的说法,也就是将一个命令的输出接入另一个命令的输入.我们要在Linux中使用管道命令并不是使用命令pipe,而是我们在要用到管道命令的时候输入|.这就是一个输入输出导入的命令,我们可以用这个命令来实现命令间输入输出相接.
例如我们可以使用下面的命令来查看目录/proc下的文件内容:
ls -l /proc
但是这个命令的执行结果实在是太长了,Linux没有办法在一屏内显示完全.当然了如果我们有很好的耐心,我们可以上下翻滚屏幕来查看,但是如果我们使用管道命令我们就可以解决类似这样的问题了.如下面的命令:
ls -l /proc | more
这样执行结果就会在一屏一屏的来显示了,我们可以通过空格或是回车来实现翻滚屏幕.
但是更好一点的办法是我们可以用下面的命令;
ls -l /proc | less
通过管道命令我们可以将ls命令的输出接入less命令的输入.这样我们就可以通过空格或是回车向下翻屏,更好的一点就是我们可以通过小方向键来实现屏幕的上下翻滚.这样就大大的方便了我们的查看.
在Linux的学习和使用我们是没有办法将全部的命令都学会和掌握的,因而对于使用Linux的人来说如何得到帮助就显得尤为重要.在Linux中可以有几种常用的方法可以使得我们得到帮助的信息.
一是我们可以使用命令的帮助信息.例如我们知道命令cp,但是却不是太清楚他的一些命令参数,这时我们可以简单的用命令cp --help来得到简要的帮助信息.
二是我们可以使用Linux中的man命令来得到详细的帮助信息.例如我们想要了解一些关于mkdir命令的帮助信息,我们可以使用下面的命令:
man mkdir
这个命令会将查找得到man帮助手册页的相应信息详细的列给我们.
三是我们可以使用与man命令相类似的info命令.我们也可以用这个命令来得到mkdir的帮助信息:
infor mkdir
另外一个我们可以得到帮助信息是命令apropos.确切的说这并不是一个帮助信息的命令,而是可以列出与我们要查看的内容相关的man手册页的相应信息.如下面命令:
apropos xterm
这个命令的执行结果如下:
resize (1) - set TERMCAP and terminal settings to current xterm window size
xkibitz (1) - allow multiple people to interact in an xterm
xterm (1) - terminal emulator for X
这些都是与xterm相关的man帮助手册页.然后我们可以对这些结果中特定的手册页进行查看.例如下面的命令:
man 1 xterm
在这里要多说一句就是这些的帮助命令的执行结果一般都是相当的长的,我们在查看时最好用管道命令将其导出.这样就会大大的方便我们的查看.
其他的一些有趣有用的命令:
touch命令:
我们可以用touch命令来更改一个文件的时间或是日期,而且我们还可以用这个命令来新建一个空文件.
我们可以这样的想一下,你的老板在向你大喊大叫,要求你要在午饭之前完一份报告,而我们的工作又实在是太忙了,似乎这样的要求有一些苛刻,所以我们想要做的就是可以完成这个报告晚一些,但是看上去要你是早就完成的一样.这时我们可用下面的命令:
touch -t 05070915 report.txt
在这个命令中前四个数字是指日期,在这里是指5月7日,后面的四个数字是指时间,这里是9:15.这样在我们做过手脚以后这个文件看上去就像很早就完也了一样,只是交得有一些晚而已.想来这样我们就可以免去老板的一顿批了啊.不过我们也确实是付出了努力的,要不再多的手脚也是没有用啊.:-)
find命令:
我们有时并不会很清楚地记得我们曾经处理过的文件,因而我们常常会用到查找的命令find.如果我们使用图形界面如KDE,我们可以使用他提供的强大的搜索工具.但是我们也可以在Shell下用命令find来实现.例如也许我们想要用一下我们以前处理过的报告,但是们又不记得他在哪里了,我们就可以使用下面的搜索命令:
find -name report.txt
这个命令是要Linux在当前目录下查找名为report.txt的文件.如果我们没有指定目录,Linux会在当前目录下查找,我们也可以指定Linux的查找目录,如下面的命令:
fine /usr -name report.txt
这个命令会使用Linux在/usr目录下进行查找.如果查找成功,Linux就会给了查找到的路径.
但是大多数的情况下我们要进行查找是因为我们记不太清我们曾经处理过的文件名了,这里我们可以用通配符来进行查找.*可以指代任意个字符,而?只可以指找一个字符.例如我们只记得文件中含用me,我们可以用下面的命令来进行查找:
find -name *me*
也许我们要查找的文件只是不久以前我们刚做过的(这样快就忘,唉~~),我们可以使用下面的命令:
find -mmin +0 -mmin -120
这样这个命令就可以列出我们最近两个小时内曾经处理过的文件.一般这样的情况下文件也许会很好,我们最好用管道命令导出,这样就可以方便我们的阅读了.
grep命令:
grep命令与我们上面讨论的find命令相类似也是一个查找的命令,所不同的是find命令用来查找文件,而grep命令是在文件中查找字符串.这个命令格式如下:
grep string filename
这个命令是在filename文件中查找字符串string,并将含有这个字符串的行显示在屏幕上.
这个命令不仅可以在文件中查找指定的字符串,而且还可以从任意的输入流中查找字符串.例如我们在Linux中常有这样的情况我们装上一个rpm包以后却记不这个包的名字了,如何从系统这样多的包中找到指定的包,我们可以用下面的命令来做到:
rpm -qa |grep *.rpm
例如我们还可以将查看命令用管道导入grep,这样我们就可以查找特定文件了,例如我们要列出当前目录下含用my字符串的文件,我们就可以用下面命令:
ls -l | grep my
who命令:
正如我们现在所知道的,Linux是一个多用户的操作系统,可以用不同的用户同时登陆开始他们不同的工作.那么我们如何知道有哪些用户登陆到我们的系统呢?这时我们可以使用who命令.who命令可以列出当前我们系统上的用户.其命令格式为:
$ who
其执行结果如下面的显示的这样:
mayuelon :0 Jul 31 18:21
mayuelon pts/1 Jul 31 18:21
mayuelon pts/2 Jul 31 18:21
mayuelon pts/4 Jul 31 18:32
在这个结果显示中,最前面的就是用户名,然后是用户登陆时所用的端口号,最后面是登陆的时间和日期.
这个命令对于网络管理员来说似乎显得更为重要,因为管理员可以通过这个命令来清楚当前有哪些用户登陆到了我们的系统.对于老板来说,也许他会通过这个命令来看有哪些员工迟到了.对于是我们来说这个命令可以使得我们知道我们打开了不只是一个终端,所以我们要记得注销啊.
tee命令:
我们可以使用tee命令来将那些将显示在屏幕上的内容存在一个文件中.多数的情况下我们都是在管道符后面使用这个文件.例如我们可以用下面的命令将当前目录下的文件的信息存在另一个文件中:
ls -l | tee list
这样就会在当前目录下产生一个名为list的文件,而这个文件的内容就是我们当前目录下的那些文件的详细信息.
但是有时我们会希望在用这样的tee命令产生的文件后面加上当前的时间,这时我们可以用下面的命令:
date | tee -a list
这样就可以在这个文件的后面记录我们这次操作的时间了,在这里我们要注意的是我们在文件中新增内容时一定要用-a参数,这样才可以将新增加的内容存在文件的末尾,否则的话这个文件就会被改写.
>命令:
与上面的tee命令相类似的我们可以将一个命令的输出内容存放在另一个文件中.而这个命令要比上面的命令来得更简洁一些,这样我们就不需要输入管道符了.
例如如果我们要将当前目录下的文件信息列表存放在list文件中我们可以用下面的命令来做到:
ls -l > list
和上面同样的想法如果我们要在文件的末尾加上时间,我们可以用这样的命令:
date >> list
这样的命令会将新增的内容追加在文件的末尾而不会改写整个文件.
2>命令:
我们可以用这个命令来产生一个文件来存放我们得到的错误信息.
一般情况下我们会很少用到这个命令,因为我们都知道Linux是多么的完美.但是也许有的时候我们要从网上下载一个软件,但是我们安装上以后,也许是因为缺少一些必要的文件,这个文件不能正常的工作.这时我们就可以用这个命令来产生一个错误信息文件:
[program X that doesn't wor] 2>program_X_error
这样我们就可以知道为什么我们的软件不可以正常的工作,我们也可以这个文件发给软件的开发者,这样他就可以帮助我们来解决这样的问题.
whoami命令:
也许在的情况下我们会用不同的用户名进行工作,而我们忙得也不晓自己在用哪一个用户名了,这有时可不是一个好事.这时我们就可以用whoami命令来叫Linux告诉我们我当前是哪一个用户登陆,也就是这个命令会返回当前用户的用户名.如下面的命令:
$ whoami
其执行结果为:
mayuelong
这样我们就不会弄错我是谁了:)
whatis命令:
在Linux系统有许多的命令,但是有时我们也不知道一个命令是用来做什么的.这时我们就可以用whatis命令来显示出这个命令的功能.例如下面的命令:
$ whatis grep
而其执行结果如下:
grep (1) - print lines matching a pattern
这样我们就可以十分清楚一个命令的功能作用了.当然查找的命令得是我们的系统中的有.如果没有,你想叫我们可爱的小企鹅去哪里呢?
如果我们执行下面的命令:
$ whatis whatis
会是什么样的呢?
其执行结果如下:
whatis (1) - search the whatis database for complete words
嘻嘻,看来还是一样的输出啊:).
whereis命令:
whereis命令可以用来很好的查找其他的命令或是程序.例如我们想要从网上下载一个程序,但是这个程序的运行要有其他程序的支持,而我们又不知道我们是否有这个程序.这时我们就可以使用下面的命令来进行查找:
$whereis [programname]
如果查找成功会显示出这个程序的路径.
例如我们要查找vi程序,我们可以使用下面的命令:
$ whereis vi
而这个命令的执行结果如下:
vi: /bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1p/vi.1p.gz
从这里我们可以看出vi程序的路径以及其man手册页的路径.
但是如果我们查找不到程序或是命令,Linux就会将这个字符串显示出来,而不会有其他的提示.
与whreeis命令相类似就是which命令,这个命令也可以查找出一个命令或是程序的路径.有时一个程序的运行要有其他程序的支持,但是这个程序却并不知道所需要的程序在什么地方.例如一个程序的运行需要Java,但是这个程序却认为Java在另外的一个地方,这时我们可以输入命令:
$ which java
而Linux会告诉我们:
/usr/bin/java
这样我们就可以通过一定的配置来使程序运行起来.
有的时候由于软件版本的变化,互相依赖的程序文件的路径也许会发生变化.但是开源软件可以使得我们来更改软件的设置来使软件运行起来.
echo命令:
echo命令可以将我们所输入的内容显示在屏幕上,也就是说这个命令起到了打印字符串的作用.例如我们执行下面的命令:
$ echo Hello,Linux
而这个命令的执行结果如下:
Hello,Linux
这在正常的状况下并不会显出有多大的用处.但是当我们开始写脚本程序时,我们就会发现这个命令是一个相当有用的命令.脚本程序是类似于小程序,我们可以利用脚本程序一次执行一系列的程序.我们可以在脚本程序中使用echo命令来告诉我们在某一个时刻脚本执行哪些动作,或者是提示我们应做的事情,例如输入文本等.在日常的生活我们还可以用echo命令及管道(|)和tee命令来书写一些小便条来提醒我们要做的事情.
wc命令:
这个命令可以以行数,单词数,字符数的顺序显示出一个文件中的内容.例如我们执行下面的命令:
$ wc test
而这个命令的执行结果如下:
1 1 6 test
在这个结果中我们可以看出在这个文件中有一行,一个单词,六个字符,以及文件的名字.
dir命令:
如果我们曾经用过DOS系统我想也许我们就不会对这个命令感陌生.事实上在Linux世界,dir=ls -l,这两个命令会给出我们同样的结果.当我们使用终端来使用FTP程序来上传和下载时这个命令就会显得更为有用了.(但是在我看来这个命令似乎与ls命令的执行结果相同)
pwd命令:
pwd命令会给出我们当前工作目录的详细路径信息.有时也许我们会不记得我们是在哪一个目录下进行我们的工作了,这时我们就可以用这个命令来显示路径.如我们执行下面的命令:
$ pwd
而命令的执行结果如下:
/home/mayuelong/Documents
这也就是我们正在当前的目录下进行我们的工作.
date命令:
date命令会给我们当前时间的详细信息.例如我们执行下面的命令:
$ date
而这个命令的执行结果常会是下面的样子:
日 8月 7 01:13:53 CST 2005
从这个执行结果我们可以看出当前的时间是2005年8月7日星期一,01:13:53.
如果我们只是想知道当前的日期,我们可以用下面的命令:
$ date +%D
如果我们只是想知道当前的时间,我们可以用下面的命令:
$ date +%T
如果我们想知道这一年的圣诞节,我们可以输入下面的命令:
$ date --date 'Dec 25'
这样我们就会圣诞节来的一天的信息.
而这个命令还有一些其他的选项,我们可以用$ man date或是$ info
date命令来得到一些更详细的信息.
cal命令:
cal命令会在屏幕上显示出日历.例如我们执行下面的命令:
$ cal
Linux就会在屏幕上打印出这个月的日历.其格式如下:
八月 2005
日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
如果我们指定年份,Linux就会在屏幕上打印这一年的日历.例如命令:
$ cal 2005
这个命令会使得Linux打印这一年的日历.
如果我们执行下面的命令:
$ cal 12 2005
这个命令会使得Linux打印出2005年12月份的日历.
如果我们指定选项-m,那么一个星期就会从周一开始,而在许多的国家中正是这样的.
exit命令:
exit命令可以使得我们退出终端.如果我们工作在文本模式下,输入这个命令以后系统就会提示要我们重新登陆.如果我们要以另一个用户登陆,我们可以使用logout命令.而如果我们工作X-Windows下,exit命令只是退出我们使用的终端.
下面的一些命令对于系统管理员来说是要经常用到的,因为我们需要了解我们系统的运行情况.
last命令:
我们可以使用last命令来列出今天登陆到我们的系统的用户以及他们使用的终端.例如我们执行下面的命令:
$ last
命令的执行结果如下:
mayuelon pts/3 Sun Aug 7 00:57 still logged in
mayuelon pts/2 Sun Aug 7 00:48 still logged in
mayuelon pts/1 Sun Aug 7 00:48 still logged in
mayuelon :0 Sun Aug 7 00:47 still logged in
从这个结果中我们就可以看出登陆到我们系统的用户名以及所使用的终端,登陆时间以及所使用的时间等信息.这样我们就可以很好的来了解登陆到我们系统上的用户的一些信息了.
df命令:
如果我们要了解我们的硬盘空间情况,我们就会常用到df命令.在Linux中已经有了许多图形界面的程序来告知我们的Linux分区可用的磁盘空间的情况.但这仍是一个快速的好方法.
例如我们执行下面的命令:
$ df
而这个执行结果一般如下:
Filesystem 1K-块 已用 可用 已用% 挂载点
/dev/hda8 14884620 5175180 8941136 37% /
/dev/shm 127468 0 127468 0% /dev/shm
这样我们可以很好的来了解我们的磁盘空间的情况了.
free命令:
我们可以用free命令来知道在我们的系统上内存的使用情况,如果我们执行下面的命令:
$ free
而命令的执行结果如下:
total used free shared buffers cached
Mem: 254940 242972 11968 0 16976 122196
-/+ buffers/cache: 103800 151140
Swap: 514040 0 514040
有时一些会运行得相当的慢,我们可以用这个命令来查看一下我们的内存使用情况.Linux的内存管理是相当的不错的,但是却是有一些程序会狂吃内存.如果我们发现了这样的程序,我们可以条掉他.
du命令:
我们可以使用du命令来查看一个文件的大小.这个命令可以作用到目录也可以作用到一个特定的文件.如果我们执行下面的命令:
$ du test
命令的执行结果如下:
8 test
在默认的情况下,du命令会显示出最接近于千字节的数.我们可以指定-b选项来以字节数显示:
如下面的命令:
$ du -b test
命令的执行结果如下:
510 ../test
从这里我们可以看出这个文件大约有510B的大小.
我们还可以将这个命令用于目录上.
top命令:
我们可以使用top命令来知道有哪些进程正在运行以及我们的系统正在做着什么.这个命令可以显示我们的CPU正在被如何的来使用.他会列给我们一个很详细的正在运行的事件的清单,包括进程的PID以及使用的CPU所占的百分比等情况.
ps命令:
我们可以用ps命令列出我们当前系统上下在运行的系统进程.如果我们只是输入ps命令,Linux就会列出我们作为用户正在运行的系统进程.如我们执行下面的命令:
$ ps
命令的执行结果如下:
PID TTY TIME CMD
2893 pts/2 00:00:00 bash
3686 pts/2 00:00:00 vim
3728 pts/2 00:00:00 bash
3729 pts/2 00:00:00 ps
如果我们忘记了我们的用户名,我们可以输入ps -u命令,这是用户模式,而我们的用户名就会在第一列显示,不过显示出来的却是我们的ID号.事实上这个命令还可以显示内存的使用情况以及其他的信息等.
我们还可以用命令ps -au来查看其他用户的进程信息.如果我们并不是网络的一员,那么这个命令只会查看我们以及root的进程信息.如果我们正在进行侦探工作,我们可以使用命令ps -a来看一下谁在使用哪一个进程.
kill命令:
kill命令是一个表达很明确的命令.我们可以用这个命令来结束一个程序的运行进程.我们可以用ps命令得到程序进程的ID或是PID.我们可以用kill加上一个PID来结束一个程序进程.换句说是我们杀掉了这个程序.这个命令只有在出现有麻烦的进程时才会使用.要杀掉一个进程首先我们要输入ps命令来得到程序的进程列表.例如我们可以用下面的命令来终止上面所列出的PID为3686的Vim进程:
$ kill 3686
这样我们就可以终止Vim程序了.
如果我们不想使用ps和kill这样的两步命令,而我们还知道这个程序的名字时我们还可以使用下面的命令:
$ killall vim
root用户在Linux的世界中拥有最高的权限.我们可以使用kill命令杀掉所有的进程.但是我们要注意的就是我们以root用户在使用这个命令时首先要运行ps -au,可不要把我们要用到的程序也kill掉啊.:)
如果我们不小心执行了命令$ find *,这样Linux就会查找所有的东西.如果要停止这样的查找过程,我们可以使用CTRL-C命令,而没有必要使用kill命令.
Linux的文件系统:
对于一个Linux新手来说刚接触Linux时会发现Linux的文件系统与其他的不同.所谓的文件系统也就是指Linux中数据的存储和管理方式.
在Windows或是Mac系统,用户可以通过单击图标和拖动文件来将文件复制到软盘或是一个硬盘的其他部分.则使用KDE或是Gnome的用户也可以用这样的方式来解决问题.如果我们要使用软盘一类的东西,那么我们就要在这里说一下Linux所使用的文件系统.
自Win95以来的Windows用户所使用的文件系统是vfat,而Linux所使用的是一个不同的文件系统,被称为ext2.当然了还有一些其他的文件系统的.我们可以选择同时在我们的机器上安装Windows和Linux系统.这样我们有时就会从硬盘的Windows分区中的进行文件的存取.我们可以使用mount来做到这一点.也许我们还会在这个命令中使用选项来表明我们正在试图联接是的Windows分区的vfat文件系统.
一样的道理,现在的软盘虽然是要淘汰的产品,但是也许有时还是要使用软盘来进行文件的存取的.在使用软盘进行文件存取之前我们还是要用mount命令的.如果这个人是一个Windows用户,那么我们还要是在命令中指明文件系系类型的啊.如果我们要从我们的Linux分区中向软盘存入文件,我们就要将我们要mount的软盘格式成为Linux的ext2文件系统了.
现在市场上销售的大多数软盘都是预先为Windows格式化好的.如果我们要将Linux文件拷入Windows格式的软盘中是不会有问题的.如果我们要将Linux文件拷入软盘是为了在另一个Linux机器上使用或是我们要以后再使用,那么我们最好还是要将其格成Linxu的ext2文件系统.格式软盘的工作也会被认为是一件系统管理的工作,我们要使用root的身分来进行.我们可以用下面的命令来格式化一个软盘:
$ mke2fs /dev/fd0
这个命令是"make an ext2 file system"的缩写.另一部分是设备名.正如我们以前所提到的,在Linux世界中所有的都是文件,包括硬件设备.
这时软驱就会发出一些声音,并且会在屏幕上显示出一些信息来.
这样我们就会有一个Linux格式的软盘了.我们可以用下面的命令来检测一下我们的软盘:
$ e2fsck /dev/fd0
在一些图形界面的管理工具中可以一次实现在格式和检测的工作的.
挂载文件系统:
正如我们在前面所谈到的一样,在Linux世界中软盘,光盘或者是硬盘的其他分区的组织方式与其他系统是不一样的.虽然Linux的一些图形管理工具可以提供给我们的单击图标以进入软盘,而这后面的方法是与其他的一些系统是不同的.在Linux世界,软盘或是其他的设备必须被挂载后才可以使用.这就意味着这些只是Linux系统中的临时文件,换句话,这只是告诉Linux这是我们要与之进行存取的文件.
我们可以使用下面的命令来挂载我们要使用的软盘:
$ mount -t ext2 /dev/fd0 /mnt/floppy
(我们只有用root用户来输入这个命令才可以.另外在Linux中一般挂目录在/mnt中)
这个命令会认为我们有一个软驱,而且我们要使用的软盘是一个Linux格式的软盘,如果我们要挂载一个Windows格式的软盘,那就将选项改为-t vfat,并且在我们的/mnt目录下有一个名为floppy的目录,如果没有,我们要自己建立一个(mkdir /mnt/floppy)
我们输入这个命令后,我们是在告诉Linux系统软盘是我们Linux文件系统的一部分,而且我们可以将我们要存放到软盘上的文件拷贝到目录/mnt/floppy中,就像这中是我们系统的一个目录一样.如果我们操作正确的话,当我们输入命令df后我们会看到关于软盘的信息.
现在如果我们要向软盘中拷贝文件,我们可以用下面的命令:
$ cp filename /mnt/floppy
如果我们要在软盘上建立我们的子目录,我们可以先进入软盘:
$ cd /mnt/floppy
然后就可以建立我们所需要的目录了:
$ mkdir mydirectory
我们也可以使用下面的命令将一个目录拷贝到软盘中:
$ cp -r directory /mnt/floppy
我们也可以用这个命令来挂载其他的设备.如我们可以用下面的命令来挂载光盘:
$ mount -t iso9660 /dev/hdb /mnt/cdrom
(光盘的设备有时会不同,所以挂载进也会有不同的命令)
在这个命令中,iso9660是标准的光盘文件系统./dev/hdb是指非SCSI类型的光驱,而挂载点为/mnt/cdrom,如果不存在这个目录则需要我们来建立这个目录.
也许有的朋友是在自己的电脑同时装有Linux和Windows系统,那么有时我们需要访问Windows分区,我们可以使用下面的命令来访问Windows分区:
$ mount -t vfat /dev/hda1 /mnt
在我们的硬盘分区中,/dev/hda1指Windows系统中的C盘,而/dev/hda2是指硬盘的逻辑分区,/dev/hda5是指Windows系统中的D盘,依次类推.
而有时因为编码的问题,挂载后的分区并不能很好的来解决中文显示的问题,我们可以用下面的命令来挂载:
$ mount -o iocharset=utf8 /dev/hda1 /mnt
这时当我们切换到挂的目录里用ls看一下,我们就会发现一些有趣的现象,在这里文件夹显示为蓝色而文件则显示为绿色(或是红色),我们不会像在Linux中用到的那样的多彩颜色,因为Windows的文件系统并不会区分文件类型.所有的东西看上去都像是二进制程序而不是通常的文件.
我们挂载的文件系统只是标准的Linux系统中的临时文件,当我们完成我们的工作以后,我们要卸载这些临时文件.卸载的命令如下:
$ umount /mount_point
这里挂载点就我们在挂时所用到的目录,这样就可以将我们挂载上的设备卸载下来了.
Linux系统沿用了UNIX的文件属主和权限的概念.这是因为Linux设计成为一个网络操作系统,不同的人会使用不同的程序或是文件.很明显这就存在着保持事物有组织和安全的需要.我们可不希望一个普通的使用者会使用一个可以清空整个系统的程序.这也涉及安全和隐私的问题.
正如我们以前所提到的一样,Linxu是一个多用户多任务的操作系统,这样Linux最大的优点就是不同的人可以使用同一台电脑或是同一个以不同的身分做着不同的工作.这也就涉及到了文件权限的问题.
如果我们在我们的一个目录下面执行命令ls -l我们会得到类似于下面的一些输出:
总用量 116
-rwxr-xr-x 1 mayuelong root 50920 7月 2 09:53 bitnet
从这个输出中我们看出bitnet这个文件创建于7月2日9:53,文件的大小为50920字节,这个文件属于root组群,他实上属于用户mayuelong,这只是一个文件.最左边则是文件属性的标记:
1 短横线将这个文件的属性分为三部分
2 第一部分是指属主(mayuelong)的权限.
3 最前的短横线表示这是一个普通的文件含有各种数据.如果是一个目录,那么最前面的将是字符d
4 第二个短横线后面的第二部分表示组的权限.在Linux系统中会创建不同的组来访问文件.
在一个文件的权限符号中有三个标记:
r 可读
w 可写
x 可执行
chmod命令:
chmod命令是我们在Linux世界是用于更改文件属性的程序.但是我们在前面所提到的一样,其他的用户是不可以修改你的个人文件的,但是也许我们希望他们连读的权限也没有,这时我们就可以使用这个命令来修改相应的权限.
这个命令的语法格式如下:
$ chmod [a/o/g/u] [+or-] [r/w/x]
前的标记是Linux系统中所有的四种概念的用户:
a 所有的用户
o 其他的用户(others)
g 组成员(group)
u 自己(user)
标记+可以增加文件的权限,而-可以减少文件的权限.
例如前面的例子,我们不希望其他的人读我们的文件,我们可以使用下面的命令:
$ chmod og-r myfile.txt
这样其他的人就不可以读我们的个人文件了.
我们前面还说过也许我们会Windows分区或是Windows格式化的软盘中拷贝文件.虽然这些文件并不是可执行文件,但是却会显示出这样的信息(-rwxr-xr-x).如果我们要将更改为正确的属性,也就是除去他的可执行属性,我们可以用下面的命令:
$ chmod a-x file
在这里我们要注意的就是如果我们在拷贝时是用的root用户,那么我们也要用root用户来执行chmod的操作.
在Linux系统中我们还可以使用数字来更改文件的属性.正如我们在前面说过的,一个文件的属性分为三部:一是属主的权限,一是群组的权限,一是其他用户的权限.这样我就可以分别用一个数字来表示这些权限.例如下面是一个用数字来改变文件的权限的例子:
$ chmod 644 list.txt
在这个命令中,6是指可读和可写,而4是指可读.在一个文件的三个权限中,可读,可写,可执行可以分别用4,2,1来表示.这样一个文件的属性就类似于一个算术的加减法.
例如我们在前面所使用的例子,我们希望除了我们自己组群以及其他人都没有任何权限,这时我们就可以用下面的命令来做到了:
$ chmod 600 myfile.txt
下面我们来介绍两个在实际中会使用到的例子:
在Linux世界中我们可以使用一个名为fetchmail的命令模式程序来收取我们的邮件.如果我们正在使用我们的电脑以不同的用户在完成不同的工作,这个程序就会显得更为有用.他会给不同的用户发送邮件.而这些不同的邮件地址存放在一个我们所建的一个名为.fetchmailrc文件中.这个文件中还包括收取邮件的用户名和密码.这时如果我们是联网的就要涉及一个安全的问题.这是我们必须使用chmod 600/chmod og-r来解决文件的权限问题.
我们下面再看一个实际中的例子.随着互联网的流行,网站就要友好和交互.使用脚本程序也就变得更为普遍.如果我们用perl写了我们自己的脚本程序,我们也要处理权限问题,使用用户可读,可执行,但是不可以改写脚本内容.这时我们可以用到下面的命令:
$ chmod 755 script
chown命令:
chown命令可以用来改变文件的所有权.chown就是指change owner,改变所有者的意思.但是他并不会改变文件的读写和执行的权限.这个命令虽然是一个所有都可以使用的命令,但是可能只有我们是root用户时才会使用到这个命令.这个命令的一般用法如下:
$ chown owner:group file
例如也许我们挂载上Windows分区以后为了结省时间直接用root用户来拷贝文件,这时这个文件的所有者就是root,只有root对这个文件有写的权限,而也许我们希望是我们是这个文件的属主,这时我们就可以用root用户来使用下面的命令:
$ chown bob:bob file
这样就可以改变这个文件的所有者了.由此可见当我们在使用不同的用户进行工作这个命令变会显得更为有用了.
备份文件
电脑并不是完美的.Linux是一个几乎完美的系统,但是如果有事情发生时就会造成数据的丢失.要避免这个问题的最好的办法就是要备份.在Linux中有两个程序来完成备份的工作:tar和gzip.
首先我们会使用tar程序.这个程序可以将许多的文件放入一个包中,常称为tar包.例如如果我们有下面的一些文件:
notes_1.txt
$ chown owner:group file
例如也许我们挂载上Windows分区以后为了结省时间直接用root用户来拷贝文件,这时这个文件的所有者就是root,只有root对这个文件有写的权限,而也许我们希望是我们是这个文件的属主,这时我们就可以用root用户来使用下面的命令:
$ chown bob:bob file
这样就可以改变这个文件的所有者了.由此可见当我们在使用不同的用户进行工作这个命令变会显得更为有用了.
备份文件
电脑并不是完美的.Linux是一个几乎完美的系统,但是如果有事情发生时就会造成数据的丢失.要避免这个问题的最好的办法就是要备份.在Linux中有两个程序来完成备份的工作:tar和gzip.
首先我们会使用tar程序.这个程序可以将许多的文件放入一个包中,常称为tar包.例如如果我们有下面的一些文件:
notes_1.txt
notes_2.txt
notes_3.txt
notes_4.txt
notes_5.txt
而现在我们将他们放入一个称为note的目录中.我们现在要做的就是备份这个文件并将他们放入软盘中.我们可以通过下面的命令来来将他们放入一个tar包:
$ tar -cvf note.tar notes*.txt
这个命令是tar我们要使用的程序名.我们要保证我们的电脑中有这个程序.下面的是一些选项:c(--create) v (--verbose,用来显示这些文件) f (--file,创建一个文件,在这个命令中最后一个选项必须是这个选项),然后是我们要创建的文件的名字和我们要备份的文件.
在这个命令中我们是假设在这个目录中还有其他的文件,而我们又不希望将这些包含其中,如果我们要这个目录下所有文件装入tar包,我们可以用*.*来代替文件notes*.txt.
如果我们要备份整个目录及其子目录,我们可以进入这个目录,然后执行下面的命令:
$ tar -cvf backup.tar *
但是这个只是我们备份的第一步,我们下一步的工作就是要使用gzip程序压缩这些文件.
正如我们前面所提到的一样,tar只是将这些文件放入一个文件,但是在大小上并没有缩小,也许这些文件会变得更大.如果我们要减少这些文件的大小我们可以使用压缩命令gzip.
如果我们要压缩我们的tar包,我们可以使用下面的命令:
$ gzip note.tar
这样这个tar文件就会被压缩了,我们也可以对一般的文件来使用这个命令,但是gzip就要是和tar包一起使用的.
这个命令的结果就是产生一个名note.tar.gz的文件.
这两个文件的扩展名就是告诉我们这是一个tar包而我们是使用gzip程序来压缩的.
我们还可以在tar命令中加入选项来一步完成打包和压缩的过程.如果我们加入z选项,然后指明要创建的是一个以.gz为扩展名的文件,这样我们就可以一步来完成我们要两步才完成的工作了.如上面的操作我们可以用下面的命令来做:
$ tar -czvf backup.tar.gz *
这里我们要记住的就是f必须是最后一个选项.
解包和解压缩
我们使用tar和gzip来备份文件,但是也许我们会在某一天需要解包和解压缩.来完成这个工作最简单的办法就是使用tar来完成整个过程.我们要确定tar包的位置,然后要问自己几个问题:
我们解压这些文件后是不是要对这些文件做一些修改?如果我们做了,那么这个tar就会成为一个旧的tar包.如果我们在同一个目录下解压,就会覆盖病在已经存在的这些文件.如果我们需要保存这些旧的文件,我们可以在一个不同的目录地行解压.如果我们不要这些旧的文件了,然后我们可以再创建一个新的tar包.
如果我们要解压一个tar包,我们可以用下面的命令:
$ tar -xzvpf backup.tar.gz
在这个命令中一些选项的含义如下:
-z 首先解压文件.
-x 从tar中释放文件
-v 显示释放的文件
-p 保存原始文件的属性
-f 使用这些文件
这样这些文件就被解压缩了,而我们原始的tar包也会被保存.
我们还可以分别的解包和解压:
$ gzip -d backup.tar.gz
或者是:
$ gupzip backup.tar.gz
(gupzip命令会自动运行-d选项)
如果我们只是压缩了一个文件我们可以用这样的方法来解压.
其他的压缩工具:
大多数的Linux发行版本还包含了其他的一些压缩工作.其中的一个就是Windows系统上著名的zip程序.如果我们要压缩一个文件给我们还在使用Windows系统的朋友,这个程序将是一个很好的选择.我们可以用man命令来得到关于这个命令的详细的信息.
bzip2
bzip2是Linux系统上另一个相当有名的压缩工具.Linux的系统内核就是用这种方式来压缩的.如果我们编译了我们自己的内核,那么就会有一个选择来生成bzip格式的压缩内核.这个命令的用法与gzip的用法相类似,我们也可以用man命令来得到更为详细的信息.
系统管理:
在Linux世界,root用户就相当上帝.这就意味着当我们以root身分在工作时我们就要十分的小心.也许是我们小小的错误就会给Linux系统带来损害.在我们开始以root用户身分进行我们的工作以前,我们最好先来认识一下.bashrc文件.最好地方法就是在这个文件中加上这样的几句,以保证我们Shell环境的全性:
#my own alias
alias cp='cp -iv'
alias rm='rm -i'
alias mv='mv -iv'
保存退出以后我们可以注销登陆,再重新登陆,这样我们就有一个相对安全的Shell环境了.当然了下面的命令也可以使得我们无需注销而使我们的配置文件生效:
$ source .bashrc
sudo命令:
正如一条船上不可能有两个船长,一个组织不能有两具领导人一样,在Linux系统超级用户只有一个root.然而如果我们是唯一的root用户,我们可以使用sudo命令来分配给我们的合作伙伴一定的root权限,也就是普通用户可以使用一定的root程序或是命令.在Linux系统中su是superuser的意思,当然也可以理解为switch user,因为我们可以使用这个命令在不同的用户之间进行切换.一般的Linux发行版本中都是有这个程序包的,如果没有我们可以到http://www.courtesan.com/sudo下载安装.如果我们已经安装了这个程序,我们就可以以root用户来执行下面的命令:
# visodu
这个命令可以使得我们可以编辑sudoers文件.
但是直接执行这个命令似乎是不可以,要指出这个命令的完全路径:/usr/sbin/visudo
例如下面的是一个sudoers的文件例子:
#
# This file MUST be edited with the 'visudo' command as root
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
User_Alias TRUSTED = mike
# Cmnd alias specification
Cmnd_Alias INTERNET = /usr/sbin/traceroute,/usr/sbin/ntpdate
Cmnd_Alias KILL = /bin/kill,/usr/bin/killall
Cmnd_Alias TOOLS = /bin/mount,/bin/umount
# User privilege specification
root ALL=(ALL) ALL
TRUSTED ALL=INTERNET,KILL,TOOLS
这个文件所写的是一些什么样的意思呢?
User_Alias TRUSTED = mike
在一句中指出mike可以信任的用户,我们信任他们什么?在第二句中指出我们可以放心的让他们来使用程序组:INTERNET,KILL,TOOLS.而这些命令是什么呢?在命令的定义中对这些命令组进行了定义.例如我们创建了KILL程序组,这样mike就可以杀掉那些只有root用户才可以杀掉的不能正常运行的程序了.这样就给予普通用户一定的root权限.
这样当一个普通用户来执行可信任的命令时只要用下面的格式就可以了:
$ sudo +command
例如,我们要挂载某个Windows分区,我们可以这样的用sudo命令来做了:
$ sudo mount /dev/hda6 /mnt/win_e
然后Linux会要求我们输入密码.如果我们犯了错误,sudo命令可是要嘲笑我们了.
这样我们就可以根据我们的情况在sudo命令中加入更多的可信任用户和可信任程序了.
su命令:
正如我们所一再强调的,当我们在以root用户工作时,我们一定要万分的小心.这样才至于给我们的系统造成损害.来保护我们自己的方法除了在.bashrc文件中加入alias命令以外,我们还可以使用su命令来执行一些root的命令.
su命令可以使用我们以其他的用户登陆却可以执行root的命令或是程序.在Linux系统中远程登陆是不可以使用root用户,所以我们要远程登陆的话,su命令是不可代替的命令.我们可以以一个普通的用户登陆,然后用su命令来执行root程序.
例如我们执行下面的命令:
$ su
这样Linux就会要求我们输入root的密码.我们在输入正确的密码以后就可以用root来工作了.使用su命令一个最大的好处就是我们可以执行单个的命令.例如我们以tar包的形式下载了一个程序.我们可以将这个源码包下载到我们的一个目录中,然后使用一个可以执行./confiugre和make命令的用户进行操作,当我们要安装时,我们可以用su命令来完成.这时我们可以执行下面的命令来进行安装:
$ su -c "./make install"
在这个命令中我们需要加入-c选项来执地实际的引用命令.然后我们输入root密码后就可以开始我们的安装进程了.
su命令不仅可以执行root的命令,而且还可以执行其他用户的命令.例如下面的命令:
$ su bob -c "less /home/bob/file"
如果我们知道bob的用户密码,我们就可以使用这个命令了.
安装程序:
作为系统管理员,一个最重要的任务就是要安装程序.这也意味着要卸载程序.安装卸载的方法取决于我们正在使用的Linux的发行版本.当然了也还有一些其他的因素,例如是开发者和开发商提供的安装脚本.现在市场上的一些主要的发行版本是有一定的区别的,每一个发行版本都采用自己的安装包管理机制.下面就市场上的几个主要的发行版本介绍一下Linux上软件的安装方法:
Slackware:(http://www.slackware.com)
Slackware的安装包是以.tgz为扩展名的,安装程序的命令为:
# installpkg program.tgz
在安装程序的时候我们可以使用-warn选项,这样我们就可以知道我们正在安装的程序文件的名称了.
卸载程序可以用下面的命令:
# removepkg program.tgz
这样这个命令可以移除程序以及一些相关的文件,例如文档等.
我们要更新安装程序可以用下面的命令:
# upgradepkg new_version.tgz
这样就可以将我们的安装程序升级到一个新的版本了.
Debian GNU/Linux(http://www.debian.org)
Debian是另一个被认为是纯粹主义者的发行版本,所谓的纯粹是指许可的纯粹.只有真正的开源软件包才可以进入Debian的官方发行版本中.但是这并不是说不可以使用非官方的软件包,而事实上人们是经常这样做的.在Debian系统中,软件包是deb为提高扩展名的,安装一个软件包我们可以用下面的命令:
# dpkg -i package.deb
这样就可以在我们的Debian系统上安装新的软件包了.
也许Debian系统是保持系统更新最容易的系统了.所以这样的说是因为他的apt-get系统.apt代表Advanced Package Tool.如果我们有一个很好的带宽联接,我们就可以用这个管理工具来升级我们的系统了.要使用这个管理工具,首先输入:
# apt-setup
这样他会询问我们一些关于我们要取得软件包的镜像以及一些相关的信息.然后我们就可以自由的来使用这个工具了.
如果要简单的安装一个程序我们可以用下面的命令:
# apt-get install new_package.deb
这样他就会在远程的服务器上查找这个软件包并进行安装.这个方法更好的优点就是他可以自动的解决一些软件包的依赖关系.这样就会为我们省去不少的麻烦.
如果我们要卸载一个软件包,我们可以用下面的命令:
# apt-get remove unwanted_package.deb
这个管理工具最大的优点就是我们可以用这个来更新我们的系统.如果我们要更新我们的系统,先输入下面的命令:
# apt-get update
然后输入:
# apt-get upgrade
这样就可以使得我们的Debian系统时刻保持最新了.
(注:在使用apt时可以不带扩展名,只要指出软件包的名称就可以进行升级和安装)
Red Hat(http://www.redhat.com)
在现在的Linux市场中最流的三个商业发行版本是Red Hat,SuSE,Mandrake.他们都是采用最流行的RPM(Red Hat Package Managment system)软件包管理方法来安装和升级Linux程序.
安装一个RPM包可以用下面的命令:
# rpm -i new_program.rpm
-i选项意思就是安装(install).这个命令就会简单的将Linux程序以及一些相关的文档安装在我们和计算机上.如果我们还不能确定这个软件包是否已经在我们的计算机上安装,我们可以查看一个已经安装的软件包列表,然后pipe管道导出.例如我们要查看我们是否已经安装流行的Apache模块,我们可以用下面的命令:
# rpm -qa | grep mod_
这个命令可查看我们的软件包的名称以及版本号.如果有新的版本了,我们可双提供者的FTP站点上下载亲的RPM包来开更新我们已经有的RPM包:
# rpm -F new_improved_package.rpm
也许我们更关心的是我们下载下来的程序的安全性.在以前就有过类似的例子,有的破坏者在更改我们要下载的软件包.RPM系统给我们提供了一个证明我们下载的RPM软件包的权威性和是否被更改的方法:
# rpm -v -checksig some_package.rpm
这个方法的前提是:
1 我们已经安装了gpg(GNU project's Pretty Good Privacy)
2 我们可以取得我们使用的Linux发行商的公共密钥.
下面我们要简要的说一下两个新的发行版本:LindowsOS和Xandros.他们都是微软Windows的替换品.如果我们已经使用了一段时间的Linux就会发现他们在商业,科学和技术上的局限.使用这些发行版本的人都是Linux用户组织形式的敌对者.他们还使用M$的模拟器WINE来运行没有太大用处的Widnows程序.所以他们的使用环境只是家庭或是办公室.他们都是基于Debian系统的,所以Debian系统的安装和升级方法也适用于他们.
Gentoo Linux
在Gentoo Linux系统中安装和升级的方示是Portage.这个工作是用emerge命令来完成的.
如果要取得Gentoo Linux最新式安装程序,我们可以用下面的命令:
#emerge rsync
然后执行:
#emerge -up system
然后我们就可能性安装新的软件包了.在安装的时候最好加上-p选项,这样就可以检查软件包的依赖性:
#emerge -p PACKAGE-NAME
我们还可以使用-u选项来升级我们已经安装的软件包:
#emerge -u PACKAGE-NAME
如果我们要得到更多的Gentoo Linux的系统管理方法,我们可以参考他们的文档:
http://www.gentoo.org/main/en/docs.xml
通用软件包安装方法:tar包
正如我们前面提到的,每一个发行版本都有自己的软件包安装和升级的方法.但是也有许多的开发者,他们只是提供他们程序的源码包.这并没有什么可担心,我们只要几步就可以使用他们的程序在我们的计算机上安下家来.
我们首先要做的就是下载下来我们所需要的源码包.例如我们下载下来的tar包名为nice_network_monitor_app.tar.gz并且放在一个我们喜欢的目录.然后我们要将这个包解压在这里:
$ tar -xzvpf nice_network_monitor_app.tar.gz
然后我们进入解压后的目录,查看一下INSTALL或是README文件.然后执行下面的命令:
$ ./configure
这上命令用来检查我们现在的系统中是否存在要编译和运行这个程序所需要的库以及其他的所需程序.如果能够顺利通过就会生成make文件,然后我们执行下面的命令:
$ make
这命令就会进行编译以生成可执行文件.这一步结束以后我们的要做的就是安装程序了:
# make install
(通常这个安装命令只有root用户可以执行)
这样这个程序就会被安装到作者主认为他应在那里运行的地方,一般的是/usr/bin或者是/usr/X11/bin或是直接放在/bin目录.
系统备份:
作为一个系统管理员,第二重要的工作就是要备份系统数据,有人认为是这个作为一个系统管理员最重要的工作.正是因为数据使得计算机显得如此的重要.事实上现在的商业活动都是要依赖于计算机才可以更有效的来进行.
尽管备份系统数据是如此的重,但是备份数据却是作为一个系统管理员来说最容易的和最少体力的活动.因为在我们决定了要备份哪些数据,何时备份,备份在哪里以后,所有的工作可以由Linux来自动的完成.
备份系统数据最常用的方法就是使用磁带.如果你的手头正好有一个,我们可以用下面的命令来备份我们的整个系统:
$ tar -cf /dev/ftape /
在这里有一个很重要的问题,那就是磁带的空间要足够的大可以使得我们备份整个系统.但是如果不是这样的,我们可以用下面的方法:
$ tar -cMf /dev/ftape /
加入-M选项以后Linux就会磁带满以后提示我们插入新的磁带
另外的一个备份方法说是将我们的数据放在其他的计算机上.而且这是一个最有效率的工作,我们可以设置一个cron来自动完成所有的工作(所谓的cron就是一个按照事先安排的时间来自动完成工作的后台程序.)
首先我们要制造一个tar包.这一次我们是将一个目录的内容打包.
$ tar -czpf mystuff.tar.gz /hom/acme-inc/
现在我们就有了一个整个目录/home/acme-inc/的tar包.现在我们的工作就是要将这个tar包放在我们网络上的另一台计算机上.
第一种方法是一个虚构(fudge)的方法.但是我并不是他不是一个很好的方法.如果在我们要备份数据的计算机上安装有网络服务器,这就是一个相当不错的方法.例如如果我们用Apache架设了虚拟(Virtual)站点(Website),我们所谈到这种方法就是很理想的而且是很容易设置的.我们可以对这些站点进行备份而且可以安全的将这些备份放在我们网络上的另一台计算机上.
我们需要的就是在我们的目标机上要安装有wget程序.(所谓的目标是指我们要存放备份数据的计算机).wget是一个可以通过HTTP或是FTP协议来取得文件的实用程序.我们使用这个程序是因为他可以相当容易的取得我们的tar包,因为我们知道这个tar所在的确切地方.而且wget是一个非交互的程序.我们可以通过下面的方式来设置我们的cron程序并且使他工作:
$ wget +主机URL
现在我们已经做了tar包,我们最好的方法就是将这个tar包拷贝到我们机器网络服务器的根目录,一般来说这个目录是/var/www.不过要根据不同的发行版本来确定这个目录.我们只需要执行下面的命令来将这个文件拷贝或是移动到目标目录:
$ cp mystuff.tar.gz /var/www
现在这个文件就位于/var/www/目录下.如果在我们的本地网络中这个机器名为hal9000,而在我们的其他机器上就可以执行下面的命令来取得这个文件:
$ wget http://hal9000/mystuff.tar.gz
我们可以写一个脚本程序来完成第一部分的工作.这个脚本如下:
#!/bin/sh
#script to create backup file and
#copy it to webserver directory
#create tarball
tar -czpf mystuff.tar.gz /home/acme-inc/
#move/copy tarball
#change cp to mv if your partioal to moving it
#fell free to change /where/it/is to the real place
cp /where/it/is/mystuff.tar.gz /var/www
#end script
我们将这个文件命名为backup_script,并且将其设为可执行文件:
$ chmod u+x backup_script
我们可以将这个放在我们的crontab中当我们希望的时候我们就可以执行他.使用下面的命令来编辑这个文件:
$ crontab -e
我们在前面所说的例子并不安全.我们只是简单的介绍了一个这个想法.对于我们使用这个方案的人来说,我们希望的是将我们的tar包拷贝到公共的服务器上成为可能.如果我们的服务并不是对公众开放,只有一些局域网内的连接,这也是没有问题的.只要我们在文件中有一些必须的信息,我们就不必须对公众开放.然后我们就可以实行下面的计划.
这个计划相对来说要安全得多,但是也要复杂一些.这就像是我们的生活,我们打开我们的大门要比在大门上加一把锁来得容易得多,但是明显地加一把锁要安全得多.但是要实行这个计划也要求在我们的计算机上安装一些先决的条件,我们必须有OpenSSH的服务器和客户端.这个要依赖于scp(Secure copy).我们也需要expect软件包.这是在的expect是一个交互的程序,不同于我们上面所谈到的wget.
我们用同样的方法创建一个tar包,但是这一次我们并不是将他拷贝到网络服务器的主目录下,而是将他放在其我们创建的地方.scp程序会按照我们所说的取得这个文件.为了实现这个计划,我们要修改一下我们刚才的脚本并且要再写一个脚本程序.我们所修改的脚本如下:
#!/bin/sh
#script to create backup file and
#scp it to another machine in our network
#create tarball
tar -czpf mystuff.tar.gz /home/acme-inc/
#call the expect script
./automate_scp mike@merlot:/home/mike PASSWORD
#end script
在这里我们所做就是调用automate_scp将这个文件移动到我们网络中一个名为merlot的机器上我的主目录下.我们真正的密码就是已经在我们所看见的PASSWORD中给出.这是一个潜在的安全冒险.所以我们要将这个文件的权限设为0700,这样其他的登陆到这个系统的人就会看到这个文件了.现在我们来创建名为automate_scp的脚本:
#!/usr/bin/expect -f
#tell the script it should be looking for a password
set password [index $argv]
#use scp to copy our file
spawn /usr/bin/scp mystuff.tar.gz [index $argv 0]
#be on the look out password
expect "password:"
#here comes the password
send "$password
#that's all folks!
expect eof
我们要备份系统时最好是有选择的来备份数据.在大多数的情况下,我们并不一定要备份所有的数据.最好的办法就是我们建立一个文件,在这个文件中包含着我们真正感兴趣的以及如果我们的硬盘发生了问题我们希望找回来的数据.首先我们要建立一个文件:
$ ls -al > backmeup
这里的al选项做了两件重要的事,一个是-a会列出这个目录下所有的文件,而这里的-1可以保证我们列出的内容只在一列显示.这样就会方便我们的编辑工作.现在我们只要进入这个文件来决定哪些是我们真正想要的而哪些不是我们想要的.在我们编辑好这个文件以后我们就可以用下面的命令来创建我们的tar包了:
$ tar -czvpf backup.tar.gz `cat backmeup`
注:这里使用的是反引号.
这个命令中cat命令将执行的结果传给tar命令,tar命令就会以基于这个执行结果来创建tar包.
我们还可以通过查看文件是否发生改动或是是否有新文件产生,我们可以阶段性的备份.一般的我们可以用find命令来查看在一段时间文件是否发生改动,然后决定这个改动是否是我们所需要的.这就是所谓的增值备份.例如我们用下面的命令来创建我们的tar包:
$ tar -czvf acme-complete.tar.gz /home/acme/ >/home/acme/YYMMDD.complete.log
这里我们将整个目录创建为一个tar包.使用-v选项来将我们备份的文件导入一个日志文件.这是一个可选的选项,但是很快我们就会发现这是一个很有用的办法,告别是我们要创建增值备份的时候.我们可以在以后的时候运行diff实用程序来查看日志文件来了解我们的工作.如果我们的这个命令的执行结果显示并没有太大的不同,也许我们就不会再做下一步的备份工作.我们可以用下面的命令来做我们的增值备份:
$ fine /home/homedir -mtime -1 print | tar -cvzf acme_complete.tar.gz -T - >
YYMMDD.bkup.lop
在这个命令中我们使用选项-mtime -1 -print,我们可以查看在过去的一天内是否有文件被修改可是创建.这个结果用管道导入tar命令然后这些文件就会被加入到原始的tar包中.如果我们是每周做备份而不是每天做备份,我们就可以将-1改为=7.
我们可以手动来做这样的工作,但是如果我们用下面的脚本来做就会是一个更好的方法:
#!/bin/sh
#get the date in YYYY-MM-DD format
this_day=`date +%Y-%m-%0e`
#make the backup and create log file for each day
find /home/acme -mtime -1 -print | tar -czvf acme_complete.tar.gz -T - > $this_day.backup.log
然后我们就可以这个文件放我们喜欢来存放备份的地方.
我们还可以将数据备份到光盘上.首先我们要建立一个我们要放在光盘上的备份数据镜像,我们可以用下面的命令:
$ mkisofs -o ace_bkup.iso -R -v /home/acme/
-o选项必须放在我们要创建的镜像名的前面.-R选项可以使得文件能够保持原始的文件名.这对于Linux来说是相当重要的.我们并不希望我们的文件最后看起来像是MS-DOS的文件.-v选项可以打印出我们备份的文件.现在我们就可以将这个镜像放在光盘上了.我们可以使用下面的命令来做:
$ cdrecord -v speed=2 dev=2,0 acme_bkup.iso
在这个例子中我们是假设CD-RW的设备为2,0.我们可以用下面的命令来检测:
$ cdrecord -scanbus
另外在这个例子中我们使用的是双速,当然这个是可以改变的.
这些都是命令行的选项,所在当然可以把他们组合起来用脚本程序来自动的完成.
帐户管理:
作为一个系统管理员,不论环境的大小,我们的任务之一就是在我们的系统上添加帐户.这就是说给一个人一个用户帐户,使他可以登陆我们的网络中中一台或是几台机器.这时我们要依据我们自身以及公司的条件来决定给予这个多大的权利.
首先我们来看一下给系统添加帐户的一般方法.现在大多数的发行版本都提供了图形化的管理方式来管理我们系统上的用户.还有一些发行版本例如Debian提供了简单的命令行工具来添加用户帐户.如果我们执行下面的命令:
# adduser
这时Linux就会提示我们的输入登陆使用的用户名.我们可以选择一个我们所喜欢的名字作为我们的登陆名.例如下面的命令就添加了一个名为susan有的用户名:
# adduser susan
当我们的添加一个用户时我们要考虑以下几个问题:
1 在我们的用户中不要带有空白符
2 避免在我们的用户名中使用连接符和下划线.
3 不要使用过长的用户名.
如果我们希望在我们创建用户帐户时有更多的控制选项,我们可以使用标准的命令行工具useradd.让我们来看一下我们可以使用的选项.首先我们执行下面的命令:
# useradd -D
我们就会看到用户帐户是如何默认添加的:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
在这个例子,所有的用户帐户都会被添加到user组中.如果我们查看一下/etc/group,我们就会看到在我们的系统上列出的所有的组.我们就会看到100所指的为user用户组.这是系统默认的情况.正如我们已经知道的,一个添加到系统的帐户要用一个目录来保存用户的文件.这在Linux系统中默认的是/home目录.而INACTIVE=-1是指用户帐户过期的时间.在我们的这个例子中是永不过期.有时我们会添加一些临时的帐户,我们所希望的是在一定的时间以后我们要删除关于这个帐户的所有内容.但是就是一个最好的系统管理员有时也会忘记这样的事情.所以我们就要设置一个用户过期的时间,这样在这个时间以后这个用户就不可以再登陆系统了.而下面的SHELL=/bin/bash则是指用户登陆到系统以后所使用的Shell.Bash是Linux发行版本中标准的Shell,当然作为一个系统管理员我们也可以来安装其他的Shell.最后一项对于我们系统管理员来就是会显得更为重要.SHELL=/etc/skel意味着位于这个目录下的文件在我们创建用户帐户时会被拷贝到用户的主目录.也许我们想要在这个目录添加其他的文件或是我们对这个目录中的文件进行更改.例如我们要在.bashrc中添加新的行,以使得他对于用户来说更安全:
alias cp='cp -i -p'
alias rm='rm -i'
alias mv='mv -i'
也许我们要添加下面的一句来使得我们的用户登陆时提示显得更漂亮:
PS1='\[\033[45m\]\[\033[1;33m\][\@]\u@\h:\W >\[\033[0m\] '
如果我们不喜欢现在的颜色我们可以更改45m和33m的值.
如果我们要在添加用户时有更多的选项,我们可以查看man手册页来得到一些更详细的帮助信息.下面我们来看一个添加帐户时最平常的选项:
# useradd -c "William Shakespeare -AKA,The Bard" -d /home/wshakespeare \-m -k
/etc/skel -g 100 -s /bin/bash wshakespeare
下面来看一下我们在这个命令中所做的工作.我们添加了William Shakespeare作为我们系统上的一个用户.这里的-c选项是一个简单的注释,必须在引号和用户密码文件/etc/passwd的帮助说明之间.而-d选项指出我们要在哪里建立用户目录.-m选项建立这个目录,-k选项要将下面的目录中的文件拷贝到用户目录中去.-g选项指出我们要将这个用户放在哪一个用户组中.-s选项指出这个用户要使用的Shell,而最后的则是我们要添加的用户登陆名.
也许我们也看到了我们并没有用-p选项来指定密码.在我们执行了这样的命令以后,我们的用户Shakespeare还没有,所以还不可以登陆.这就是一点点的复杂.在现在的大多数的Linux发行版本中使用影子口令系统.这是一个加密在的口令所以我们系统上的其他人是不可以看见的.现在我们遇到的问题就是我们添加了一个用户帐户我们需要一个已经加密的口令来使用用户正常的登陆,例如我想给这个用户一个密码"h4m13".如果我们用-p选项来指定这个密码,那么Linux系统就会拒绝我们的登陆请求,因为我们的这个密码并没有经过密.如果我们查看一下/etc/shadow文件我们就会看到经过加密的口令的样子.在Linux系统中这种加密采用的MD5的加密算法.如果我们要为用户指定一个密码,我们可以用下面的命令来做到:
# passwd user
作为一个系统管理员,我们也要删除帐户.要删除帐户我们可以用下面的命令:
# userdel wshakespeare
在这种情况下我们只是删除了wshakespeare的用户帐户,但是我们并没有删除他的用户目录和文件,如果要删除所有的wshakespeare内容,我们可以使用-r选项:
# userdel -r wshakespeare
这样就会删除他的所有内容,包括他的电子邮件.所以我们使用这个选项时一定要小心.
目录权限:
一个目录也可以像文件一样给予一定的权限.如果我们查看一下Linux中的目录,我们就会大多数的目录都有着类似的权限设置:drwxr-xr-x.这里的d用来区别这是一个目录,而不是一个文件.这与平常的权限设置也是一样的.但是有一个小小的不同.如果我们查看一下/tmp目录我们就会发现在这样的权限设置:
drwxrwxrwt 14 root root 4096 Aug 12 09:52 /tmp
许多程序执行时都要产生临时文件,所以组和其他的用户对这个目录都有写的权限.但是在这个权限设置中最后一个t是最重要的不同.这就是所谓的粘性位.在一般的情况下,如果我们对一个目录有写的权限,我们可以在这个目录中创建文件,也可以删除目录中的文件.而不论这个文件是不是我们创建的.如果有粘性位我们就不可以这样的做了.除非这个文件是我们创建的,否则我们是不可以删除他的.也就是说任何人都可以在有t的权限设置的目录中创建文件,但是只有拥者才可以删除这个文件.
我们可以这样的来测试一下:
我们创建两个目录,一个名为jack,一个名为jill,我们对jack目录这样的来设置权限位:
$ chmod 1777 jack
进入这个目录,建立一个文件:
$ touch pail_of_water
再设置另一个目录的权限位:
$ chmod 0777 jill
并且建立另一个文件:
$ touch up_the_hill
自动完成任务:
作为一个系统管理员,主要的任务之一就是要完成服务器的维护工作.大多数的这些任务都可以自动完成而不需要用户的干涉.在这一部分,我们将会谈到一些用这样的方式来完成工作的广泛用的程序.
at用法:
at程序可以用来执行命令,而且这样的命令只是执行一次.这个命令较为常见的用法是用在安排好的选定的条件下.如果我们希望我们公司的服务器每周六重启,那么at命令并不是一个有效的命令,而这样的工作可以由cron来完成.现在我们来假设,老板要求我们在1:00开会.这时我们就可以用来at命令来提醒我们了.我们可以在我们的系统中输入下面的命令:
# at 12:45
这样就会使得我们在开会前会有较多的时间来完成我们的一些准备工作.我们就会看到at提示:
at>
现在我们就可以输入一些我们要执行的命令了.我们在这里输入命令,这个命令可以告诉我们最近登陆到我们的服务器的人并且将其输入到文件'log-ins'中.由分号分隔的第二个命令则会打印出这个文件:
last > $HOME/log-ins;lp $HOME/log-ins
按下回车并按下CTRL-D来结束我们的输入,我们就会看到类似这样的输出提示:
job 15 at 2005-09-03 21:00
当然我们的工作的标号会随着我们使用的at命令而会有所不同.
我们可以有多种的方法来表明在哪一个时间我们希望at执行命令.我们甚至可以在teatime时间来执行我们的命令.这个时间是指下行4:00.
如果我们要at的命令队列中删除一个命令,我们可以用下面的命令;
# atrm 15
这个命令可以从at的命令队列中删除标号为15的工作.
如果我们要查看在at队列中的命令,我们可以用下面的命令:
# atq
我们还可以控制哪些用户可以使用at命令.在默认的情况下,/etc/at.deny控制谁不可以用at.也就是说在文件at.deny中列出的用户不可以使用这个命令.我们也可以建一个/etc/at.allow文件.有了这个文件系统就会忽略掉at.deny文件.所以没有在at.allow文件中出现的用户就不可以使用at命令.使用这个文件还是另一个文件就会在我们的管理风格中成为一个问题.如果我们希望用户可以做任何事直到他超出了他的权利范围,我们可以使用默认的at.deny文件.如果没有人使用这个命令,我们可以使用at.allow文件.但是在这里我们要记住的就是root用户总是可以使用at命令.
cron:
从一个系统管理员的角度来看,cron也许是最好的选择.我们可以在任何时间指定任何事.
我们可以有多种的方法来安排我们的要用cron来完成的工作,最常用的方法就是使用crontab.一般情况下,每一个用户都可以通过编辑来拥有一个工作的安排时间表.我们可以在其中加入或是删除我们所希望的工作.要编辑这个文件我们可以用下面的命令:
# crontab -e
在我们开始我们的工作安排之前明白这个文件的格式是相当重要的.crontab文件的语法格式并不是很容易掌握的.在这个文件中每一行会被分为几个部分.按照顺序,每一部分的含义如下:
Minute Hour Day(of the month) Month Weekday
我们并不会在同一个时间使用到所有的选项.如果我们使用了前四个,那么我们就不再需要最后一个了.最后一个选项是相当有用的,因为他可以使得我们在每个星期运行我们的工作.如果我们不想指定一个时间段,我们就要在相应的地方用*来代替.
一旦我们决定了要运行哪一个命令,我们就可以在文件的最后加入这个命令.所以一个常规的crontab文件类似于下面的样子:
30 3 * * 0 $HOME/bkup_script
这个命令的是在周日3:30运行我们主目录下的脚本来备份我们的文件.在我们输入这个命令后,我们就可以保存退出了.
如果我们要列出在crontab文件中列出的工作,我们可以用下面的命令:
# crontab -l
如果我们要删除crontab文件,我们可以用下面的命令来做到:
# crontab -r
我们还可以通过组合数字与字符来修改命令的执行.例如下面的例子:
0-59/1 * * * $HOME/shutoff_cam >/dev/null 2>&1
我们可以看到时间的一部分:0-59是指每一个小时的0-59分钟.
在大多数的Linux发行版本中在/etc目录下会有三个目录,cron.hourly,cron.daily,cron.monthly.正如我们所猜想的一样,这些目录可以使得系统不管理员每个小时或是每星期来运行工作.
相关阅读 更多 +