10分钟学会Linux有点夸张,但是可以让一个新手初步熟悉Linux中最重要最基本的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是非常不错的。 英文地址:http://freeengineer.org/learnUNIXin10minutes.html 中文译文如下: 前言
这是我已经在过去的几年中给学生(CAD用户培训)培训中所使用的材料。 其目的是在一个页面上就可以使用 UNIX的shell的基础命令。(这样他们就没有打电话问我了)。 本文档受版权保护,但根据GFDL的条款自由传播。
对这个页面有什么想法吗?欢迎 给我发送补充,评论,更正,任何你认为是错误的或者是应该是包括在内的内容。我总是很高兴收到你的来信,请在你的邮件标题中单词包含“UNIX”的字样。 1. Directories (目录) 2. Moving around the file system (在文件系统中移动位置) 3. Listing directory contents(列出目录内容) 4. Changing file permissions and attributes(更改文件的权限和属性) 5. Moving, renaming, and copying files(移动,重命名和复制文件) 6. Viewing and editing files(查看和编辑文件) 7. Shells 8. Environment variables(环境变量) 9. Interactive History(交互历史) 10. Filename Completion(文件名补全) 11. Bash is the way cool shell. (Bash是一个很酷的Shell) 12. Redirection(重定向) 13.Pipes(管道) 14.Command Substitution(命令替换) 15.Searching for strings in files: The grep command (在文件中搜索字符串:grep命令) 16.Searching for files : The find command (搜索文件:find命令) 17.Reading and writing tapes, backups, and archives: The tar command (读取和写入磁带,备份和存档:tar命令 ) 18.File compression: compress, gzip, and bzip2 (文件压缩:compress,zip和bzip2) 19.Looking for help: The man and apropos commands (寻求帮助:man 和 apropos 命令 ) 20.Basics of the vi editor (vi编辑器的基础知识) 1 目录:在UNIX中,文件和目录路径使用正斜杠“/”来分隔目录,在一个路径中。事例:
/ 根目录
/usr 目录 usr ( 根目录/ 的子目录)
/usr/STRIM100 STRIM100 是 /usr 的一个子目录 2 在文件系统中移动位置 pwd 显示当前工作目录,或显示当前目录 cd 改变当前目录至当前用户的主目录 cd /usr/STRIM100 改变当前目录至目录 /usr/STRIM100 cd INIT 改变当前目录至当前目录的子目录 INIT cd .. 改变当前目录至上一层目录 cd $STRMWORK 改变当前目录至环境变量STRMWORK所定义的目录 cd ~bob 改变当前目录至用户bob的主目录(假如有权限的话) 3 列出目录内容 ls 列出目录下内容
ls -l 以长格式 (详细内容)列出目录 举例: $ ls -l 文件权限 | 链接个数或目录内容 | 文件拥有者 | 所在用户组 | 文件大小 | 日期和时间 | 文件名 | drwxr-xr-x | 4 | cliff | user | 1024 | Jun 18 09:40 | WAITRON_EARNINGS | -rw-r--r-- | 4 | cliff | user | 767392 | Jun 6 14:28 | scanlib.tar.gz |
文件权限中(drwxr-xr-x,-rw-r--r--) 第1位代表文件类型: - = 普通文件, d=目录, l = 链接符号,等等。 第(2,3,4)位代表文件的权限 (除拥有者所在用户组之外的所有用户) 第(5,6,7)位代表文件的权限 (和拥有者同组的用户) 第(8,9,10)位代表文件的权限(对拥有者) r = 读, w = 写, x = 执行 - = 缺失 ls -a 列出当前目录并且包含隐含文件.隐含文件以"."开头 ls -ld * 在当前目录下使用长格式列出所有文件和目录。 没有d的话,就是列出所有的所有的文件 有d的话,就是列出所有的文件和目录 4 更改文件的权限和属性chmod 755 文件更改文件的权限,对拥有者为RWX,对用户组为其它用户为RX(7 = rwx = 111的二进制 5 =R-X = 101二进制) chgrp user file 使文件属于该组的用户。 chown cliff file 使用户cliff成为文件拥有者 chown -R cliff dir 使用户成为目录dir的拥有者以及该目录树下的所有东西 你必须确保是文件/目录的拥有者或者拥有Root的权限在你做以上操作之前 5 移动,重命名和复制文件cp file1 file2 拷贝文件
mv file1 newname 移动或重命名一个文件
mv file1 ~/AAA/ 移动文件 file1 进入你主目录下的AAA子目录
rm file1 [file2 ...] 移除或删掉一个文件(有区别吗?)
rm -r dir1 [dir2...] 递归删除一个目录以及目录下的内容(小心哦!)
mkdir dir1 [dir2...] 创建目录
mkdir -p dirpath 创建目录dirpath,以及该路径中所有隐含的目录
rmdir dir1 [dir2...] 移除一个空目录 6 查看和编辑文件cat filename 把文件内容 在ascii中全部导出到屏幕
more filename 渐进的把文件内容全部导出到屏幕,按ENTER = 往下加一行SPACEBAR = 往下加一页 q=退出
less filename 就像more一样, 但是你可以使用上一页,不是所以的系统都支持
vi filename 用VI编辑器编辑一个文件,所有的Unix系统都有某种形式的VI
emacs filename 用emacs编辑器编辑一个文件,不是所有的系统都有emacs
head filename 显示一个文件的开始几行
head -n filename 显示一个文件的前面n行
tail filename 显示一个文件的最后几行
tail -n filename 显示一个文件的最后n行 7 Shells 根据所使用的Shell程序,命令行行为将略有不同 根据所使用的Shell,一些额外的行为可以相当不错
你可以查看你使用的Shell通过以下口令:echo $SHELL
当然,你可以创建一个包含一连串的shell命令的文件像一个程序一样执行它,而从完成一个任务。这个叫做shell脚本。 这个事实上是许多shell的主要目的,而不是命令行行为的交互。 8 环境变量你可以教会你的shell去记住一些东西,以便以后使用环境变量。 比如在bash shell环境下: export CASROOT=/usr/local/CAS3.0 定义了变量CASROOT的值为/usr/local/CAS3.0 export LD_LIBRARY_PATH=$CASROOT/Linux/lib 定义了变量LD_LIBRARY_PATH的值为:变量CASROOT的值加上/Linux/lib, 也就是/usr/local/CAS3.0/Linux/lib 通过把$作为变量的前缀,你可以得出变量的值通过任意命令: cd $CASROOT 改变你当前的目录至环境变量CASROOT指向的目录 echo $CASROOT 打印环境变量的CASROOT的值 printenv CASROOT 做(和上面)相同的事情在bash 和其他shell中 9 交互历史 bash和tcsh(还有其他一些)的一个特点是,你可以使用向上键去访问你前面执行过的一些口令,再编辑,重新执行它们。 10 文件名补全 bash和tcsh(还有其他一些)的一个特点是,你可以使用TAB键去补全只输入了部分的文件名,比如你有一个名为constantine-monks-and-willy-wonka.txt的文件和想去编辑它,你可以输入'vi const',敲击TAB键,shell将会帮你把剩余的名字填充(补全的名字是唯一的)。 11 Bash是一个很酷的Shell Bash甚至可以补全口令名称和环境变量。如果存在多个可以补全的名字,如果你敲击TAB两次bash会显示所有补全的名字。对于大部分Linux来说,bash是用户默认的shell。 12重定向 grep string filename > newfile 把grep口令的结果重定向到文件newfile grep string filename >> existfile 追加grep口令的结果到文件existfile 重定向的目录,> 和 >> 可以使用在许多命令上,写入输出结果到文件 13 管道 ls -l | more du -sc * | sort -n | tail 14 命令替换 你可以使用一个命令的输出作为另一个命令的输入称之为命令替换。命令替换,通过向后单引号包含替代命令的方式被调用,比如: cat `find . -name aaa.txt` 该命令会cat(显示全部内容到屏幕)所有的文件名为aaa.txt并且位于当前目录或者任何子目录树下面的文件 15 在文件中搜索字符串:grep命令 grep string filename 打印出文件中所有包含string的行 16 搜索文件:find命令 find search_path -name filename
find . -name aaa.txt 在当前目录或其任何子目录树下面,找出所有文件名为aaa.txt的文件
find / -name vimrc 找出系统中所有名为vimrc的文件
find /usr/local/games -name "*xpilot*" 在/usr/local/games目录树下面,所有文件名中包含xpilot的文件 17 读取和写入磁带,备份和存档:tar命令 Tar命令代表"tape archive",它是读写archives(文件和目录树的集合)的标准方法。
你经常会发现stuff 的archive 名字像 stuff.tar,或者 stuff.tar.gz.
这个stuff就是tar archive,和用gzip相关工具压缩过的 tar archive
Chances are that if someone gives you a tape written on a UNIX system, it will be in tar format, and you will use tar (and your tape drive) to read it.
同样,你如果要写一个tape文件给其他人,你也应该使用tar
例子:
tar xv
tar tv
tar cv file1 file2
tar cvf archive.tar file1 [file2...]
tar xvf archive.tar
tar cvfz archive.tar.gz dname
tar xvfz archive.tar.gz
tar cvfI archive.tar.bz2 dname 18 文件压缩:compress,zip和bzip2 标准的Unix压缩口令是compress和uncompress,压缩过的文件在文件名前面有一个.Z的前缀
compress part.igs 创建一个压缩文件part.igs.Z
uncompress part.igs 从压缩文件part.igs.Z解压到part.igs,注意.Z不是必须的
另一个常用的压缩工具是gzip (和gunzip)These are the GNU compress and uncompress utilities。
gzip比起标准压缩通常更好一点,但是可能不会存在于所有的系统。gzipped文件的前缀是 .gz
gzip part.igs 创建一个压缩文件part.igs.gz
gunzip part.igs 从part.igs.gz中解压缩原始文件
bzip2工具(通常)有比gzip甚至更好的压缩效果,但是要付出更多的时间去压缩和解压缩文件。
It is not as common a utility as gzip, but is becoming more generally available.
bzip2 part.igs 创建一个压缩的 Iges 文件 part.igs.bz2bunzip2
part.igs.bz2 解压缩这个压缩的 iges 文件 19 寻求帮助:man 和 apropos 命令 大多数命令给的手册业有时候是有用的,或多或少有具体用法,有人说他们被称为man页面是因为它们是为了真正的男人。 例如: man ls 显示ls口令的手册页面 你可以使用apropos搜索手册页面 例如: apropos build 显示所有描述中包含build字样的手册页面 Do a man apropos for detailed help on apropos 20 vi编辑器的基础知识 打开一个文件
vi filename
创建文本
编辑模式: 这些键会进入编辑模式然后可以键入文本
i 在当前光标位置前插入
I 在当前行的开始位置处插入
a 在当前光标位置插入或追加
A 在当前行的结尾处追加
r 替代1个字符
R 替代模式
<ESC> 终止插入或覆盖模式
删除文本
x 删除单个字符
dd 删除当前行并且放入缓冲
ndd删除n行并且放入缓冲
J 连接下一行到当前行(删除回车)
Oops
u 撤销最后一次口令
剪切与粘贴
yy剪切当前行放入缓冲
nyy剪切n行放入缓冲
p 把缓冲的内容放入当前行
P把缓冲的内容插入当前行的上一行
光标位置
^d 下一页
^u 上一页
:n 把光标定位于n行
把光标定位于文件的末尾
^g 显示当前的行数
h,j,k,l 左,上,下,右.Your arrow keys should also work if if your keyboard mappings are anywhere near sane.
替代字符串
:n1,n2:s/string1/string2/[g]
在n1到n2行之间,用string2替换掉string1,如果把g包含进去(g代表全局的)所有行的string1都会被替代,如果g没有被包含,那么只有第一个匹配的string1实例才会被替代。
^ 匹配开始行
. 匹配任何单个字符
$ 匹配结尾行
以上或其它的特殊字符,像前面的斜线可以用 \ 来转义
比如去匹配 "/usr/STRIM100/SOFT" 可以用 "\/usr\/STRIM100\/SOFT"
例子:
:1,$:s/dog/cat/g 把dog替换为cat,整个文件的每一个实例从第1行到最后($代表最后)
:23,25:/frog/bird/把frog替换为bird,从23到25行,每一行的第1个实例会被替换
保存和离开还有其他"ex"口令
这些口令全部以按下的冒号(:)为前缀,然后进入窗口的左下角,它们被称为ex命令因为它们是用ex文本编辑器编辑的口令
你不能敲入ex命令当你在编辑模式下时(在屏幕上输入文本)按下<ESC>键退出编辑模式
:w 保存当前的文件
:w new.file 保存当前内容到文件new.file
:w!existing.file 用当前编辑的文件区覆盖一个已经存在的文件
:wq 保存文件并退出
:q 退出
:q! 退出不更改
:efilename 打开文件filename编辑
:set number 打开行号
:set nonumber 关闭行号
|