在windows下,我们有这样一个使用流程:登录系统->浏览文件系统->找到程序执行/找到文档打开->退出系统。
登录
在*nix中,有两种登录方式,一种是直接在本地终端上登录,一种是通过ssh或者telnet远程访问。不管哪种方式,在输入用户名、密码并成功登录后,出现在面前的是一个提示符,一般来说是$符号或者#,提示符也可以自己定制,如下所示
$ oyd@localhost ~ $ localhost oyd #
这是*nix的shell给你显示出来的,shell相当于windows的外壳程序explorer.exe,在*nix上你在提示符后面键入命令与shell打交道,windows中你用鼠标,键盘通过GUI界面与windows的外壳程序交互。
*nix的shell有很多种,如csh,ksh,bash,最流行的就是bash,我相信没有怪癖的用户都会使用bash。shell的选择可以在添加用户的时候指定,也可以输入命令切换。键入下面命令可以看出你的shell究竟是不是bash。
localhost oyd # echo $SHELL /bin/bash localhost oyd #
如果显示的是其他的shell,你可以手工输入bash命令切换过去
$ echo $SHELL /bin/tcsh $ bash bash: not found $
不过上面的提示bash: not found表示失败了,如果成功,应该是直接给你一个新的提示符,这个失败的原因是系统中没有安装bash,这也从一个侧面说明bash的地位,如果你工作的shell不是bash,那么八成是你系统中没有安装。
如果不是bash也没什么,各种shell在基本操作上大同小异,bash只不过让你更舒服一些。
浏览
先看看如何浏览你的文件系统,有下述一些命令可以使用
pwd 看看你现在在哪
ls 列出当前目录的文件
cd 进入某目录,cd .. 进入上级目录 cd ~ 进入用户主目录
df 列出当前文件系统分区
示例如下:
oyd@localhost ~ $ cd / oyd@localhost / $ ls bin boot dev etc home lib lost+found mnt opt proc root sbin sys tmp usr var oyd@localhost / $ cd ~ oyd@localhost ~ $ pwd /home/oyd oyd@localhost ~ $ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 7692908 2412544 4889584 34% / udev 10240 160 10080 2% /dev /dev/sda1 38856 11552 25298 32% /boot oyd@localhost ~ $
初次使用,你可能会觉得这种方式浏览起来远不如windows方便。但是如果你善用shell的tab自动补全的话,你就会发现优势。
举个例子来说,我正在写博客,突然我想到D:/CODE/sgfc-1.16下面去看看,那么在windows中,我需要先点开始菜单,然后点我的电脑,当运行的程序有点多时,这里要等待好一会儿(不要以为你的电脑快,用久了都会变成我这样的),然后双击D盘,文件有点多,找CODE花了不少时间,随后双击进去,找sgfc-1.16又花了不少时间,再双击进去。
那么在*nix下,假定我要去/home/oyd/CODE/sgfc-1.16,那么我只需要键入cd ~/C<tab>/sg<tab><enter>就可以了(<tab>表示制表键,<enter>表示回车键),这个过程非常的快捷。
windows的浏览方式特别适合陌生的东西,例如你去浏览别人的系统。*nix的浏览方式适合你已经很熟的东西,例如你自己电脑上的目录结构。
查看/执行
和windows的文档为中心不同,*nix的操作上依旧是程序为中心。也就是说你必须先知道能打开这个文档的程序是什么,你才能打开这个文档。
你会觉得*nix这种操作相当落后,但至少,你对你在做什么很清楚,不是吗?
在windows下,鬼知道你双击一个txt的时候,背地里是哪个木马在接管。何况,文档为中心的操作方式根本就不是一种能贯彻的理念,例如在文件进化到数据库之后,没见过谁是双击哪一条数据关联什么操作的。
*nix的一个基础信念,会使你在处理文档时比在windows下更轻松。*nix信奉一切都是文本。
例如你要在windows下查看账户信息,你需要专用的工具,但是*nix下,它只是一个文本文件(/etc/passwd),你可以用任意你习惯的方式去查看(例如cat)。
也就是说,windows下,你看到什么就双击,而*nix下,你看到什么就cat。举个例子,查看CPU的信息:
ouyangde@localhost ~ $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 14 model name : Genuine Intel(R) CPU T2400 @ 1.83GHz stepping : 8 cpu MHz : 0.000 cache size : 2048 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc up arch_perfmon pebs bts tsc_reliable pni pdcm bogomips : 134637.15 clflush size : 64 power management: ouyangde@localhost ~ $
cat命令查看整个文件
more和less以一种一次一屏的方式查看整个文件
head查看文件的开头n行
tail查看文件的结尾n行
more或less你可以不管,但请记住head和tail,它们非常有用,对于程序员来说,在*nix下的日常操作也像在编程。
tail还有一个超级常用的用法,tail -f,它用来监视日志文件非常有用,如果你在windows下用ultraedit看日志文件的话,你会切换一下,再回来看看日志是否改变,虽然麻烦,但已经比用记事本好多了。要不就是有专用工具来查看日志,那些专用工具提供了一个ListView控件以一行一行列出日志(说来惭愧,小时候我也做过类似的工具)。
但是tail -f,简单的就好像它不存在一样,但是你一旦用过,不会再寻求其他了。
也有非文本文件,对于这类文件,有一个命令file,可以先探明它是什么类型的:
$ file main.c main.c: ASCII C program text $ file main.o main.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped $ file 1.JPG 1.JPG: JPEG image data, JFIF standard 1.01 $ file vim-7.2-3-src.tar.bz2 vim-7.2-3-src.tar.bz2: bzip2 compressed data, block size = 900k $
*nix命令,除了shell内置的以外,都是一个个*nix可执行文件,它们放在不同的目录下,有一个PATH环境变量向shell指出应该在哪个目录找到它们。
ouyangde@localhost ~ $ echo $PATH /usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2 ouyangde@localhost ~ $
一般默认设置中的PATH都不包含当前目录,当前目录用点(.)表示,所以你执行当前目录的程序时,要在前面加./。例如./configure,这说明执行的是当前目录下的configure程序。
要执行一个程序,必须要有程序文件的执行权限。可执行的文件不一定是二进制,也可以是脚本。用ls -l来查看文件权限。
$ ls -l configure ttt -rwxr-xr-x 1 oyd oyd 152953 Dec 18 18:35 configure -rwxr-xr-x 1 oyd oyd 8349 Dec 18 18:32 ttt
如上-rwxr-xr-x中的x表示可执行。因此这两个文件都是可执行文件。
$ file configure ttt configure: Bourne shell script text executable ttt: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped
但是configure是一个文本脚本,可由shell执行,ttt则是一个*nix下的32位可执行程序,如你所见,它还是动态链接的。
如果你确认一个文件是可执行的,例如ttt,那么你可以用下面几种方式来执行:
$ pwd /home/oyd $ ls -l auto/ttt -rwxr-xr-x 1 ouyangde ouyangde 8349 Dec 18 18:32 auto/ttt $ auto/ttt Hello, world! $ /home/oyd/auto/ttt Hello, world! $ cd auto $ ./ttt $ Hello, world! $
*nix程序有一些通用的对命令行参数的约定,有两种风格,长选项和短选项。一般来说,-h 或者 --help能够查看关于这个程序用法的简短帮助。
如果输入错误,Ctrl+C可以中断当前一行的输入,shell会输出新的提示符
退出*nix系统可以用exit命令。