2.1 命令行基础

By admin, 22 十一月, 2017

1. Shell

如果我们的Linux没有图形界面(服务器版本一般默认不启动图形界面),那么一开始就已经处于一个控制台(Console)的环境中,也就是命令行的环境。在这个环境中,我们可以输入命令。可以按ALT+F1到F7去切换到不同的控制台,同时进行多任务操作。

如果我们用的是桌面Linux,例如Gnome或KDE环境,那么可以用CTRL+ALT+T启用一个终端(Terminal),这也是一个命令行的环境。也可以按CTRL+ALT+F1切换到纯字符界面的控制台,按ALT+F7切换回图形界面(不同Linux发行版可能不同,不一定是F7)。

当我们进入命令行环境的时候,我们就处在一个shell当中,shell内置一些基本的命令,例如cd、echo等。shell有很多种,有最原始的sh,有csh,也有当前最流行的bash。不同shell的语法和功能是有小区别的。一个shell里面可以运行另外一个shell,例如当我们在sh环境里有些功能使用不习惯,可以运行bash命令进入bash shell。

  • sh - 这是上个世纪70年代Unix系统就开始用的shell,也是Linux最基础的shell。
  • bash - 这是目前最流行的shell,大部分Linux发行版都默认使用这个shell。Max OS X也使用这种shell
  • csh - 最初是为BSD Unix设计的,语法像C语言。
  • tcsh - csh的改进版,FreeBSD系统的默认shell。(从技术上说,Mac OS X操作系统是以FreeBSD内核为基础的)
  • zsh - bash的改进版
  • ksh - 比较早期的一种类似于csh的shell

要查看当前环境的shell是哪一种,可以运行以下命令从环境变量中找到:

echo $SHELL

也可以查看/etc/passwd文件,里面有一个字段是声明用哪一个shell的。

shell是一种脚本语言,有语言的基本功能,有条件语句和循环语句,我们可以把很多shell命令编写成一个文件,批量地执行。会编写shell脚本是Linux系统管理、高效使用Linux的基本技能。

2. 运行命令

命令是shell内置的一个功能,或系统里某个地方的一个可执行文件。Windows也有命令行,也有命令,这一点和Linux本质上是一致的。一点小区别是Windows的可执行文件以.exe结尾,Linux则不需要,但Linux文件属性中有3个位来标记文件是否可执行,可以被谁执行。

在shell里随便输入一段字符串,然后回车运行。shell会从内置的命令里找,是否有这个命令,如果没有就会在$PATH环境变量里包含的目录里找,看是否有这个命令。但默认是不会找当前目录的,这一点有别于Windows。Windows的命令行是会默认在当前目录寻找可执行文件的。在Linux中如果要运行当前目录下的一个可执行文件,前面需要添加./(点斜杠),例如:(在程序员的世界里,foo,bar通常用来举例,本身不存在,可代替任意字符串)

./foo

3. 常用命令

  • ls - 列出当前目录文件,类似于Windows的dir命令。
  • cd - 改变目录。目录用斜杠/分隔,而不是Windows的反斜杠\。
  • mkdir - 创建目录。
  • rm - 删除目录或文件。
  • cat - 输出文本文件内容。
  • halt - 关机,只有root用户能运行。
  • poweroff - 也是关机,如果是桌面Linux,普通用户身份也能运行关机。
  • reboot - 重启系统
  • init 0 - 把系统置为0启动级别,也就是关机。
  • init 6 - 把系统置为6启动级别,相当于重启。其实还有几个级别,不同级别运行的初始化内容不同,有些级别可以理解为Windows的安全模式。
  • shutdown - 关机,或重启(带某些参数的时候是重启)。
  • exit - 退出当前shell
  • su - switch user或substitute user的缩写,以另外一个用户身份登录。
  • env - 输出当前shell的所有环境变量
  • echo - 打印一行文本到屏幕,例如:echo $PATH可以输出$PATH变量的值
  • top - 查看当前CPU、内存、进程等状态。按q退出。q是quit的缩写,在很多命令里都可以按q来退出。切记q这个退出快捷键,我们经常需要用到。
  • which - 输出一条命令的绝对路径,以便我们知道命令放在哪里。
  • whoami - 输出当前用户名。这也许是一个愚蠢的问题,但如果你是一个系统管理员,发现有人用户服务器后没有退出账号,你就可以运行这个命令把人找出来。
  • netstat - 输出网络端口、连接等信息。网络安全管理常用的命令。
  • route - 管理网络路由
  • ifconfig - 管理网络配置,可以查本机IP,类似Windows的ipconfig。
  • uname - 返回系统信息,可以查Linux内核版本,32位还是64位等信息。
  • history - 输出运行过的命令历史。如果用户在不同终端登录了,这里的历史只记录其中之一。
  • pwd - 输出当前目录的绝对路径,相当于环境变量$PWD的值。

4. 环境变量

无论是Windows还是Linux,命令行下都有环境变量。常见的变量有执行文件搜索目录$PATH,用户目录$HOME,当前Shell类型$SHELL。env命令可列出所有环境变量。通过等号操作可以给一个变量赋值,下面的命令可给$PATH变量追加一个搜索路径:

PATH=$PATH:$HOME/bin

运行echo $PATH可以看到变量的新值。

如果我们这是运行以下bash,进入一个子shell,再echo $PATH会发现,$PATH的值被恢复了。这是因为之前的赋值是临时的,不会被子shell继承。也就是说,如果我们运行一些需要进入到子shell的脚本文件,这些变量值修改将不起作用。如果希望变量修改被继承,我们可以用export命令,后面跟变量名,例如:

export PATH

如果我们希望一些变量永久地修改,下次重启也生效,可以把修改写在下面的文件里:

  • ~/.bashrc (重复提醒一次,~符号表示用户HOME目录)
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
  • /etc/profile (由于这个文件不在用户目录,意味着修改它会影响系统里的其他用户。记住,Linux服务器是多用户环境的,不是个人电脑)

这些文件不一定都存在,如果不存在可以尝试创建,它们会在shell启动的时候自动执行。另外补充说明,凡是文件名前面有个点的表示隐藏文件,ls命令需要加-a参数才能看见。

有一个关于提示符的环境变量$PS1是很有用的,下面命令可以修改命令行提示符,不妨动手试一下,很有趣的:

PS1="\u@\h \t \w: "

其中,\u会被替换成当前用户名,\h会被替换成主机名(为什么需要显示主机名?因为我有很多台服务器呀:),\t会被替换成时间,\w会被替换成当前的工作目录。\w应该是最有用的,这样可以更清楚当前在哪一个目录下。

作为习惯,我们应该用全部大写来命名环境变量,就像编程语言里命名常量的习惯。

5. LPI考纲描述

2.1 Command Line Basics

Weight: 3

Description: Basics of using the Linux command line.

Key Knowledge Areas:

  • Basic shell
  • Command line syntax
  • Variables
  • Globbing
  • Quoting

Terms and Utilities:

  • Bash
  • echo
  • history
  • PATH env variable
  • export
  • type

 

下一节:通过命令行获取帮助信息

返回目录

评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
请输入"Drupal10"