Linux 的目录和文件结构与 DOS/Win 非常相似。文件具有遵循特殊规则的文件名,存储在目录中,有些是可执行文件,其中大多数都有命令开关。此外,您可以使用通配符、重定向和管道。只有一些细微的差别
NOTENOUG.TXT
。在 Linux 下,我们可以做得更好。如果您使用像 ext2 或 umsdos 这样的文件系统安装了 Linux,则可以使用更长的文件名(最多 255 个字符),并且可以使用多个点:例如,This_is.a.VERY_long.filename
。请注意,我同时使用了大写和小写字符:事实上...FILENAME.tar.gz
和 filename.tar.gz
是两个不同的文件。ls
是一个命令,LS
是一个错误;
$ # the following command makes a directory called "My old files"
$ mkdir "My old files"
$ ls
My old files bin tmp
此外,有些字符不应使用:其中一些是 !*$&#
。ls -F
命令时,可执行文件在其名称末尾用星号 `*
' 标记。例如
$ ls -F
I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
文件 cjpg*
和 my_1st_script*
是可执行文件,也就是“程序”。在 DOS 下,备份文件以 .BAK 结尾,而在 Linux 下,它们以波浪号 `~
' 结尾。此外,名称以点开头的文件被认为是隐藏文件。示例:文件 .I.am.a.hidden.file
不会在 ls
命令后显示;/switch
获得,Linux 开关用 -switch
或 --switch
。示例:dir /s<
tt> 变为 ls -R
。请注意,许多 DOS 程序,如 PKZIP
或 ARJ
,都使用 UNIX 风格的开关。您现在可以跳转到 从 DOS 到 Linux 的命令翻译 部分,但如果我是您,我会继续阅读。
UNIX 有一种 DOS 下不存在的文件类型:符号链接。这可以被认为是文件或目录的指针,并且可以用来代替它指向的文件或目录;它类似于 Windows 快捷方式。符号链接的示例有 /usr/X11
,它指向 /usr/X11R6
;/dev/modem
,它指向 /dev/ttyS0
或 /dev/ttyS1
。
要创建符号链接
$ ln -s <file_or_dir> <linkname>
示例
$ ln -s /usr/doc/g77/DOC g77manual.txt
现在您可以使用 g77manual.txt
而不是 /usr/doc/g77/DOC
。链接在目录列表中显示如下
$ ls -F
g77manual.txt@
$ ls -l
(several things...) g77manual.txt -> /usr/doc/g77/DOC
DOS 文件和目录具有以下属性:A(存档)、H(隐藏)、R(只读)和 S(系统)。只有 H 和 R 在 Linux 下有意义:隐藏文件以点开头,对于 R 属性,请继续阅读。
在 UNIX 下,文件具有“权限”和一个所有者,所有者又属于一个“组”。看看这个例子
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
第一个字段包含文件 /bin/ls
的权限,该文件属于 root 用户,组为 bin。撇开其余信息不谈,记住 -rwxr-xr-x
的意思是,从左到右
-
是文件类型(-
= 普通文件,d
= 目录,l
= 链接等);rwx
是文件所有者的权限(读取、写入、执行);r-x
是文件所有者所属组的权限(读取、执行);(我不会涵盖组的概念,只要您是初学者,您就可以在没有它的情况下生存 ;-) r-x
是所有其他用户的权限(读取、执行)。
目录 /bin
也具有权限:有关更多详细信息,请参见 目录权限 部分。这就是为什么除非您是 root 用户,否则您无法删除文件 /bin/ls
:您没有这样做的权限。要更改文件的权限,命令是
$ chmod <whoXperm> <file>
其中 who 是 u
(用户,即所有者)、g
(组)、o
(其他),X 是 +
或 -
,perm 是 r
(读取)、w
(写入)或 x
(执行)。chmod
的常见用法示例如下
$ chmod +x file
这设置了文件的执行权限。
$ chmod go-rw file
这移除了除所有者之外所有人的读取和写入权限。
$ chmod ugo+rwx file
这赋予所有人读取、写入和执行权限。
# chmod +s file
这创建了一个所谓的“setuid”或“suid”文件---一个每个人都可以使用其所有者权限执行的文件。通常,您会遇到 root suid 文件;这些通常是重要的系统文件,例如 X 服务器。
引用权限的较短方法是使用数字:rwxr-xr-x
可以表示为 755(每个字母对应一位:---
是 0,--x
是 1,-w-
是 2,-wx
是 3...)。这看起来很困难,但稍加练习,您就会理解这个概念。root 用户作为超级用户,可以更改所有人的文件权限。RMP。
左侧是 DOS 命令;右侧是它们的 Linux 对等命令。
ATTRIB: chmod
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
重定向和管道操作符: < > >> |
通配符:* ?
nul: /dev/null
prn, lpt1: /dev/lp0 或 /dev/lp1; lpr
DOS Linux
---------------------------------------------------------------------
C:\GUIDO>ATTRIB +R FILE.TXT $ chmod 400 file.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL $ cat * > total
C:\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc
C:\GUIDO>DEL TEMP $ rm temp
C:\GUIDO>DEL *.BAK $ rm *~
C:\GUIDO>MOVE PAPER.TXT TMP\ $ mv paper.txt tmp/
C:\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc
C:\GUIDO>PRINT LETTER.TXT $ lpr letter.txt
C:\GUIDO>TYPE LETTER.TXT $ more letter.txt
C:\GUIDO>TYPE LETTER.TXT $ less letter.txt
C:\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null
n/a $ more *.txt *.asc
n/a $ cat section*.txt | less
注释
*
在 Linux 下更智能:*
匹配除隐藏文件外的所有文件;.*
匹配所有隐藏文件(但也包括当前目录 `.
' 和父目录 `..
':注意!);*.*
仅匹配那些中间有 `.
' 或以点结尾的文件;p*r
匹配 `peter' 和 `piper';*c*
匹配 `picked' 和 `peck';more
时,按 <SPACE> 键通读文件,按 `q' 键退出。less
更直观,可以让您使用箭头键;UNDELETE
,所以三思而后行再删除任何内容;< > >>
之外,Linux 还有 2>
来重定向错误消息 (stderr);此外,2>&1
将 stderr 重定向到 stdout,而 1>&2
将 stdout 重定向到 stderr;[]
。用法:[abc]*
匹配以 a、b、c 开头的文件;*[I-N1-3]
匹配以 I、J、K、L、M、N、1、2、3 结尾的文件;lpr
<file> 在后台打印文件。要检查打印队列的状态,请使用 lpq
;要从打印队列中删除文件,请使用 lprm
;RENAME
;也就是说,mv *.xxx *.yyy
将不起作用。类似 REN 的命令可在 ftp://metalab.unc.edu/pub/Linux/utils/file 上获得;cp -i
和 mv -i
在文件将被覆盖时收到警告。
要运行程序,请像在 DOS 下一样键入其名称。如果程序存储的目录(使用目录 部分)包含在 PATH 中(系统初始化文件 部分),程序将启动。例外:与 DOS 不同,在 Linux 下,除非目录包含在 PATH 中,否则当前目录中的程序不会运行。变通方法:假设 prog
是您的程序,键入 ./prog
。
这是典型的命令行外观
$ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]
其中 -s1
, ..., -sn
是程序开关,par1
, ..., parn
是程序参数。您可以在命令行上发出多个命令
$ command1 ; command2 ; ... ; commandn
这就是运行程序的全部内容,但很容易更进一步。使用 Linux 的主要原因之一是它是一个多任务操作系统---它可以同时运行多个程序(从现在开始称为进程)。您可以启动后台进程并立即继续工作。此外,Linux 允许您拥有多个会话:这就像同时拥有多台计算机来工作!
su - <loginname>
。示例:su - root
。例如,当您需要执行只有 root 用户才能执行的任务时,这很有用。exit
。如果存在停止的作业(稍后会讲到),您将收到警告。&
'
$ progname [-switches] [parameters] [< input] [> output] &
[1] 123
shell 使用作业号(例如 [1]
;见下文)和 PID(进程识别号;在我们的示例中为 123)来识别进程。ps ax
。这将输出当前正在运行的进程列表。kill <PID>
。当您不知道如何以正确的方式退出进程时,可能需要杀死进程……除非您是 root 用户,否则您无法杀死其他人的进程。有时,进程只能通过 kill -SIGKILL <PID>
杀死。此外,shell 允许您停止或暂时挂起进程,将进程发送到后台,以及将进程从后台带到前台。在这种情况下,进程被称为“作业”。jobs
。在这里,作业由其作业号而不是 PID 标识。bg <%job>
(它变成一个作业)。fg <%job>
。要将发送到后台的最后一个作业带到前台,只需键入 fg
。kill <%job>
,其中 <job> 可以是 1、2、3 等。使用这些命令,您可以同时格式化磁盘、压缩一批文件、编译程序和解压缩存档,并且仍然可以使用提示符。用 Windows 尝试一下,只是为了看看性能上的差异(如果它没有崩溃,当然)。
要在名为 remote.machine.edu
的远程机器上运行程序
$ telnet remote.machine.edu
登录后,启动您喜欢的程序。不用说,您必须在远程机器上拥有 shell 帐户。
如果您有 X11,您甚至可以在远程计算机上运行 X 应用程序,并将其显示在您的 X 屏幕上。让 remote.machine.edu
成为远程 X 计算机,让 local.linux.box
成为您的 Linux 机器。要从 local.linux.box
运行位于 remote.machine.edu
上的 X 程序,请执行以下操作
xterm
或等效的终端模拟器,然后键入
$ xhost +remote.machine.edu
$ telnet remote.machine.edu
remote:$ DISPLAY=local.linux.box:0.0
remote:$ progname &
(您可能需要写成:setenv DISPLAY local.linux.box:0.0
,而不是 DISPLAY...
。这取决于远程 shell。)瞧!现在 progname
将在 remote.machine.edu
上启动,并将显示在您的机器上。不过,不要尝试通过调制解调器进行此操作,因为它太慢而无法使用。此外,这是一种粗糙且不安全的方法:请阅读 http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html 上的“远程 X 应用程序 mini-HOWTO”。