首页 > 代码库 > Linux系统1.md

Linux系统1.md

计算机

介绍

电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。
在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机科学,而“计算机技术”指的是将计算机科学的成果应用于工程实践所派生的诸多技术性和经验性成果的总合。“计算机技术”与“计算机科学”是两个相关而又不同的概念,它们的不同在于前者偏重于实践而后者偏重于理论。此外,电子计算机亦被形象地称作电脑。至于由数据为核心的研究则称为信息技术,通常人们接触最多的是个人计算机。

冯·诺伊曼结构

尽管计算机技术自20世纪40年代第一部电子通用计算机诞生以来以来有了令人目眩的飞速发展,但是今天计算机仍然基本上采用的是存储程序结构,即冯·诺伊曼结构。这个结构实现了实用化的通用计算机。

冯·诺伊曼结构(英语:von Neumann architecture),也称冯·诺伊曼模型(Von Neumann model)或普林斯顿结构(Princeton architecture),是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。

存储程序结构将一部计算机描述成四个主要部分:算术逻辑单元、控制电路、存储器及输入输出设备。这些部件通过一组一组的排线连接(特别地,当一组线被用于多种不同意图的数据传输时又被称为总线),并且由一个时钟来驱动(当然某些其他事件也可能驱动控制电路)。

功能

概念上讲,一部计算机的存储器可以被视为一组“细胞”单元。每一个“细胞”都有一个编号,称为地址;又都可以存储一个较小的定长信息。这个信息既可以是指令(告诉计算机去做什么),也可以是数据(指令的处理对象)。原则上,每一个“细胞”都是可以存储二者之任一的。

算术逻辑单元(ALU)可以被称作计算机的大脑。它可以做两类运算: 第一类是算术运算,比如对两个数字进行加减法。算术运算部件的功能在ALU中是十分有限的,事实上, 一些ALU根本不支持电路级的乘法和除法运算(由是用户只能通过编程进行乘除法运算)。第二类是比较运算,即给定两个数, ALU对其进行比较以确定哪个更大一些。

输入输出系统是计算机从外部世界接收信息和向外部世界反馈运算结果的手段。对于一部标准的个人电脑,输入设备主要有键盘和鼠标,输出设备则是显示器、打印机以及其他许多后文将要讨论的可连接到计算机上的I/O设备。

控制系统将以上计算机各部分联系起来。它的功能是从存储器和输入输出设备中读取指令和数据,对指令进行解码, 并向ALU交付匹配指令要求的正确输入,告知ALU对这些数据做哪些运算并将结果数据返回到何处。控制系统中一个重要组件就是一个用来保持跟踪当前指令所在地址的计数器。 通常这个计数器随着指令的执行而累加,但有时如果指令指示进行跳转则不依此规则。

20世纪80年代以来ALU和控制单元(二者合称中央处理器)逐渐被集成到一块集成电路上,称作微处理器。 这类计算机的工作模式十分直观:在一个时钟周期内,计算机先从存储器中获取指令和数据,然后执行指令,存储数据,再获取下一条指令。这个过程被反复执行,直至得到一个终止指令。

计算机的组成

计算机是由硬件系统(hardware system)和软件系统(software system)两部分组成的。而前面所说的冯·诺依曼结构就是今天我们所使用的计算机硬件系统最基本的构成,下面就介绍计算机的硬件系统。

硬件

所谓硬件系统,是指构成计算机的物理设备,即由机械、光、电、磁器件构成的具有计算、控制、存储、输入和输出功能的实体部件。关于硬件系统中各部件的功能在上面已经做了介绍。

软件

软件(英语:software)是一系列按照特定顺序组织的电脑数据和指示,是电脑中的非有形部分。电脑中的有形部分称为硬件,由电脑的外壳及各零件及电路所组成。电脑软件需有硬件才能运作,反之亦然,软件和硬件都无法在不互相配合的情形下进行实际的运作。
一般来说,计算机软件划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。

  • 编程语言(英语:programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。

  • 应用程序是电脑软件的主要分类之一,是指为针对用户的某种应用目的所撰写的软件。

  • 系统软件(英语:System software),主要指用来运行或控制硬件所开发的计算机软件,如操作系统、解释器、编译器、数据库管理系统、公用程序等面向开发者的软件。

  • 中间件(英语:Middleware),又译中间件,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较广泛。

操作系统

操作系统(英语:operating system,缩写:OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出装置、操作网络与管理文件系统等基本事务。操作系统也提供一个让使用者与系统互动的操作界面。
在当今所使用的操作系统可已分为类Unix系统和Windows系统,我们下面介绍的就是一种类Unix系统Linux。而Linux全称应该是GNU/Linux,这是由于Linux是实现类kernel的功能,而由GNU所提供的软件加上kernel就是我们所使用的Linux操作系统,这里我们并不区分两者。

功能

操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。以现代标准而言,一个标准PC的操作系统应该提供以下的功能:

  • 进程管理(Processing management)

  • 内存管理(Memory management)

  • 文件系统(File system)

  • 网络通信(Networking)

  • 安全机制(Security)

  • 用户界面(User interface)

  • 驱动程序(Device drivers)

Windows操作系统

Microsoft Windows 是微软公司推出的一系列操作系统。它问世于1985年,起初是 MS-DOS 之下的桌面环境,其后续版本逐渐发展成为主要以个人电脑和服务器用户设计的操作系统,并最终获得了世界个人电脑操作系统的垄断地位。

Windows NT抽象架构

技术分享

技术分享

 

 

Linux操作系统

Linux 是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux发行版,而不是自己选择每一样组件或自行设置。

严格来讲,术语Linux只表示操作系统内核本身,但通常采用Linux内核来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其他实用工具。由于这些支持用户空间的系统工具和库主要由理查德·斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将该组合系统命名为GNU/Linux,但Linux不属于GNU计划,这个名称并没有得到社区的一致认同。

通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相关版本Red Hat Enterprise Linux、CentOS)和openSUSE等。Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。个人计算机使用的Linux发行版通常包含X Window和一个相应的桌面环境,如GNOME或KDE。桌面Linux操作系统常用的应用程序,包括Firefox网页浏览器、LibreOffice办公软件、GIMP图像处理工具等。由于Linux是自由软件,任何人都可以创建一个匹配自己需求的Linux发行版。

Linux架构图

技术分享

技术分享

 

 

Linux发行版

Linux发行版指的就是通常所说的“Linux操作系统”,它一般是由一些组织、团体、公司或者个人制作并发行的。Linux内核主要作为Linux发行版的一部分而使用。通常来讲,一个Linux发行版包括Linux内核,以及将整个软件安装到电脑上的一套安装工具,还有各种GNU软件,和其他的一些自由软件,在一些Linux发行版中可能会包含一些专有软件。发行版为许多不同的目的而制作,包括对不同电脑硬件结构的支持,对普通用户或开发者使用方式的调整,针对实时应用或嵌入式系统的开发等等。

一个典型的发行版包括:Linux内核,GNU库和各种系统工具,命令行Shell,图形界面底层的X窗口系统和上层的桌面环境等。桌面环境有如KDE或GNOME等,并包含数千种从办公包,编译器,文本编辑器,小游戏,儿童教育软件,到科学工具的应用软件。

基于Fedora

  • CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。CentOS 对上游代码的主要修改是为了移除不能自由使用的商标。2014年,CentOS宣布与Red Hat合作,但CentOS将会在新的委员会下继续运作,并不受RHEL的影响。

  • Fedora Linux 是较具知名度的Linux发行包之一,由Fedora项目社区开发、红帽公司赞助,目标是创建一套新颖、多功能并且自由(开放源代码)的操作系统。Fedora基于Red Hat Linux。在Red Hat Linux终止发行后,红帽公司项目以Fedora来替换Red Hat Linux在个人领域的应用,而另外发行的Red Hat Enterprise Linux(Red Hat企业版Linux)则替换Red Hat Linux在商业应用的领域。Fedora对于用户而言,是一套功能完备、更新快速的免费操作系统;而对赞助者Red Hat公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到Red Hat Enterprise Linux中。Fedora大约每六个月发布新版本。

  • Red Hat Enterprise Linux(RHEL)是一个由 Red Hat 开发的商业市场导向的 Linux 发行版。红帽公司从 Red Hat Enterprise Linux 5 开始对企业版 LINUX 的每个版本提供 10 年的支持。Red Hat Enterprise Linux 常被简称为 RHEL,但它并非官方名称。

基于Debian

  • Debian(英语发音:/?d?bi?n/)是由GPL和其他自由软件许可协议授权的自由软件组成的操作系统,由Debian项目(Debian Project)组织维护。Debian项目是一个独立的、分散的组织,由3000人志愿者组成,接受世界多个非盈利组织的资金支持,Software in the Public Interest提供支持并持有商标作为保护机构。Debian是一个大的系统组织框架,在这个框架下有多种不同操作系统核心的分支计划,主要为采用Linux核心的Debian GNU/Linux系统。众多的Linux发行版,例如Ubuntu、Knoppix和Linspire及Xandros等,都建基于Debian GNU/Linux。

  • Ubuntu是基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本(即每年的四月与十月),每2年发布一个LTS长期支持版本。 普通的桌面版可以获得发布后18个月内的支持,标为LTS(长期支持)的桌面版可以获得更长时间的支持。其桌面应用系列可以获得为期3年的技术支持,服务器版可以获得为期5年的技术支持。而自Ubuntu 12.04 LTS开始,桌面版和服务器版均可获得为期5年的技术支持。2013年3月有消息指出,Ubuntu计划在4月25日Ubuntu 13.04发布后,将非LTS版本的支持时间自18个月缩短至9个月,并采用滚动发布模式,允许开发者在不升级整个发行版的情况下升级单个核心包。

  • Kali Linux是基于Debian的Linux发行版, 设计用于数字鉴识和渗透测试。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版。

基于Slackware

  • Slackware是Slackware Linux, Inc的Patrick Volkerding制作的Linux发行版本。Slackware走了一条与其他的发行版本(Red Hat、Debian、Gentoo、SuSE、Mandriva、Ubuntu等)不同的道路,它力图成为“UNIX风格”的Linux发行版本。它的方针是只吸收稳定版本的应用程序,并且缺少其他Linux版本中那些为发行版本定制的配置工具。

  • openSUSE(英语发音:/?o?p?n?su?z?/),前身为SUSE Linux和SuSE Linux Professional,是一个Linux发行版与项目,由SUSE与其他公司赞助。openSUSE在全世界,尤其是在德国被广泛使用。它的开发重心是为软件开发者和系统管理者创造适用的开放源代码的工具,并提供易于使用的桌面环境和功能丰富的服务器环境。openSUSE针对桌面环境进行了一系列的优化,对Linux新手较为友好。

基于Arch Linux

  • Arch Linux是朝向轻量(lightweight)以及简单(simple)的Linux发行版。其中“简单”(Simplicity)被定义为“避免不必要或复杂的修改”,也就是说,是由开发者角度定义,而非用户角度思考。

基于Gentoo

  • Gentoo Linux(发音为/?d??ntu?/)是一种Linux操作系统,基于Portage包管理系统,而拥有几乎无限制的适应性特性,被官方称作元发行版(meta-distribution),支持多达10种以上的电脑系统结构平台。此项目和它的产品以巴布亚企鹅命名。Gentoo包管理系统的设计是模块化、可移植、易维护、灵活以及针对用户机器优化的。软件包从源代码构建,这延续了ports的传统。但是为了方便,也提供一些大型软件包在多种架构的预编译二进制文件,用户亦可自建或使用第三方二进制包镜像来直接安装二进制包。

各发行版的区别

基于维护组织和公司的区别:
上面已经列出了常用的发行版的相关信息,而这些发行版可以分为商业发行版,比如Fedora(Red Hat)、openSUSE(Novell)、Ubuntu(Canonical公司)和Mandriva Linux;和社区发行版,它们由自由软件社区提供支持,如Debian和Gentoo;也有发行版既不是商业发行版也不是社区发行版,其中最有名的是Slackware。

而在实际使用中又有基于rpm包或deb安装包的不同:

  • 基于rpm 安装:RedHat系列、OpenSuse系列。

  • 基于deb 安装:Debian、Ubuntu系列。

  • 其他方法安装:Arch Linux、Slackware、Gentoo。

各发行版的分支

技术分享

技术分享

 

 

Linux 系统设计哲学

  • 一切皆文件,设备也是文件。

  • 一个程序只作一件事并做好。

  • 把不同的程序通过管道等方式联合使用来完成复杂的任务。

  • 在文本文件中存储配置和数据。

  • 通过shell命令来提高效率和可移植性。

  • 避免使用可定制性低下的用户界面。

  • 可移植性比效率更重要。

  • 小的就是美的。

可以参考Unix设计哲学

明词解释

  • 计算机:电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

  • API:应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。

  • ABI:应用二进制接口(英语:application binary interface,缩写为 ABI)描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

  • GNU:GNU是一个自由操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU‘s Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理察·马修·斯托曼,将GNU视为“达成社会目的技术方法”。在实际使用上,由于多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。可以被称为GNU/Linux。

  • GPL:GNU通用公共许可协议(英语:GNU General Public License,缩写:GNU GPL、GPL),是一个被广泛使用的自由软件许可协议条款,保证终端用户运行、学习、分享(复制)及编辑软件之自由。GNU GPL最初由理查德·斯托曼(Richard Matthew Stallman)为GNU计划而撰写。此许可证最新版本为“第3版”(v3),于2007年6月29日发布。

  • LGPL:GNU宽通用公共许可证(英语:GNU Lesser General Public License)简称LGPL,是由自由软件基金会公布的自由软件授权条款。它允许企业与软件开发者使用,或将LGPL授权的软件集成至他们自己的软件内(即使该软件是私有软件也被允许),同时不会受到Copyleft特性的许可证强制对软件开源的限制。该许可证常被用于一些(但不是全部)的GNU程序库。

  • BSD许可证:BSD许可证(英语:Berkeley Software Distribution license),是自由软件中使用最广泛的许可证之一。BSD软件就是遵照这个许可证来发布,该许可证也因此而得名。跟其他许可证相比,从GNU通用公共许可证(GPL)到限制重重的著作权(Copyright),BSD许可证比较宽松,甚至跟公有领域更为接近。事实上,BSD许可证被认为是copycenter(中间版权),介乎标准的copyright与GPL的copyleft之间。"Take it down to the copy center and make as many copies as you want"。[1]可以说,GPL强迫后续版本必须一样是自由软件,BSD的后续版本可以选择要继续是BSD或其他自由软件条款或封闭软件等等。

  • POSIX:可移植操作系统接口(英语:Portable Operating System Interface of UNIX,缩写为POSIX),是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。Linux基本上逐步实现了POSIX兼容,但并没有参加正式的POSIX认证。

  • FSF:自由软件基金会(英语:Free Software Foundation,FSF)是一个致力于推广自由软件的美国民间非营利性组织。它于1985年10月由理查德·斯托曼建立。其主要工作是执行GNU计划,开发更多的自由软件。

  • ASF:Apache软件基金会(Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非营利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。

Linux基础

终端

日常我们使用Linux操作系统时都是通过终端进行操作,以下是终端的说明:

  • 物理终端:我们可以将显示器、键盘鼠标等直接连到主机接口上,这样的终端就是物理终端。我们日常使用的电脑显示器就是此类终端。同时我们也会称之为控制台:console,文件:/dev/console

  • 虚拟终端:除了物理终端系统还会给我们6个虚拟终端,这些终端是附加在物理终端以上的,使用软件方式虚拟实现的终端。我们可以通过 Ctrl+Alt+F[1-6]快捷键进行调整,文件:/dev/tty# [1,6]

  • 图形终端:也是附加在物理终端以上的,使用软件方式虚拟实现的终端,但它会额外的提供图形桌面环境。我们可以通过 Ctrl+Alt+F7 快捷键进行调整。

  • 伪终端:图形界面下打开的命令行接口,还有基于ssh协议或者telnet协议等远程打开的命令行界面。文件:/dev/pts/#。

登录系统

在登录linux 系统中我们即可以直接那物理终端进行登录,也可以使用ssh 进行远程登录。如果我们工作时用的是Windows 系统而如果登录Linux 系统可以使用Xshell、SecureCRT或者Putty。在我登录到系统后会显示如下的界面:

[root@node3 ~]#

其中各相关信息如下:

  • root:当登录的用户,实际登录不建议用root登录!

  • node3: 当前主机的主机名;

  • ~:用户当前所在的目录(current directory),也称为工作目录(working directory);

  • #:命令提示符;

    • #:管理员账号,为root; 拥有最高权限,能执行所有操作;

    • $:普通用户,非root用户;不具有管理权限,不能执行系统管理类操作;

基础知识

命令的语法通用格式

# COMMAND OPTIONS ARGUMENTS

COMMAND:发起一命令:请求内核将某个二进制程序运行为一个进程;

命令分为两类:

  • 由shell程序的自带的命令:内置命令(builtin)

  • 独立的可执行程序文件,文件名即命令名:外部命令

OPTIONS:指定命令的运行特性;

选项有两种表现形式:

  • 短选项:-C, 例如-l, -d。注意:有些命令的选项没有-;如果同一命令同时使用多个短选项,多数可合并:-l -d = -ld。

  • 长选项:--word, 例如--help, --human-readable。注意:长选项不能合并;

ARGUMENTS:命令的作用对象;命令对什么生效;
注意:不同的命令的参数;有些命令可同时带多个参数,多个之间以空白字符分隔;

获取命令帮助

如果是内部命令我们可以通过下面的方式过去帮助信息:

help COMMAND

而如果是外部命令则可以使用下面的帮助信息:

命令自带简要格式的使用帮助

# COMMAND --help

查看命令的简要说明

简要说明命令的作用(显示命令所处的man分类页面):

# whatis lsof
lsof                 (8)  - list open files

使用man 帮助

# man COMMAND

帮助的段落

  • NAME:功能性说明

  • SYNOPSIS:语法格式

  • DESCRIPTION:描述

  • OPTIONS:选项

  • EXAMPLES:使用示例

  • AUTHOR: 作者

  • BUGS: 报告程序bug的方式

  • SEE ALSO: 参考

语法格式

  • []:可选内容;

  • <>:必须提供的内容;

  • a|b|c:多选一;

  • ...:同类内容可出现多个;

man页面所属的分类标识

在man的帮助手册中,将帮助文档分为了9个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看。
(1)、用户可以操作的命令或者是可执行文件
(2)、系统核心可调用的函数与工具等
(3)、一些常用的函数与数据库
(4)、设备文件的说明
(5)、设置文件或者某些文件的格式
(6)、游戏
(7)、惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
(8)、系统管理员可用的管理条令
(9)、与内核有关的文件

操作方法

翻屏

  • 空格键:向文件尾翻一屏;

  • b: 向文件首部翻一屏;

  • Ctrl+d:向文件尾部翻半屏;

  • Ctrl+u:向文件首部翻半屏;

  • 回车键:向文件尾部翻一行;

  • k: 向文件首部翻一行;

  • G:跳转至最后一行;

  • #G: 跳转至指定行;

  • 1G:跳转至文件首部;

文本搜索

  • /keyword:从文件首部向文件尾部依次查找;不区分字符大小写;

  • ?keyword:从文件尾部向文件首部依次查找;

    • n: 与查找命令方向相同;

    • N: 与查找命令方向相反;

常用选项

  • -M /PATH/TO/SOMEDIR:到指定目录下查找命令手册并打开之;

获取命令的在线文档

# info COMMAND

用程序自带帮助文档

很多应用程序会自带帮助文档,帮助文档路径为:/usr/share/doc/APP-VERSION

  • README:程序的相关的信息;

  • INSTALL: 安装帮助;

  • CHANGES:版本迭代时的改动信息;

官方文档

例如RedHat:
https://access.redhat.com/documentation/en/

程序官方的文档

我们在安装一些系统没有带的程序时,在这些程序的官方站点上的“Document”就是该程序的帮助信息。

搜索引擎

Linux 命令

显示工作目录pwd

# pwd
/root
# cd /usr/local/games/
# pwd
/usr/local/games

目录切换cd

切换回家目录:cd
在上一次所在目录与当前目录之间来回切换: cd -
切换回自己的家目录: cd ~
切换至指定用户的家目录:cd ~USERNAME

# pwd
/usr/local/games
# cd ~
# pwd
/root
# cd -
/usr/local/games
# pwd
/usr/local/games
# cd ~pengfeihu
# pwd
/home/pengfeihu

显示终端机连接tty

在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

参数

  • -s或--silent或--quiet 不显示任何信息,只回传状态代码。

举例

# tty
/dev/pts/0

启动图形界面startx

startx为启动X Window的script文件,实际上启动X Window的程序为xinit。

使用

在某一虚拟终端接口运行命令:

# startx &

列出指定目录下的内容ls

语法

ls [OPTION]... [FILE]...

选项

  • -a, --all 列出目录下的所有文件,包括以 . 开头的隐含文件。

  • -A, --almost-all 列出除了 . 及 .. 以外的任何项目

  • -b, --escape 把文件名中不可输出的字符用反斜杠加字符编号的形式列出。

  • -B, --ignore-backups 不列出任何以 ~ 字符结束的项目

  • --color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是‘never’、‘always’或‘auto’其中之一

  • -d, --directory 将目录象文件一样显示,而不是显示其下的文件。

  • -F, --classify 加上文件类型的指示符号 (*/=@| 其中一个)。可执行的常规文件追加 * ,目录文件后面追加 / ,链接文件追加 @,FIFOs文件追加 | ,套接字文件追加 = 。

  • -g 类似 -l,但不列出所有者

  • -G, –no-group 不列出任何有关组的信息

  • -h, --human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)

  • -i, --inode 印出每个文件的 inode 号

  • -l 列出文件的详细信息。

  • -L, --dereference 当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息

  • -m 所有项目以逗号分隔,并填满整行行宽

  • -n, --numeric-uid-gid 类似 -l,用数字的 UID,GID 代替名称。

  • -o 类似 -l,显示文件的除组信息外的详细信息。

  • -p, --indicator-style=slash 对目录加上表示符号"/"

  • -q, --hide-control-chars 以 ? 字符代替无法打印的字符

  • -Q, --quote-name 将项目名称括上双引号

  • -r, –reverse 依相反次序排列

  • -R, –recursive 同时列出所有子目录层

  • -s, –size 以块大小为单位列出所有文件的大小

  • -S 根据文件大小排序

  • --time=WORD 和-l 同时使用时显示WORD 所代表的时间而非修改时 间:atime、access、use、ctime 或status;

  • --time-style=STYLE 和-l 同时使用时根据STYLE 代表的格式显示时间: full-iso、iso、locale、posix-iso、+FORMAT。

  • -t 以文件修改时间排序

  • -u 配合 -lt:显示访问时间而且依访问时间排序,配合 -l:显示访问时间但根据名称排序,否则:根据访问时间排序

  • -U 不进行排序;依文件系统原有的次序列出项目

  • -v 根据版本进行排序

  • -x 逐行列出项目而不是逐栏列出

  • -X 根据扩展名排序

  • -1 每行只列出一个文件

举例

  • 列出tmp目录下所有的文件的信息并包含子目录:

# ls -lR
  • 列出etc目录下档案的最后5个,愈新的排愈后面,可以使用如下命令

# ls -ltr |tail -5
  • 列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*" :

# ls -AF
aliyum.sh*  aliyum.sh~  .ICE-unix/  mysql.sock=  pear/  test/  test1/  yum.log
  • 按文件大小列出:

# ls -lS
  • 指定时间格式列出文件:

# ls -l --time-style=long-iso
drwxr-xr-x. 3 root root     4096 2016-03-12 18:12 aaa
drwxr-xr-x. 2 root root     4096 2016-03-12 17:05 abc
lrwxrwxrwx. 1 root root       13 2016-03-12 15:43 bbb -> /tmp/test/abc
drwxr-xr-x. 2 root root 21999616 2016-03-12 18:04 ddd

文件文本查看工具cat

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。

语法

cat [OPTION]... [FILE]...

选项

  • -A, --show-all 等于-vET

  • -b, --number-nonblank 对非空输出行编号

  • -e 等于-vE

  • -E, --show-ends 在每行结束处显示"$"

  • -n, --number 对输出的所有行编号

  • -s, --squeeze-blank 不输出多行空行

  • -t 与-vT 等价

  • -T, --show-tabs 将跳格字符显示为^I

  • -u (被忽略)

  • -v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外

举例

查看/etc/issue文件,输出行的编号:

# cat -n /etc/issue
     1  CentOS release 6.7 (Final)
     2  Kernel \r on an \m
     3  

对于空行不输出编号:

# cat /etc/issue -b
     1  CentOS release 6.7 (Final)
     2  Kernel \r on an \m

将/etc/redhat-release 和 /etc/issue文件组合输出至test.txt文件:

# cat -b /etc/redhat-release /etc/issue >test.txt
# cat test.txt
     1  CentOS release 6.7 (Final)
     2  CentOS release 6.7 (Final)
     3  Kernel \r on an \m

文件文本查看工具tac

tac 是将 cat 反写过来,所以他的功能就跟 cat 相反,cat 是由第一行到最后一行连续显示在萤幕上,而 tac 则是由最后一行到第一行反向在萤幕上显示出来!

选项

  • -b, --before 在行前而非行尾添加分隔标志

  • -r, --regex 将分 隔标志视作正则表达式来解析

  • -s, --separator=字符串 使用指定字符串代替换行作为分隔标志

查看文件内容类型file

该命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。

选项

  • -b:列出文件辨识结果时,不显示文件名称。

  • -c:详细显示指令执行过程,便于排错或分析程序执行的情形

  • -f:列出文件中文件名的文件类型

  • -F:使用指定分隔符号替换输出文件名后的默认的“:”分隔符。

  • -i:输出mime类型的字符串

  • -L:查看对应软链接对应文件的文件类型

  • -z:尝试去解读压缩文件的内容

回显echo

echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

选项

  • -e:启用反斜线控制字符的转换

  • -E:关闭反斜线控制字符的转换(预设如此)

  • -n:取消行末之换行符号(与 -e 选项下的 \c 字符同意)

关于 echo 命令所支援反斜线控制字符如下表:

  • \a 发出警告声;

  • \b 删除前一个字符;

  • \c 最后不加上换行符号;

  • \f 换行但光标仍旧停留在原来的位置;

  • \n 换行且光标移至行首;

  • \r 光标移至行首,但不换行;

  • \t 插入tab;

  • \v 与\f相同;

  • \ 插入\字符;

  • \nnn 插入nnn(八进制)所代表的ASCII字符;

举例

通过echo 命令修改密码:

# echo -e "redhat\nredhat" |passwd user1

这么操作会让别人看到密码,我们可以使用把密码写入到文件中然后在修改,也可以通过修改history 命令历史来清除这条命令,下面介绍是把密码写入到文件中来修改密码:

# echo -e "`cat aaa`\n`cat aaa`" |passwd user1

通过echo显示文字颜色:

# echo -e "\e[1;31mThis is red text\e[0m" 

\e[1;31m 将颜色设置为红色
\e[0m 将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

背景色:

# echo -e "\e[1;42mGreed Background\e[0m" Greed Background 

颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47

文字闪动:

# echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m" 

红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐

关机或重启命令shutdown

Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数。在执行shutdown命令时,系统会给每个终端(用户)发送一条屏显,提示关机操作。定时关机只需要一个简单的参数,既可以是倒计时,也可以是确切的时间。

命令格式

# shutdown [OPTION]... TIME [MESSAGE]

选项

  • -t 在改变到其它runlevel之前﹐告诉init多久以后关机。

  • -r 重启计算器。

  • -k 并不真正关机﹐只是送警告信号给每位登录者〔login〕。

  • -h 关机后关闭电源〔halt〕。

  • -n 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。

  • -c 取消之前的定时关机

  • -f 在重启计算器〔reboot〕时忽略fsck。

  • -F 在重启计算器〔reboot〕时强迫fsck。

  • -time 设定关机〔shutdown〕前的时间。

举例

立即关机:# shutdown -h now
立即重启:# shutdown -r now
定时关机 ,如果准备定时5分钟关机后还有其他命令要执行,或者希望将定时关机的命令放在后台,则:

# shutdown -h +5 &

然后按几次回车,即可继续使用终端执行其它操作了。如果希望终止上面执行的5分钟关机,则执行:

# shutdown -c 

希望在20:13关闭计算机:

# shutdown -h 20:13

关机和重启相关的命令

关机:poweroff、halt
重启:reboot

显示与设定硬件时钟hwclock

在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

参数

  • --hctosys  将系统时钟调整为与目前的硬件时钟一致。

  • --systohc  将硬件时钟调整为与目前的系统时钟一致。

  • --adjust  hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟。

  • --set --date=<日期与时间>  设定硬件时钟。

  • --show  显示硬件时钟的时间与日期。

  • --utc  若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作。

扩展学习

时间设置命令date

在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便。

命令格式

date [OPTION]... [+FORMAT]

命令参数

  • -d,--date=字符串 : 显示指定字符串所描述的时间,而非当前时间

  • -f,--file=日期文件 :类似--date,从日期文件中按行读入时间描述

  • -r, --reference=文件:显示文件指定文件的最后修改时间

  • -R, --rfc-2822 :以RFC 2822格式输出日期和时间 例如:2006年8月7日,星期一 12:34:56 -0600

  • -s, --set=字符串:设置指定字符串来分开时间

  • -u, --utc, --universal:输出或者设置协调的通用时间

时间输出格式

  • %% 一个文字的 %

  • %a 当前locale 的星期名缩写(例如: 日,代表星期日)

  • %A 当前locale 的星期名全称 (如:星期日)

  • %b 当前locale 的月名缩写 (如:一,代表一月)

  • %B 当前locale 的月名全称 (如:一月)

  • %c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)

  • %C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)

  • %d 按月计的日期(例如:01)

  • %D 按月计的日期;等于%m/%d/%y

  • %e 按月计的日期,添加空格,等于%_d

  • %F 完整日期格式,等价于 %Y-%m-%d

  • %g ISO-8601 格式年份的最后两位 (参见%G)

  • %G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用

  • %h 等于%b

  • %H 小时(00-23)

  • %I 小时(00-12)

  • %j 按年计的日期(001-366)

  • %k 时(0-23)

  • %l 时(1-12)

  • %m 月份(01-12)

  • %M 分(00-59)

  • %n 换行

  • %N 纳秒(000000000-999999999)

  • %p 当前locale 下的"上午"或者"下午",未知时输出为空

  • %P 与%p 类似,但是输出小写字母

  • %r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)

  • %R 24 小时时间的时和分,等价于 %H:%M

  • %s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数

  • %S 秒(00-60)

  • %t 输出制表符 Tab

  • %T 时间,等于%H:%M:%S

  • %u 星期,1 代表星期一

  • %U 一年中的第几周,以周日为每星期第一天(00-53)

  • %V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)

  • %w 一星期中的第几日(0-6),0 代表周一

  • %W 一年中的第几周,以周一为每星期第一天(00-53)

  • %x 当前locale 下的日期描述 (如:12/31/99)

  • %X 当前locale 下的时间描述 (如:23:13:48)

  • %y 年份最后两位数位 (00-99)

  • %Y 年份

  • %z +hhmm 数字时区(例如,-0400)

  • %:z +hh:mm 数字时区(例如,-04:00)

  • %::z +hh:mm:ss 数字时区(例如,-04:00:00)

  • %:::z 数字时区带有必要的精度 (例如,-04,+05:30)

  • %Z 按字母表排序的时区缩写 (例如,EDT)

关于时间中显示CST、UTC、GMT说明:

  • CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。

  • UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的时间与UTC的时差均为+8,也就是UTC+8。

  • GMT:格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

举例

显示当前时间:

# date +‘%Y-%m-%d_%H:%M:%S‘
2016-12-04_17:06:06
# date +‘%F_%T‘
2016-12-04_17:06:09

显示昨天的日期:

# date -d next-day +%Y%m%d
20161205

显示明天的日期:

# date -d last-day +%Y%m%d
20161203

显示一年的第几周:

# date +%U
49

命令历史history

history命令是查看系统的历史命令的,如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。

用法

history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]

参数

  • n :数字,要列出最近的若干命令列表

  • -c :将目前的 shell 中的所有 history 内容全部消除

  • -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history

  • -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中

  • -w :将目前的 history 记忆内容写入 histfiles

相关环境变量

  • HISTSIZE:shell进程可保留的命令历史的条数;

  • HISTFILE:持久保存命令历史的文件;默认在:~/.bash_history

  • HISTFILESIZE:命令历史文件的大小;

  • HISTTIMEFORMAT:显示时间戳 ;

  • HISTCONTROL :控制命令历史记录的方式。

    • ignoredups:忽略重复的命令;

    • ignorespace:忽略以空白字符开头的命令;

    • ignoreboth:以上两者同时生效;

举例

使用 Ctrl+R 搜索历史

Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。关闭查找命令历史搜索:Ctrl + g。

快速重复执行上一条命令

  • 使用上方向键,并回车执行。

  • 按 !! 并回车执行。

  • 输入 !-1 并回车执行。

  • 按 Ctrl+P 并回车执行。

从命令历史中执行一个指定的命令

如果你想重复执行第 4 条命令,那么可以执行 !4。

通过指定关键字来执行以前的命令

输入 !his并回车,将执行最近一条以 !his 打头的命令。

调用上一条命令的最后一个参数

快捷键:ESC+ .
字符串:!$

环境变量的使用

history 还可以根据环境变量的设置完成高级的用法,具体就是将环境变量的值和变量写入到:/etc/bashrc或别的环境变量配置文件中。

Linux 环境变量

set

set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。 set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。

参数

  • -a  标示已修改的变量,以供输出至环境变量。

  • -b  使被中止的后台程序立刻回报执行状态。

  • -C  转向所产生的文件无法覆盖已存在的文件。

  • -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。

  • -e  若指令传回值不等于0,则立即退出shell。

  • -f   取消使用通配符。

  • -h  自动记录函数的所在位置。

  • -H Shell  可利用"!"加<指令编号>的方式来执行history中记录的指令。

  • -k  指令所给的参数都会被视为此指令的环境变量。

  • -l  记录for循环的变量名称。

  • -m  使用监视模式。

  • -n  只读取指令,而不实际执行。

  • -p  启动优先顺序模式。

  • -P  启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。

  • -t  执行完随后的指令,即退出shell。

  • -u  当执行时使用到未定义过的变量,则显示错误信息。

  • -v  显示shell所读取的输入值。

  • -x  执行指令后,会先显示该指令及所下的参数。

使用语法

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...] 
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

set通过选项来开关shell的不同特性,每个特性都对应一个选项。每个特性都有两种配置方式:

  • 一种是通过set -e和set +e这种形式,即直接指定选项。

  • 另一种是通过set -o errexit和set +o errexit这种形式,即通过o这个选项来指定选项名。

在set命令中,选项前面跟着-号表示开启这个选项,+表示关闭这个选项。

使用举例

执行set -o会输出当前的set选项配置情况,执行set +o也是输出当前的set选项的配置情况,只不过输出形式是一系列的set命令。这种输出形式一般用于重建当前的set配置项时使用。

  • -e or -o errexit :设置了这个选项后,当一个命令执行失败时,shell会立即退出。

  • -n or -o noexec :设置了这个选项后,shell读取命令,但是不会执行它们。这个选项可以用来检查shell脚本是否存在语法错误。

  • -u or -o unset :设置了这个选项之后,当shell要扩展一个还未设置过值的变量时,shell必须输出信息到stderr,然后立即退出。但是交互式shell不应该退出。

  • -x or -o xtrace :设置了这个选项之后,对于每一条要执行的命令,shell在扩展了命令之后(参数扩展)、执行命令之前,输出trace到stderr。

  • -o pipefail :这个选项会影响管道的返回值。默认情况下,一个管道的返回值是最后一个命令的返回值,比如cmda | cmdb | cmdc这个管道,返回值是由cmdc命令的返回值决定的。如果指定了pipefail选项,那么管道的返回值就会由最后一个失败的命令决定,意思就是有命令失败就会返回非0值。如果所有命令都成功,则返回成功。

关闭linux系统中的覆盖输出重定向

env

env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。 如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。

命令选项:

  • -i:开始一个新的空的环境;

  • -u<变量名>:从当前环境中删除指定的变量。

环境变量设置export

export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。 一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

参数

  • -f:代表[变量名称]中为函数名称;

  • -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;

  • -p:列出所有的shell赋予程序的环境变量。

set、env和export区别

每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。

  • set 用来显示本地变量、显示当前shell的变量,包括当前用户的变量

  • env 用来显示环境变量、 显示当前用户的变量

  • export 用来显示和设置环境变量显示当前导出成用户变量的shell变量

设置环境变量

我们在编译安装软件时就需要配置好环境变量,下面介绍如何配置:

  • 直接用export命令:

#  export PATH=$PATH:/usr/local/http/bin

这种方式只是在当前shell环境有效,一旦登出就不能使用,如果需要长时间使用需要写入配置文件。

  • 修改profile文件:

#  vi /etc/profile
export PATH="$PATH:/usr/local/http/bin"
# vi /etc/profile.d/httpd.sh
export PATH="$PATH:/usr/local/http/bin"

这种方式只是对全部用户有效。

  • 修改.bashrc文件:

#  vi /root/.bashrc
export PATH="$PATH:/usr/local/http/bin"

这种方式只是对root用户有效。

注意:一旦写入配置文件则需要source 一下该文件,如果语法没有错误就可以使用了。

常见的环境变量

  • PATH 指定命令的搜索路径

  • HOME 当前登录用户的家目录

  • HISTSIZE是指保存历史命令记录的条数。

  • LOGNAME是指当前用户的登录名。

  • HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

  • SHELL是指当前用户用的是哪种Shell。

  • LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

  • MAIL是指当前用户的邮件存放目录。

  • PS1是基本提示符,对于root用户是#,对于普通用户是$。

  • PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比 如下列命令会将提示符修改成字符串“Hello,My NewPrompt ”。

关于环境变量的使用

我们的bash 中默认的已经把“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,可以通过echo $PATH来查看当前用户的环境变量。如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可 选:“/etc/profile”、"/etc/profile.d/*.sh"和用户主目录下的“.bash_profile”,“/etc/profile”、"/etc/profile.d/*.sh" 对系统里所有用户都有效,用户主目录下 的“.bash_profile”只对这个用户有效。

设置环境变量的格式为“PATH=$PATH:路径1:路径2:...:路径n”,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所 有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径 仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。

注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议可以在/etc/profile.d/写个以.sh结尾的该软件的环境变量,这种写完以后在今后软件的删除可直接删除文件,不用在该profile文件,下面以mysql为例子:

# cat /etc/profile.d/mysql.sh 
export  PATH=$PATH:/usr/local/mysql/bin
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin

Linux 目录

与Windows将硬盘看做“C盘”、“D盘”几个独立的分区不同,Linux将整个文件系统看做一棵树,这棵树的树根叫做根文件系统,用/表示。各个分区通过“挂载”(Mount)以文件夹的形式访问。

  • /: 第一层次结构的根、整个文件系统层次结构的根目录。

  • /bin/: 需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如:cat、ls、cp,和/usr/bin类似。

  • /boot/:引导程序文件,例如:kernel、initrd;时常是一个单独的分区。

  • /dev/:存储特殊文件或设备文件;设备有两种类型:字符设备(线性设备)、块设备(随机设备);

  • /etc/:系统程序的配置文件,只能为静态;

  • /home:普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME;

  • /root:管理员的家目录;可选;

  • /lib:为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块。

    • libc.so.*:动态链接的C库;

    • ld*:运行时链接器/加载器;

    • modules:用于存储内核模块的目录;

  • /lib64:64位系统特有的存放64位共享库的路径;

  • /media:便携式设备挂载点,cdrom, floppy等;

  • /mnt:其它文件系统的临时挂载点;

  • /opt:附加应用程序的安装位置;可选路径;

  • /srv:当前主机为服务提供的数据;

  • /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;

  • /usr:usr Hierarchy,全局共享的只读数据路径;

    • bin:非必要可执行文件 (在单用户模式中不需要);面向所有用户。

    • sbin:非必要的系统二进制文件,例如:大量网络服务的守护进程。

    • lib, lib64:/usr/bin/和/usr/sbin/中二进制文件的库。

    • include:用来存放Linux下开发和编译应用程序所需要的头文件;

    • share:命令手册页和自带文档等架构特有的文件的存储位置

    • local:本地数据的第三层次,具体到本台主机。通常而言有进一步的子目录,例如:bin/、lib/、share/.这是提供给一般用户的/usr目录,在这里安装一般的应用软件;

    • X11R6:X-Window程序的安装位置

    • src:程序源码文件的存储位置

  • /var/:变量文件——在正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件文件。

    • cache:应用程序缓存数据。

    • lib:系统正常运行时要改变的文件.

    • local:中安装的程序的可变数据(即系统管理员安装的程序)。

    • lock:锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.

    • log :各种程序的Log文件,特别是login (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.

    • run :保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.

    • spool:存放应用的spool数据,

    • tmp:临时目录

  • /proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward;

  • /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的的接口;

扩展学习1
扩展学习2

Linux系统1.md