📄 0005.htm
字号:
Linux 可以使你有 多个 session : 这就像同时有好几台电脑在工作! <br><br>- - 切换 session 1..8: <br> $ <ALT-F1> ... <ALT-F8>. <br>- - 开始一个新的 session , 但不离开原本 session : <br> $ su - <loginname> <br>例如: <br> $ su - root <br>这相当有用. 比如, 当你要 mount 一个磁碟(机) 时. 因为只有 root可以作这件事. <br>- - 结束一个 session: <br> $ exit <br>- - 在前景执行一个行程: <br> $ progname [-switches] [parameters] [<input] [>output] <br>- - 在背景启动一个行程(在背景执行) 要加上 '&' 这个符号: <br> $ progname [-switches] [parameters] [<input] [>output] & <br>- - 查看有多少行程正在执行: <br> $ ps <br>这样会列出一个表格. 每一个行程都会有一个 PID 来识别 (一个数字). <br>- - 杀掉一个行程: <br> $ kill <PID> <br>有时後你必需用这个方法来结束一些行程 (当你不知道怎样正确结束时 :) 一个行程或许 要用以下方法才可以结束: <br> $ kill -15 <PID> <br> $ kill -9 <PID> <br>此外, shell (像 COMMAND.COM 相等的东西) 允许你暂停某个行程的执行, 或是把前景 换到背景执行, 背景换来前景. 我们用'工作'来称呼行程. <br>- - 查看有多少工做: <br> $ jobs <br>这样列出来的工作是以一个 shell 分配的数字来区别的, 而不是用 PID. <br>- - 暂停一个前景的行程: <br> $ <CTRL-C> <br>(但不总是有效 :p ) <br>- - 暂停前景的程式: <br> $ <CTRL-Z> <br>(ditto) <br>- - 将一个被暂停的程式移到背景继续执行: <br> $ bg <job> <br>- - 把一个背景执行中的程式提升到前景: <br> $ fg <job> <br>- - 再一次的, 要砍掉一个行程: <br> $ kill %<job> <br>这里的 <job> 可能是 1, 2, 3, ... 有了这些命令你就可以在同一个时间格式化磁碟, 压缩档案, 编译一个程式, 还可以解压缩, 而且, 你仍然还是看到提示号和游标在等 待你的命令. 不妨在 DOS 下试试看这麽做吧!! 在 Windows 下也试试, 比较一下它们 效率的不同, 然後你就会知道你的选择是否正确了. <br><br><br>第二节: 使用目录 <br><br><br>2.1. 目录: 前言 <br><br><br><br>我们已经大略看过 DOS 和 Linux 在档案处理方面的不同. 在目录方面, DOS 用 \ 表示根目录, Linux 则是 /. 同样的, 巢状表示的目录, DOS也用 \ 来分隔每一层次 目录, Linux 用 /. 比方说以下路径: <br> DOS: \PROGRAMS\C++\SOURCES\HELLO.CPP <br> Linux: /home/guido/papers/geology/mid_eocene.tex <br><br><br>相同的是, .. 表示上一层目录, . 表示现行目录. 记得一件事, 系统并不允许你在任何 地方 cd , rd, 或是 md. 每一个 user 都有一个自己的目录称作是 home, (这是系统管 理者分配的) 例如在我自己的 PC 上, 我的 home 是 /home/guido. <br><br><br><br>2.2. 对应 DOS 和 Linux 中的相关指令 <br><br><br>DIR: ls, find, du <br>CD: cd, pwd <br>MD: mkdir <br>RD: rmdir <br><br>- - EXAMPLES - <br><br>DOS Linux <br><br>C:\GUIDO>dir $ ls <br>C:\GUIDO>dir file.txt $ ls file.txt <br>C:\GUIDO>dir *.h *.c $ ls *.h *.c <br>C:\GUIDO>dir/p $ ls | more <br>C:\GUIDO>dir \*.tmp /s $ find / -name "*.tmp" <br>C:\GUIDO>cd $ pwd <br> n/a - see note $ cd <br> n/a - see note $ cd ~ <br> n/a - see note $ cd ~/temp <br>C:\GUIDO>cd \other $ cd /other <br>C:\GUIDO>cd ..\temp\trash $ cd ../temp/trash <br>C:\GUIDO>md newprogs $ mkdir newprogs <br>C:\GUIDO>md \progs\turbo $ mkdir /progs/turbo <br>C:\GUIDO>rd newprogs $ rmdir newprogs <br>C:\GUIDO>rd \progs\turbo $ rmdir /progs/turbo <br><br>附注: ~ 是 home 的一个缩写. cd ~ 可以使你瞬间回到自己的 home, 不论你在哪里. cd ~/tmp 会带你到 /home/your_home/tmp. 这样, 可以了解吗?? <br><br><br>第三节: 软碟, 硬碟, 和类似装置 <br><br>3.1. 使用软式磁碟 <br><br>或许你从未想过, 但 DOS 的 FORMAT A: 作了比它看起来更多的事. 事实上, 当你键入 FORMAT 这个命令时, 它会: <br><br>1) 实际的去格式化磁碟; <br>2) 建立 A:\ 这个目录 (= 建立一个档案系统); <br>3) 使这个磁碟能够被使用者使用 (= mount 一个磁碟机). <br><br>这三个步骤在 Linux 中是分开的. 我们可以在 Linux 中建立及使用 MS-DOS 格式的磁碟, 但是当然还有其它的格式可用. 最常用的要算是 ext2. 以下是准备一份可用的磁碟之方法 (请先 su 为 root): <br><br>- - 格式化一张 1,44 Meg 的软碟 (A:) <br> # fdformat /dev/fd0H1440 <br><br>- - 建立一个档案系统: <br> # mkfs -t ext2 -c /dev/fd0H1440 <br>或 <br> # mformat a: <br>建立一个 MS-DOS 的档案系统. <br><br>在使用这张磁片前, 你需要先将这个磁片连同磁碟机 mount. <br>- - mount 一个磁碟机: <br> # mount -t ext2 /dev/fd0 /mnt <br>or <br> # mount -t msdos /dev/fd0 /mnt <br><br>现在你已经可以使用这张磁片了. 当你结束工作, 要拿出磁片前, 请你 *一定* 要 umount. (重要!) <br> # umount /mnt <br>好, 你可以把磁片拿出来了. 很明显的, fdformat 和 mkfs 只要对未格式化的磁片进 行就可以了, 已作过的就不需要了. 如果要使用 B 磁碟机, 请参考前述的范例, 用 fd1H1440 和 fd1 替换 fd0H1440 和 fd0. <br><br>现在你从前对 A: , B: 的工作现在都移转到 /mnt 下了. 例如: <br><br>DOS Linux <br><br>C:\GUIDO>dir a: $ ls /mnt <br>C:\GUIDO>copy a:*.* \docs\temp $ cp /mnt/* /docs/temp <br>C:\GUIDO>copy *.zip a:\zip $ cp *.zip /mnt/zip <br>C:\GUIDO>a: $ cd /mnt <br>A:\> /mnt$ <br><br>不消说, 对软碟成立的方法, 对其它的 device 一样成立. 比方, 你可以 mount 另一 个硬碟或是光碟机. 稍微看一下 /dev 下的 device. 下面是 mount 一个光碟机的范例: # mount -t iso9660 /dev/cdrom /cdrom <br><br><br><br>第四节: 量身订作一个 OS <br><br>4.1. 系统初始化相关档案 <br><br>在 DOS 中有两个很重要的档案 -- AUTOEXEC.BAT 和 CONFIG.SYS. 当启动 DOS 时, 这两个档案负责一些系统的设定工作 , 诸如设定环境变数 PATH, FILES 等等, 甚至 呼叫其它必需在开机时载入的程式. <br><br>在 Linux 中也有一些类似工作的档案, 但其中有些却是相当的危险; 再你真正了解 你将要做的事之前, 请千万别去碰它. 无论如何, 我还是得告诉你那些需要特别谨慎 的档案: <br><br>FILES NOTES <br><br>/etc/inittab don't touch for now! <br>/etc/rc.d/* ditto <br><br>如果你想做的是设定 PATH 或是其它的环境变数, 抑或修改 login 时的讯息, 呼叫一个 程式, 以下大概就是你要的: <br><br>FILES NOTES <br><br>/etc/issue sets pre-login message 设定 login 前的讯息 <br>/etc/motd sets post-login message 设定 login 後的讯习 <br>/etc/profile sets PATH and other variables, etc. 设定环境变数 <br>/home/your_home/.profile does whatever you want 这里可以随意加入你想要的 <br><br>如果最後那一个档案(~/.profile) 存在, (注意到它是隐藏档), 那麽在你 login 之後 它的内含命令就会被执行. <br><br>范例 - 请看这个 .profile: <br><br> # I am a comment <br> echo Environment: <br> printenv | more # equivalent of command SET under DOS <br> alias d='ls -l' # easy to understand what an alias is <br> alias up='cd ..' <br> echo "I remind you that the path is "$PATH <br> echo "Have a good day, "$LOGNAME <br><br>PATH 和 LOGNAME, 正如你所预料的, 是两个环境变数. <br><br>4.2. 程式初始化设定档 <br><br>在 Linux 下, 一般来说所有的事都可以依照你的要求而作安排. 大多数的程式都有 它们自己的初始化设定档, 这些都可以由你来修改. 通常, 它们都以 .prognamerc 的 型式存在於 home 目录里. 在这里, 首先你可能需要接触的设定档有: <br><br>..xinitrc: 用来初始化 X Window System. <br>..fvwmrc: 初始化 fvwm 这个 window manager. 你可以在 <br>/usr/lib/X11/fvwm/system.fvwmrc 找到范例. <br>..xfm/*: xfm (一个 file manager) 的设定档. <br>..Xdefault: 由 rxvt -- 一个终端机模拟程式 -- 所使用. <br><br>对於这些设定档, 或是你将来会遇到的其它档案, 请查 Man page. <br><br><br>第五节: 关於程式设计 <br><br>5.1. 编写叙述程式 (Scripts): .BAT 档的聚合体 <br><br><br>你或许使用过 .BAT 来当做一长串命令的缩写 (我常做这种事). 这件事可以藉由在 profile 或 .profile 中设定 alias 来达成. 但是, 一旦 .BAT 档太过复杂, 那麽你 会喜欢由 shell 提供的叙述语言 (Scripting language) : 它几乎和 Qbasic 一样强 大而且易用. 它可以使用变数, 可以拥有像是 while , for, case if.. then .. else, 的语法结构; 它还有其它的优点 -- 例如, 它可以当成是程式语言的替代品. <br><br><br><br>要撰写一个 script - 就像在 DOS 下写 .BAT 档一样 - 只要编写一个 ASCII 的档案, 内含你想要的指令, 然後储存, 再使用下面这个命令让它可以被执行: <br> $ chgmod u+x <scriptfile> <br>当要执行时, 只要键入它的档名就可以了. <br><br><br>这里有个小小的警告: 系统内定的编辑器叫作 vi, 它有一点难以使用, 我想你应该也 会这样认为它有些烦人. 我不会在这篇文章中讨论它 -- 我自己也还尚未找到使用的窍 门 :p 请参考 Matt Welsh 的 "Linux installation... ", 109 页. 但你也可以使用其 它的编辑器, 如 joe 或是 X 下的 emacs. 这里只稍为说明一点你必需知道的 vi 知识 (至少让你可以 quit :p ) <br><br><br><br>- - 加入一段文字可以用在文章中按下 'i'; <br>- - 离开 vi 但不储存文章 : 请按 ESC 再打 :q! <br>- - 离开且存存 : 按 ESC, 再打 :wq <br><br><br>在 Linux 中编写 shell script 是一门大学问 -- 它几乎要一本书才能讲得详细. 本文不会再更深入的讨论这个问题; 但是, 以下提供了几个有用(希望是)的范例, 希望 能够使你对 shell script 有个初步的了解. <br><br><br><br>EXAMPLE 1: first_script <br><br> #!/bin/sh <br> # I am a comment <br> # don't change the first line - it's got to be there <br> echo "Today is `date`" <br> echo "My name is "$0 <br> echo "You gave me the following "$#" parameters: "$* <br> echo "First parameter is "$1 <br> echo "Have you grasped the trick?" <br><br>EXAMPLE 2: 2exe <br><br> #!/bin/sh <br> echo "making "$1" executable... " <br> chmod u+x $1 <br><br>EXAMPLE 3: backup <br><br> #!/bin/sh <br> echo "Copying files in ~/bak... " <br> for name in $* <br> do <br> cp ${name} ~/bak <br> done <br><br>EXAMPLE 4: fmta <br><br> #!/bin/sh <br> echo "I remind you that only root can format disks" <br> fdformat /dev/fd0H1440 <br> mkfs -t ext2 -c /dev/fd0H1440 <br> echo "disk formatted." <br><br>EXAMPLE 5: mnta <br><br> #!/bin/sh <br> echo "I remind you that only root can mount disks" <br> mount -t msdos /dev/fd0 /mnt <br> echo "don't forget to umount when you've done." <br><br>5.2. 自己写个 C 程式 <br><br>你应该不会期待在 Linux 有 GW/Qbasic 吧?? 在 Un*x 中, 系统内定的语言是 C, 不管你是喜欢还是讨厌它. 当然还有其它的语言可以用 (FORTRAN, Pascal, Lisp, Bacic .. 但没有 Turbo Pascal ^Q^ ). <br><br>假设你懂得 C.. 如果你曾经被 Turbo C++ 或是它在 DOS 下的兄弟们宠爱过, 那这里 有两句话恐怕不啻晴天霹雳: Linux 下的 C 编译器叫作 gcc, 但, 它没有 IDE 环境, 没有线上求助系统, 没有整合式除错器,..等等. 只有一个命令列的编译器, 但强大 且有效率. 以下这个命令可以编译你已写好的 hello.c : <br> $ gcc hello.c <br>这样会产生一个 a.out 的执行档. 如果你想让 gcc 造出其它档名的执行档, 键入 <br> $ gcc -o hola hello.c <br>要联结一个程式库, 你要在 gcc 後加上一个 -l<arg> 的选项. 比如说要联结 math <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -