查看“命令行指南”的源代码
来自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> 在一切变得复杂之前,我们悄悄地简单扼要的继续。 /!\ 不耐烦地人可以直接看 '''基本用法''' 章节。 * 命令操作模式是一个很简洁的操作界面,它通过输入一条一条的指令(有些情况下可能是成组的命令)来实现对计算机的操作,通常它也被称为“文本操作模式” ==== 发展史 ==== 早期的计算机操作系统都只有命令行操作模式,现在非常流行的“图形用户界面(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
返回
命令行指南
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息