个人工具
登录
查看“命令行指南”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“命令行指南”的源代码
来自Ubuntu中文
←
命令行指南
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 命令行指南 == 原文作者:Dag Rune Sneeggen 授权许可: * [http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议Attribution-ShareAlike 2.0] * [http://www.gnu.org/copyleft/fdl.html GNU自由文档许可证] 翻译人员:雕啸长空 purewind 校正人员:purewind ---- '''注意:本文仍在修改之中,如果你只是想找一篇关于linux操作指令的文章,请参阅''''''BasicCommands.''' ---- === 引言 === * 可以说Ubuntu是当前图形界面最为友好和易操作的linux发行版,但还是有很多时候,只需执行几条简单的指令就可以完成繁琐的鼠标点击所完成的操作,从而节约大量的时间和精力,我向来提倡通过命令操作方式来使用linux,因为linux的命令操作模式功能实在太强大了!它可以实现你需要的所有操作! ==== 什么是linux的命令操作模式? ==== 简单的说,命令行就是基于成行的命令的用户界面。您也可称其为一个'''文本化指令序列处理器。''' * 绝大多数情况下, 用户通过输入一行命令(尽管可以不止一行)直接与计算机互动, 所触发的行为基于当前处理器的语法。<br> 在一切变得复杂之前,我们悄悄地简单扼要的继续。 /!\ 不耐烦地人可以直接看 '''基本用法''' 章节。 * 命令操作模式是一个很简洁的操作界面,它通过输入一条一条的指命(有些情况下可能是成组的命令)来实现对计算机的操作,通常它也被称为“文本操作模式” .ff ==== 发展史 ==== 早期的计算机操作系统都只有命令行操作模式,现在非常流行的“图形用户界面(GUI)”的概念最早是由施乐公司“'''帕尔托研究中心 (PARC)”'''的一名工程师所提出来的,在它提出来不久之后,苹果电脑公司出了一大笔钱才被许可“研究”他们的GUI概念,不久以后,苹果就有了他们自己的GUI。 * 在UNIX系统上直到1986年才出现第一个图形操作界面,是由'''MIT Project'''开发的,当时给这个图形界面命名为X,不过,在XFree86发布前,linux还要再多等上十年。XFree86今天依然是原始X 服务器的一个自由改编版。 * 如上所述,在GUI发明以前,CLI(命令行用户界面)是用户操控计算机的唯一途径,1969年,“贝尔电话实验室”发布了UNIX分时系统的V1版。UNIX中有个外壳程序叫做sh ,是与计算机交流的唯一方法,这种情况持续了很久。 * 稍候涌现了很多的UNIX衍生系统(purewind:个人以为原文中的dervative应为derivative,可能原作者打错字了,或者其他原因,汗)。比如HP-UX,1BSD,Solaris,OpenVMS,IRIX,SCO,ENIX,等等...,随着时间的推移,GNU/Linux出现了。不过Linux的发展历史并不是本文所要阐述的。时间继续推移,用以替代sh的CLI也出现了,比如 zsh ,ksh ,bourne shell等等。 ===== POSIX - UNIX可移植操作系统接口===== 维基百科是这样定义“UNIX可移植操作系统接口"的: * "UNIX可移植操作系统接口"是对所有参照IEEE组织制定的“Unix软件接口标准”而开发的软件的统称,依这个标准而开发的软件可以运行在所有基于Unix的操作系统上,IEEE组织给这一标准的命名为IEEE 1003,它的国际标准名称为ISO/IEC 9945。这个标准(UNIX可移植操作系统接口)来自于大约1985年的一个开发项目。后来应IEEE组织的要求,该项目成员Richard Stallman提议了一个好记的名字叫“POSIX",在那以前,它被称为IEEE-IX 。POSIX实际上就是可移植(Portable)操作(Operating)系统(System)接口(Interface)的首字母简写,最后加上X表明它的Unix血统。 * 这听起来确实古怪,为了保持简洁,可以说POSIX是您的CLI响应和交互的根本标准和功能。 ==== 为什么使用命令操作模式? ==== 这些听上去都非常枯燥乏味。更别提繁重的工作和思考了!事实上并非如此,只要你掌握了它的基本技巧,它就会变得相当简单。 使用CLI可以给你带来下面这些好处(非全部的好处) * 为您节省时间 * 救您脱离苦海 * 您可以通过GUI所没有的方式来使用Linux * 帮助您找出为何目标没有实现,增加您解决问题的几率 举个例子:某天,公司的计算机管理员提醒您,你已经使用太多的磁盘空间了。您可能很急切地想知道到底是什么东西占了那么多的硬盘空间,对比一下通过图形界面查询和执行一条du | sort -n(我们以後再来解释),你会发现有些事情用命令行来做比较快,而用图形界面可能比较简单。有时候你需要锤子,有时候你需要锯子<br>。 ==== 本文的假设前提==== 本文假设您正在使用默认的图形界面为GNOME的任意版本Ubuntu Linux,当然您也可能正在使用Fluxbox,KDE,XFCE或是其他的图形操作界面,我们简单点就假设是GNOME 了。 ==== [[UbuntuHelp:UsingTheTerminal/zh|如何进入命令模式]] ==== 点击GNOME菜单->附件->终端,就可以启动名为gnome-terminal的程序,它就是GNOME随机的终端模拟器。 ==== 命令模式的基本结构和概念 ==== 打开命令终端后你首先可能会注意到类似下面的界面: <pre><nowiki> dud@shadowplay:~ $ or [dud@shadowplay:~]$ </nowiki></pre> 你所看到的这些被称为命令终端提示符,它表示计算机已就绪,正在等待着用户输入操作指令。以我的屏幕画面为例,'''dud'''是我所登录的用户,'''shadowplay'''是这台计算机的主机名,'''~'''表示当前目录。此时输入任何指令按回车之后该指令将会提交到计算机运行,比如你可以输入命令:ls 再按下回车 <pre><nowiki> ls [ENTER] </nowiki></pre> {i} [ENTER]是指输入完ls后按下回车键,而不是叫你输入这个单词,ls这个命令将会列出你当前所在目录里的所有文件和子目录列表。 相关的概念 * 终端是与操作系统连接的物理(直接)接口 * 终端模拟器是我们这里要用的,是你运行的GUI中封装的CLI序。当您关闭一个终端模拟器时,通过这个终端打开的所有程序将会关闭。 * 外壳程序(shell)是您的终端的解释程序(purewind:原文的interpeter应为interpreter)。您可以开宝马也可以开本田,但是走得还是是一个方向一条路。简单的说就是交互的方式有点小差异。 * 命令一般是外壳程序为您执行的小程序。它通常会有一些结果提示信息输出。命令经常会接受一些参数(输入)来执行。 * “运行提示”指的是当执行某一命令时,系统给出的一些提示信息,大多回显到终端上。 * 输入是命令执行时接受的参数或者数据。输入会改变给出命令的行为。 * 参数通常会直接给出,或者通过 --switch="参数" 来给出。一般还会有简写形式,比如 -s 。 * 进程是当前在您的计算机中运行的命令或者程序。它并不总是活动的,它可以睡眠或者是处于其他几种状态。 === 基本用法 === 本节将向您介绍bash shell程序的精要,它是ubuntu缺省的外壳程序。 ==== 常用指令 ==== 接下来我将举例阐述一下常用的基本指令: /!\ 记住要正确的按照下面写的输入,后面还得带上回车键! 查询文件列表 <pre><nowiki> dud@shadowplay:~ $ ls file1.txt file2.pdf file3.mp3 file1.pdf another_file.txt Yet-Another_file.txt file-with_other-NAME.TXT </nowiki></pre> ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息: * '''<code><nowiki>ls /</nowiki></code>''' 将列出根目录'/'下的文件清单.如果给定一个参数,则命令行会把该参数当作命令行的工作目录。换句话说,命令行不再以当前目录为工作目录。 * '''<code><nowiki>ls -l</nowiki></code>''' 将给你列出一个更详细的文件清单. * '''<code><nowiki>ls -a</nowiki></code>''' 将列出包括隐藏文件(以.开头的文件)在内的所有文件. * '''<code><nowiki>ls -h</nowiki></code>''' 将以KB/MB/GB的形式给出文件大小,而不是以纯粹的Bytes. 查询当前所在目录: <pre><nowiki> dud@shadowplay:~ $ pwd /home/dud </nowiki></pre> 进入其他目录(用命令cd) <pre><nowiki> dud@shadowplay:~ $ pwd /home/dud dud@shadowplay:~ $ cd /root/ dud@shadowplay:/root $ pwd /root </nowiki></pre> 上面例子中,当前目录原来是/home/dud,执行cd /root/之后再运行pwd可以发现,当前目录已经改为/root了 在屏幕上输出字符: <pre><nowiki> dud@shadowplay:~ $ echo "Hello World" Hello World </nowiki></pre> 这是一个很有用的命令,它可以在屏幕上输入你指定的参数(""号中的内容),当然这里举的这个例子中它没有多大的实际意义,但随着你对LINUX指令的不断深入,就会发现它的价值所在。 显示文件内容: <pre><nowiki> dud@shadowplay:~ $ cat file1.txt Roses are red. Violets are blue, and you have the bird-flue! </nowiki></pre> cat这个命令可以用来在终端上显示txt文本文件的内容。如上例输出的这首“诗”; 复制文件: <pre><nowiki> dud@shadowplay:~ $ cp file1.txt file1_copy.txt dud@shadowplay:~ $ cat file1_copy.txt Roses are red. Violets are blue, and you have the bird-flue! </nowiki></pre> 移动文件: <pre><nowiki> dud@shadowplay:~ $ ls file1.txt file2.txt dud@shadowplay:~ $ mv file1.txt new_file.txt dud@shadowplay:~ $ ls file2.txt new_file.txt </nowiki></pre> '''需要注意的是,在命令操作时系统基本上不会给你什么提示,当然,绝大多数的命令可以通过加上一个参数 -v来要求系统给出执行命令的反馈信息; ''' <pre><nowiki> dud@shadowplay:~ $ mv -v file1.txt new_file.txt `file1.txt' -> `new_file.txt' </nowiki></pre> 加上-v参数后,系统就会输出操作提示 <pre><nowiki> `file1.txt' -> `new_file.txt'</nowiki></pre> 建立一个空文本文件: <pre><nowiki> dud@shadowplay:~ $ ls file1.txt dud@shadowplay:~ $ touch tempfile.txt dud@shadowplay:~ $ ls file1.txt tempfile.txt </nowiki></pre> 建立一个目录 <pre><nowiki> dud@shadowplay:~ $ ls file1.txt tempfile.txt dud@shadowplay:~ $ mkdir test_dir dud@shadowplay:~ $ ls file1.txt tempfile.txt test_dir </nowiki></pre> 删除文件/目录 <pre><nowiki> dud@shadowplay:~ $ ls -p file1.txt tempfile.txt test_dir/ dud@shadowplay:~ $ rm -i tempfile.txt rm: remove regular empty file `test.txt'? y dud@shadowplay:~ $ ls -p file1.txt test_dir/ dud@shadowplay:~ $ rm test_dir rm: cannot remove `test_dir': Is a directory dud@shadowplay:~ $ rm -R test_dir dud@shadowplay:~ $ ls -p file1.txt </nowiki></pre> 我们来分析一下上面的操作:首先我们通过ls命令查询可知当前目下有两个文件和一个文件夹; * 你可以用参数-p来让系统显示某一项的类型,比如是文件/文件夹/快捷链接等等; * 接下来我们用rm -i尝试删除文件,-i参数是让系统在执行删除操作前输出一条确认提示;i(interactive)也就是交互性的意思; * 当我们尝试用上面的命令去删除一个文件夹时会得到错误的提示,因为删除文件夹必须使用-R(recursive,循环)参数 特别提示:在使用命令操作时,系统假设你很明确自己在做什么,它不会给你太多的提示,比如你执行rm -Rf /,它将会删除你硬盘上所有的东西,并且不会给你任何提示,所以,尽量在使用命令时加上-i的参数,以让系统在执行前进行一次确认,防止你干一些蠢事。如果你觉得每次都要输入-i太麻烦,你可以执行以下的命令,让-i成为默认参数: <pre><nowiki> alias rm='rm -i' </nowiki></pre> 查询当前进程: <pre><nowiki> dud@shadowplay:~ $ ps PID TTY TIME CMD 11278 pts/1 00:00:00 bash 24448 pts/1 00:00:00 ps </nowiki></pre> 这条命令会例出你所启动的所有进程; * ps -a可以例出系统当前运行的所有进程,包括由其他用户启动的进程; * ps auxww是一条相当人性化的命令,它会例出除一些很特殊进程以外的所有进程,并会以一个高可读的形式显示结果,每一个进程都会有较为详细的解释; 基本命令的介绍就到此为止,你可以参阅以下地址得到更加详细的命令指南: * [http://www.ss64.com/bash/ HTML - Bash command reference] * [http://www.indiana.edu/~uitspubs/b017/b017.pdf PDF - Unix commands: A Quick Reference Card] ==== 控制流程 ==== ===== 输入/输出 ===== input用来读取你通过键盘(或其他标准输入设备)输入的信息,output用于在屏幕(或其他标准输出设备)上输出你指定的输出内容.另外还有一些标准的出错提示也是通过这个命令来实现的。通常在遇到操作错误时,系统会自动调用这个命令来输出标准错误提示; 我们能重定向命令中产生的输入和输出流的位置 ==== 重定向 ==== 如果你想把命令产生的输出流指向一个文件而不是(默认的)终端,你可以使用如下的语句: Example: <pre><nowiki> dud@shadowplay:~ $ ls > file4.txt dud@shadowplay:~ $ cat file4.txt file1.txt file2.pdf file3.mp3 file1.pdf another_file.txt Yet-Another_file.txt file-with_other-NAME.TXT file4.txt </nowiki></pre> 以上例子将创建文件file4.txt如果file4.txt不存在的话。'''注意:'''如果file4.txt已经存在,那么上面的命令将覆盖文件的内容。如果你想将内容添加到已存在的文件内容的最后,那你可以用下面这个语句: * '''command >> filename''' 示例: <pre><nowiki> dud@shadowplay:~ $ ls >> file4.txt dud@shadowplay:~ $ cat file4.txt file1.txt file2.pdf file3.mp3 file1.pdf another_file.txt Yet-Another_file.txt file-with_other-NAME.TXT file4.txt file1.txt file2.pdf file3.mp3 file1.pdf another_file.txt Yet-Another_file.txt file-with_other-NAME.TXT file4.txt </nowiki></pre> 在这个例子中,你会发现原有的文件中添加了新的内容。接下来我们会见到另一种重定向方式:我们将把一个文件的内容作为将要执行的命令的输入。以下是这个语句: * '''command < filename''' Example: <pre><nowiki> dud@shadowplay:~ $ sort < file4.txt another_file.txt another_file.txt file1.txt file1.txt file2.pdf file2.pdf file3.mp3 file3.mp3 file4.txt file4.txt file-with_other-NAME.TXT file-with_other-NAME.TXT Yet-Another_file.txt Yet-Another_file.txt </nowiki></pre> 如你所见,我们将file4.txt(的内容)作为命令的参数输入。 ===== 管道 ===== Linux的强大之处在于它能把几个简单的命令联合成为复杂的功能,通过键盘上的管道符号'|' 完成。现在,我们来排序上面的"grep"命令: grep -i command < myfile | sort > result.text 搜索 myfile 中的命令,将输出分类并写入分类文件到 result.text 。 有时候用ls列出很多命令的时候很不方便 这时“|”就充分利用到了 ls -l | less 慢慢看吧. ===== 后台进程 ===== CLI 不是系统的串行接口。您可以在执行其他命令时给出系统命令。要启动一个进程到后台,追加一个“&”到命令后面。 <pre><nowiki> sleep 60 & ls </nowiki></pre> 睡眠命令在后台运行,您依然可以与计算机交互。除了不同步启动命令以外,最好把 '&' 理解成 ';'。 如果您有一个命令将占用很多时间,您想把它放入后台运行,也很简单。只要在命令运行时按下''ctrl-z,''它就会停止。然后键入<code><nowiki> bg</nowiki></code> 使其转入后台。<code><nowiki>fg</nowiki></code> 命令可使其转回前台。 <pre><nowiki> sleep 60 <ctrl-z> bg fg </nowiki></pre> 最后,您可以使用 ''ctrl-c 来杀死一个前台进程。'' === 环境 === 特殊变量。PATH, PS1, ... ===== 操作变量 ===== ==== 简单脚本 ==== === 深入读本 === http://rute.2038bug.com/index.html.gz
返回至
命令行指南
。