Linux命令的重要性不言而喻。下面,只说明比较常见的,本人使用比较多的几个指令的基本用法。当然,这里肯定是有举一反三的作用了。若需详细说明,建议用man去读详细的manual。
1.关于文件/目录处理的指令:
1.1 ls
这是最基本的文件指令。ls的意义为“list”,也就是将某一个目录下的内容显示出来。如果你在ls指令后没有跟任何文件,它将会显示出目前目录中所有文件。也可以在ls后面加上所要察看的目录名称或文件的名称,如
$ls/home/
$lsfoo
ls有一些参数,可以给予使用者更多有关的资讯,如下:
-a:在linux中若一个目录或文件名字的第一个字元为“。”,则使用ls将不会显示出这个文件的名字,我们称此类文件为隐藏文件。如tcsh的初设档。tcshrc;如果我们要察看这类文件,则必须加上参数“-a”。
-l:这个参数代表使用ls的长格式,可以显示更多的资讯,如文件存取权,文件拥有者(owner),文件大小,文件最后更新日期,甚而symboliclink的文件是link哪一个文件等等。如下:
$ls-l
drwx--x--x2jjtseng512Aug805:0818
drwx--x--x2jjtseng512Aug822:0019
-rw-------1jjtseng566Aug805:28makefile
1.2 cp
cp这个指令的意义是复制(“COPY”),也就是将一个或多个文件复制成另一个文件或者是将其复制到另一个目录去。
cp的用法如下:
cpf1f2:将文件名为f1的文件复制一份为文件名为f2的文件。
cpf1f2f3…dir:将文件f1f2f3…都以相同的文件名复制一份放到目录dir里面。
cp-rdir1dir2:将dir1的全部内容全部复制到dir2里面。
cp也有一些参数,如下:
-i:此参数是当已有文件名为f2的文件时,若迳自使用cp将会将原来f2的内容掩盖过去,因此在要盖过之前必须先询问使用者一下。如使用者的回答是y(yes)才执行复制的动作。
-r:可将一整颗子树都复制到另一个目录中。
1.3 mv
mv的意义为move,主要是将一文件改名或换至另一个目录。如同cp,它也有三种格式:
mvf1f2:将文件名为f1的文件变更成文件名为f2的文件。
mvdir1dir2:将文件名为dir1的目录变更成文件名为dir2的目录。
mvf1f2f3…dir:将文件f1f2f3…都移至目录dir里面。
mv的参数有两个,-f和-i,其中-i的意义与cp中的相同,均是interactive询问之意。而-f为强迫(force),就是不管有没有同名的文件,都进行操作,所有其他的参数遇到-f均会失效。
1.4 rm
rm的意义是remove,也就是用来删除一个文件的指令。在Linux中一个被删除的文件除非是系统恰好有做备份,否则是无法像DOS里面一样还能够救回来的。所以在做rm动作的时候使用者应该要特别小心。
rm的格式如下:
rm f1 f2 f3 …
而rm的参数比较常用的有几个:-f,-i,与-r
-f:将会使得系统在删除时,不提出任何警告讯息。
-i:在除去文件之前均会询问是否真要除去。
-r:递回式的删除。
小心不要随便使用rm -r f,否则有一天你会“欲哭无泪”L
1.5 mkdir
mkdir是一个让使用者建立一个目录的指令。你可以在一个目录底下使用midir建立一个子目录,使用的方法如下:
mkdir dirname1[dirname2…]
如此你就可以建立一个或多个目录。
1.6 chdir(cd)
这是让使用者用来转移工作目录用的。
chdir的用法如下:
chdir dirname
如此你就可以将目前的目录转移到dirname这一个目录去。
或使用“chdir 。。”来转移到上一层目录。
1.7 rmdir
相对于mkdir,rmdir是用来将一个“空的”目录杀掉的。如果一个目录下面没有任何文件,你就可以用rmdir指令将其除去。rmdir的使用法如下:
rmdir dirname1[dirname2…。]
如果一个目录底下有其他的文件,rmdir将无法将这个目录杀掉,除非使用rm指令的-r选项。
1.8 pwd
pwd会将目前目录的路径(path)显示出来,例如:
1.9 cat/more/less
以上三个指令均为察看文件内容的指令。cat的意义是猫…?不不不,是concatenate,在字典上的意思是“连结,将…串成锁状”(语出资工电子词典cdict),其实就是把文件的内容显示出来的意思。cat有许多奇怪的参数,较常为人所使用的是-n参数,也就是把显示出来的内容加上行号。cat的用法如下:
cat [-n]:自标准输入读进内容,你可以用pipe将别的程式的输出转向给cat。
cat [-n]filename:将filename的内容读进来,显示在标准输出上。
问题在于cat它是不会停下来的,因此并不好用(试想如果一个萤幕二十四行,而一个文件四百行,cat一出来将会劈哩啪啦不断的卷上去,使用者很难据此得到他们所需的资讯。)所以才有人又写了more出来。
more,跟据蔡文能老师的说法是“再多一点就好”,more可以将所观察的文件跟据终端机的形态一页页的显示出来,再根据使用者的要求换页或卷行。如果使用者要在某一个文件中搜寻一个特定的字串,则按/然后跟着打所要搜寻的单字即可进行搜寻。more也可以找得到。more的使用法如下:
more filename
如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开more的使用。在使用中按'v'亦可以使用编辑器来编辑所观看的文件。
less的用法与more极类似,原先它就是为了弥补more只能往前方卷页的缺点而设计。less的用法如下:
less filename
其与more不同的是它可以按y来往上卷一行,并且可以用“?”来往回搜寻你所要找的单字。
1.10 chmod
chmod为变更文件模式用(change mode)。这个指令是用来更改文件的存取模式(accessmode)。在linux一个文件上有可读(r)可写(w)可执行(x)三种模式,分别针对该文件的拥有者(onwer)、同群者(groupmember)(你可以ls -lg来观看某一文件的所属的group),以及其他人(other)。一个文件如果改成可执行模式则系统就将其视为一个可执行档,而一个目录的可执行模式代表使用者有进入该目录之权利。chmod就是用来变更一些文件的模式,其使用方式如下:
chmod [-fR] modefilename…
其参数的意义如下:
-f Force。chmod不会理会失败的动作。
-R Recurive。会将所有子树下的所有子目录及文件改为你所要改成的模式。
mode可以为一个三位或四位的八进位数字,来表示对某些对象的存取权。详情可参阅chmod(1)的manual page中有关Absolute Modes的说明。或是用一个字串来表示,请参考chmod(1)的说明。
2 关于进程处理的指令:
2.1 ps
ps是用来显示目前你的进程或系统进程的状况。以下列出比较常用的参数,其选项说明如下:
-a列出包括其他users的进程状况。
-u显示user-oriented的进程状况。
-x显示包括没有terminal控制的进程状况。
-w使用较宽的显示模式来显示进程状况。
我们可以经由ps取得目前进程的状况,如pid,running state等。
2.2 kill
kill指令的用途是送一个signal给某一个进程。因为大部份送的都是用来杀掉进程的SIGKILL或SIGHUP,因此称为kill。kill的用法为:
kill [-SIGNAL] pid…
kill -l
SIGNAL为一个singal的数字,从0到31,其中9是SIGKILL,也就是一般用来杀掉一些无法正常terminate的讯号。其余讯号的用途可参考sigvec(2)中对signal的说明。你也可以用kill -l来察看可代替signal号码的数目字。kill的详细情形请参阅mankill。
3 关于字串处理的指令:
3.1 echo
echo是用来显示一字串在终端机上。echo -n则是当显示完之后不会有跳行的动作。
3.2 grep/fgrep
grep为一过滤器,它可自一个或多个文件中过滤出具有某个字串的行,或是自标准输入过滤出具有某个字串的行。
fgrep可将欲过滤的一群字串放在某一个文件中,然后使用fgrep将包含有属于这一群字串的行过滤出来。
grep与fgrep的用法如下:
grep [-nv] match_pattern file1 file2…。
fgrep [-nv] -f pattern_file file1 file2…。
-n把所找到的行在行前加上行号列出
-v把不包含match_pattern的行列出
match_pattern所要搜寻的字串
-f以pattern_file存放所要搜寻的字串
4 网络查询指令
4.1 man
man是手册(manual)的意思。Linux提供线上辅助(on-line help)的功能,man就是用来让使用者在使用时查询指令、系统呼叫、标准程式库函式、各种表格等的使用所用的。man的用法如下:
man [-m path] [[section]title]…
man [-m path] -k keyword…
-m path man所需要的manual database的路径。我们也可以用设定环境变数MANPATH的方式来取代-M选项。
title这是所要查询的目的物。
section为一个数字表示manual的分类,通常1代表可执行指令,2代表系统呼叫(systemcall),3代表标准函数,等等。
像下面man查询的片段:
SEE ALSO
apropos(1),cat(1V),col(1V),eqn(1),lpr(1),more(1),
nroff(1),refer(1),tbl(1),troff(1),vgrind(1),vtroff(1),
whatis(1),eqnchar(7),man(7),catman(8)
我们如要参考eqnchar(7)的资料,则我们就输入man7 eqnchar,便能取得我们所要的辅助讯息。
-k keyword 用来将含有这项keyword的title列出来。
man在Linux上是一项非常重要的指令,我们在本讲义中所述之用法均仅只是一个大家比较常用的用法以及简单的说明,真正详细的用法与说明还是要请你使用man来得到。
4.2 who
who指令是用来查询目前有那些人在线上。
4.3 w
w指令是用来查询目前有那些人在线上,同时显示出那些人目前的工作。
4.4 ku
ku可以用来搜寻整个网路上的user,不像w跟who只是针对localhost的查询。而且ku提供让使用者建立搜寻特定使用者名单的功能。你可以建立一个档案information-file以条列的方式存放你的朋友的资料,再建立一个文件hosts-file来指定搜寻的机器名称。ku的指令格式可由ku -h得到。
5 网络操作指令
Linux提供网路的连接,使得你可以在各个不同的机器上做一些特殊的事情,如你可以在系上的iris图形工作站上做图形的处理,在系上的Sun上读News,甚至到学校的计中去找别系的同学talk。这些工作可以利用Linux的网路指令,在你的位子上连到各个不同的机器上工作。如此一来,即使你在寝室,也能轻易的连至系上或计中来工作,不用像以前的人必须泡在冷冰冰的机房面。
这些网路的指令如下所述:
5.1 rlogin与rsh
rlogin的意义是remotelogin,也就是经由网路到另外一部机器login。
rlogin的格式是:
rlogin host[-l username]
选项-l username是当你在远方的机器上的username和localhost不同的时後,必须输入的选项,否则rlogin将会假设你在那边的username与localhost相同,然後在第一次login时必然会发生错误。
rsh是在远方的机器上执行某些指令,而把结果传回localhost。rsh的格式如下:
rsh host [-l username][command]
如同rlogin的参数-l username,rsh的-l username也是指定remote host的username。而command则是要在remotehost上执行的指令。如果没有指定command,则rsh会去执行rlogin,如同直接执行rlogin。
不过rsh在执行的时候并不会像一般的login程序一样还会问你password,而是如果你没有设定trusttable,则remotehost将不会接受你的request。
rsh须要在每个可能会做为remotehost的机器上设定一个文件,称为。rhosts。这个文件每一行分为两个部份,第一个是允许login的hostname,第二个部份则是允许login的username。例如,在ccsun7。csie。nctu。edu。tw上头你的username为ysjuang,而你的home下面的。rhost有以下的一行:
ccsun6。cc。nctu。edu。twu8217529
则在ccsun6。cc。nctu。edu。tw机器上的useru8217529就可以用以下的方法来执行rsh程式:
$rsh ccsun7.csie.nctu.edu.tw –l ysjuang cat mbox
将ysjuang在ccsun7.csie.nctu.edu.tw上的mbox文件内容显示在localhost ccsun6.cc.nctu.edu.tw上。
而如果.rhost有这样的一行,则ccsun6.cc.nctu.edu.tw上的useru8217529将可以不用输入password而直接经由rsh或rloginlogin到ccsun7.csie.nctu.edu.tw来。
注意:
.rhost是一个设定可以信任的人login的表格,因此如果设定不当将会让不法之徒有可以乘机侵入系统的机会。如果你阅读man5rhosts,将会发现你可以在第一栏用+来取代任何hostname,第二栏用+来取代任何username。
如一般user喜欢偷懒利用“+username”来代替列一长串hostname,但是这样将会使得即使有一台PC上跑UNIX的user有与你相同的username,也可以得到你的trust而侵入你的系统。这样容易造成系统安全上的危险。因此本系禁止使用这样子的方式写你的。rhost档,如果发现将予以停机直到你找中心的工作人员将其改正为止。同理,如果你的第二个栏位为+,如“hostname+”,则你是允许在某一部机器上的“所有”user可以不用经由输入password来进入你的帐号,是壹种更危险的行为。所以请自行小心。
5.2 telnet
telnet是一个提供user经由网路连到remotehost。
telnet的格式如下:
telnet [hostname| ip -address][port]
hostname为一个像ccsun1或是ccsun1.cc.nctu.edu.tw的name address,ip-address则为一个由四个小於255的数字组成的ip address,如ccsun1的ip-address为140.113.17.173,ccsun1.cc.nctu.edu.tw的ip-address为140.113.4.11。你可以利用telnet ccsun1或telnet 140.113.17.173来连到ccsun1。
port为一些特殊的程式所提供给外界的沟通点,如资工系的MUD其server便提供一些port让user由这些port进入MUD程式。详情请参阅telnet(1)的说明。
5.3 ftp
ftp的意义是File Transfer Program,是一个很常应用在网路文件传输的程式。ftp的格式如下:
ftp [hostname| ip-address]
其中hostname |ip-address的意义跟telnet中的相同。
在进入ftp之後,如果与remotehost连接上了,它将会询问你username与密码,如果输入对了就可以开始进行文件传输。
在ftp中有许多的命令,详细的使用方式请参考ftp(1),这里仅列出较常用的cd,lcd,mkdir,put,mput,get,mget,binary,ascii,prompt,help与quit的使用方式。
ascii将传输模式设为ascii模式。通常用於传送文字档。
binary将传输模式设为binary模式,通常用於传送执行档,压缩档与影像档等。
cd remote-directory将remotehost上的工作目录改变。
lcd [directory]更改localhost的工作目录。
ls [remote-directory][local-file]列出remotehost上的文件。
get remote-file[local-file]取得远方的文件。
mget remote-files可使用通用字元一次取得多个文件。
put local-file[remote-file]将localhost的文件送到remotehost。
mput local-files可使用通用字元一次将多个文件放到remotehost上。
help[command]线上辅助指令。
mkdir directory-name在remotehost造一个目录。
prompt更改交谈模式,若为on则在mput与mget时每作一个文件之传输时均会询问。
quit/bye离开ftp。
利用ftp,我们便可以在不同的机器上将所需要的资料做转移,某些特别的机器更存放大量的资料以供各地的使用者抓取,本校较著名的ftpserver有NCTUCCCA与系上的ftp.csie.nctu.edu.tw。这些ftpserver均有提供一个user称为anonymous,一般的“外来客”可以利用这个username取得该server的公共资料。不过anonymous在询问password时是要求使用anonymous的使用者输入其emailaddress,以往有许多台湾的使用者在使用国外的ftpserver时并没有按照人家的要求输入其emailaddress,而仅是随便打一些字串,引起许多internetuser和管理者的不满,对台湾的使用者的风评变得很差,因此遵循各ftpserver的使用规则也是一件相当重要的事。
6 通讯指令:
6.1 write
这个指令是提供使用者传送讯息给另一个使用者,使用方式:
write username[tty]
6.2 talk/ytalk/cytalk/ctalk
Linux专用的交谈程式。会将萤幕分隔开为你的区域和交谈对象的区域,同时也可和不同机器的使用者交谈。使用方式:
talk username[@host][tty]
6.3 mesg
选择是否接受他人的messege,若为messegeno则他人的messege将无法传送给你,同时他也无法干扰你的工作。使用方法:
mesg [-n|-y]
6.4 mail/elm
在网路上的email程式,可经由此程式将信件mail给他人。使用方式:
mail [username]
mail -fmailboxfile
如有信件,则直接键入mail可以读取你的mail。
elm提供较mail更为方便的介面,而且可做线上的alias。你可以进入elm使用上下左右键来选读取的信件,并可按h取得线上的help文件。
使用方式:
elm[usernmae]
elm-fmailboxfile
7 编译器(Compiler):
Compiler的用处在於将你所撰写的程式翻译成一个可执行文件。在资工系常用的程式语言是C,pascal,FORTRAN等。你可以先写好一个C或Pascal或FORTRAN的原始程式档,再用这些compiler将其翻成可执行档。你可以用这个方法来制造你自己的特殊指令。
7.1 cc/gcc(CCompiler)
/usr/bin/cc
/usr/local/bin/gcc
语法:cc [-oexecfile]source
gcc [-oexecfile]source
execfile是你所希望的执行档的名称,如果没有加上-o选项编译出来的可执行档会以a。out做为档名。source为一个以。c做为结尾的C程式档。请参阅cc(1)的说明。
7.2 pc(PascalCompiler)
/usr/local/bin/pc
语法:pc[-oexecfile]source
execfile是你所希望的执行档的名称,如果没有加上-o选项编译出来的可执行档会以a。out做为档名。source为一个以。p做为结尾的Pascal程式档。请参阅/net/home5/lang/man中pc(1)的说明。
7.3 f77(FortranCompiler)
/net/home5/lang/f77
语法:f77[-oexecfile]source
execfile是你所希望的执行档的名称,如果没有加上-o选项编译出来的可执行档会以a。out做为档名。source为一个以。p做为结尾的FORTRAN程式档。
8 有关打印的指令:
以下为印表所会用到的指令,在本系的印表机有lp1,lp2(点矩阵印表机),lw,sp,ps,compaq(雷射印表机),供使用者使用。
8.1 lpr
lpr为用来将一个文件印至列表机的指令。
用法:
lpr -P[printer]file1file2file3…。
或
lpr-P[printer]
例子:
lpr-Plp1hello。chello。lsthello。map
lpr-Plp1
前者以参数输入所要印出的文件内容,後者列印标准输入文件(standardinput)的内容,因已将hello。c转向到标准输入,故会印出hello。c的文件内容。
8.2 lpq
lpq是用来观察printerqueue上的Jobs。
用法:
lpq-P[printer]
8.3 lprm
lprm是用来取消列印要求的指令。通常我们有时会印错,或是误送非文字档资料至printer,此时就必须利用lprm取消列印request,以免造成资源的浪费。
用法:
lprm -P[printer][Jobsid|username]
lprm用来清除printerqueue中的Jobs,如果你使用JobId作为参数,则它将此Job自printerqueue清除,如果你用username作为参数,则它将此queue中所有Owner为此username的Jobs清除。
9 更改个人使用资料
9.1 passwd
passwd是用来更改你的使用密码,用法为:
passwd[username]
在使用passwd的时候,它会先问你的旧密码,然後询问两次要更改的密码,确定无误後才将你的密码改掉。
9.2 chsh
chsh是提供使用者更换loginshell的指令,你可经由此更换自己使用的shell。