这里游戏开始变得棘手。学习这些特性,然后你就可以说你“对 Linux 有所了解”了 ;-)
文件和目录具有权限(“保护”)和所有权,就像在 VMS 下一样。 如果你无法运行程序,或无法修改文件,或无法访问目录,那是因为你没有执行此操作的权限,和/或因为该文件不属于你。 让我们看下面的例子
$ ls -l /bin/ls -rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls* |
第一个字段显示文件的权限ls(所有者 root,组 bin)。 所有权有三种类型:所有者、组和其他人(类似于 VMS 所有者、组、世界),权限有三种类型:读取、写入(和删除)和执行。
从左到右,-是文件类型(-= 普通文件,d= 目录,l= 链接等);rwx是文件所有者的权限(读取、写入、执行);r-x是文件所有者组的权限(读取、执行);r-x是所有其他用户的权限(读取、执行)。
要更改文件的权限
$ chmod <whoXperm> <file> |
其中 who 是u(用户,即所有者),g(组),o(其他人),X 要么是++-, perm 是r(读取),w(写入),或者x(执行)。 例子
$ chmod u+x file |
这为文件所有者设置执行权限。 快捷方式chmod +x 文件.
$ chmod go-wx file |
这会删除除所有者以外的所有人的写入和执行权限。
$ chmod ugo+rwx file |
这会赋予所有人读取、写入和执行权限。
一种更简短的引用权限的方式是使用数字rwxr-xr-x可以表示为 755(每个字母对应一位---是 0,--x是 1,-w-是 2...)。
对于目录,rx表示你可以cd到该目录,并且w表示你可以删除目录中的文件(当然,根据文件的权限),或目录本身。 这仅仅是问题的一部分 --- RMP。
要更改文件的所有者
$ chown username file |
总结一下,表格
VMS Linux Notes ------------------------------------------------------------------------------ SET PROT=(O:RW) file.txt $ chmod u+rw file.txt $ chmod 600 file.txt SET PROT=(O:RWED,W) file $ chmod u+rwx file $ chmod 700 file SET PROT=(O:RWED,W:RE) file $ chmod 755 file SET PROT=(O:RW,G:RW,W) file $ chmod 660 file SET FILE/OWNER_UIC=JOE file $ chown joe file SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/ |
更多关于运行程序。 Linux 下没有你习惯的“批处理队列”;多任务处理的处理方式非常不同。 同样,这是典型的命令行外观
$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output & |
其中-s1, ..., -sn是程序开关,par1, ..., parn是程序参数。
现在让我们看看多任务处理是如何工作的。 在前台或后台运行的程序称为“进程”。
要在后台启动进程
$ progname [-switches] [parameters] [< input] [> output] & [1] 234 |
要查看有多少进程
$ ps -ax |
要杀死一个进程
$ kill <PID> |
$ kill -15 <PID> $ kill -9 <PID> |
除此之外,shell 允许你停止或临时挂起进程,将进程发送到后台,以及将进程从后台带到前台。 在这种情况下,进程称为“作业”。
要查看有多少作业
$ jobs |
要停止在前台运行的进程
$ CTRL-C |
要挂起在前台运行的进程
$ CTRL-Z |
要将挂起的进程发送到后台(它变成一个作业)
$ bg <job> |
要将作业带到前台
$ fg <job> |
要杀死一个作业
$ kill <%job> |
有关文件的更多信息。
stdin、stdout、stderr:在 UNIX 下,每个系统组件都被视为文件。 命令和程序从名为stdin(标准输入;通常是键盘)的“文件”获取输入,将其输出放在名为stdout(通常是屏幕)的“文件”上,错误消息转到名为stderr(通常是屏幕)的“文件”。 使用<<>你可以将输入和输出重定向到不同的文件。 此外,>>将输出附加到文件而不是覆盖它;2>重定向错误消息 (stderr); 2>&1 将 stderr 重定向到 stdout,而 1>&2 将 stdout 重定向到 stderr。 有一个“黑洞”叫做/dev/null:重定向到它的所有内容都会消失;
通配符: '*'*' 几乎相同。 用法:* 匹配除隐藏文件外的所有文件; .* 匹配所有隐藏文件; *.* 仅匹配中间有“.”,后跟其他字符的文件; p*r 匹配 “peter” 和 “piper”; *c* 匹配 “picked” 和 “peck”。 '%“?” 变成 “?”。 还有另一个通配符:?[][]. 用法[abc]*匹配以 a、b、c 开头的文件;*[I-N,1,2,3]匹配以 I、J、K、L、M、N、1、2、3 结尾的文件;
mv (重命名)不适用于多个文件; 也就是说,mv *.xxx *.yyy将不起作用;
使用cp -i<mv -i在文件将被覆盖时发出警告。
你的打印作业像在 VMS 下一样排队。 当你发出打印命令时,你可以指定打印机名称。 例子
$ lpr file.txt # this goes to the standard printer $ lpr -Plaser file.ps # this goes to the printer named 'laser' |
要处理打印队列,你可以使用以下命令
VMS Linux ------------------------------------------------------------------------------ $ PRINT file.ps $ lpr file.ps $ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps $ SHOW QUEUE $ lpq $ SHOW QUEUE/QUEUE=laser $ lpq -Plaser $ STOP/QUEUE $ lprm <item> |