Linux精简教程

Posted 冷色调的夏天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux精简教程相关的知识,希望对你有一定的参考价值。

Linux精简教程

ROS 依赖 Linux 提供底层支持,一般基于 Linux 系统开发,玩转 ROS 机器人操作系统需要具备基本的 Linux 知识。本篇对Linux 进行基本讲解,并讲解常用 Linux 操作命令。如果您对 Linux 熟练掌握,请自行跳过该篇。

第一章 初识Linux

1 什么是Linux

​ Linux 是全球最受欢迎的开源操作系统。它是一个由 C 语言编写的,符合 POSIX 标准的类 UNIX 系统。POSIX 是 Portable Operating System Interface 的缩写,表示可移植操作系统接口,它规定了操作系统应该为应用编程提供的接口标准。UNIX 是一个强大的多用户、多任务分时操作系统,支持多种处理器架构,于 1969 年在 AT&T 的贝尔实验室开发。UNIX 是商业操作系统,需要收费。获取 Linux 内核源码的网址为:http://www.kernel.org ,在这里能够下载各版本的内核源码,包括测试版和最新稳定版。

​ 和Windows操作系统软件一样,Linux也是一个操作系统软件。但是和Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统软件(Unix系统是Linux系统的前身,具备很多优秀特性)。其在设计之初,就是基于Intel x86系列CPU架构的计算机的。它是一个基于POSIX的多用户、多任务并且支持多线程和多CPU的操作系统。

​ Linux是由世界各地成千上万的程序员设计和开发实现的。当初开发Linux系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类Unix操作系统兼容产品。在过去的20年里,Linux系统主要应用于服务器端、嵌入式开发和个人PC桌面三大领域,其中服务器端领域是重中之重。

​ 大型、超大型互联网企业(百度、Sina、淘宝等)都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前十的网站使用的主流系统几乎都是Linux系统。

2 Linux 系统特点

Linux 是一个开放自由的操作系统内核,具有一些鲜明的特点。

(1) 开放性。遵循世界标准规范。凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。

(2) 多用户。Linux 操作系统是一个真正的多用户操作系统;系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源有特定的权限,互不影响。

(3) 多任务。多任务是现代计算机的最主要的一个特点。它是指计算机同时执行多个程序,而且各个程序的运行互相独立。Linux 系统调度每一个进程平等地访问处理器。

(4) 良好的用户界面。Linux 向用户提供了两种界面:用户界面和系统调用。Linux 的传统用户界面是基于文本的命令行界面,即 Shell,它既可以联机使用,又可存在文件上脱机使用。Shell 有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。

(5) 设备独立性。Linux 操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。

(6) 完善的网络功能。Linux 内置完整的 POSIX 网络协议栈,在通信和网络功能方面优于其它操作系统。Linux 为用户提供了完善的、强大的网络功能。支持 Internet。网络文件传输。用户能通过一些 Linux 命令完成内部信息或文件的传输。远程访问功能。

(7) 可靠的系统安全。Linux 采取了许多安全技术措施,为网络多用户环境中的用户提供了必要的安全保障。

(8) 模块化。运行时可以根据系统的需要加载程序而无需重启系统。Linux 的模块化极大地提高了 Linux 的可裁剪性和灵活性。

(9) 良好的可移植性。Linux 是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境和任何平台上运行。目前已经成为支持平台最广泛的操作系统。

3 嵌入式Linux

​ 嵌入式 Linux 是对运行在嵌入式设备上的 Linux 的统称。嵌入式 Linux 往往针对于某个特殊领域,专门为实现某些特定的功能而开发,一般说来,嵌入式 Linux 所运行的程序相对来说比较单一,功能定位也比较明确,如嵌入式网关、路由器等。由 Linus 主持开发的 Linux 与其它嵌入式系统产品一样,嵌入式 Linux 产品在物理形态上与普通Linux 设备有很大差异,不同产品之间物理形态也是各不相同。与桌面 Linux 相比,嵌入式 Linux 产品往往没有硕大的显示器,或者鼠标键盘这样的外设。

4 Linux 发行版

​ 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。

​ 在 Linux 内核的发展过程中,各种 Linux 发行版本起了巨大的作用,正是它们推动了 Linux 的应用,从而让更多的人开始关注 Linux。因此,把 Red Hat、Ubuntu、SUSE 等直接说成 Linux 其实是不确切的,它们是 Linux 的发行版本, 更确切地说,应该叫做“以 Linux 为核心的操作系统软件包”。

​ Linux 的各个发行版本使用的是同一个 Linux 内核,因此在内核层不存在什么兼容性问题,每个版本有不一样的感觉,只是在发行版本的最外层(由发行商整合开发的应用)才有所体现。

Linux 的发行版本可以大体分为两类:

  • 商业公司维护的发行版本,以著名的 Red Hat 为代表;

  • 社区组织维护的发行版本,以 Debian 为代表。

很难说大量 Linux 版本中哪一款更好,每个版本都有自己的特点。下面为大家介绍几款常用的 Linux 发行版本。

4.1 Red Hat Linux

Red Hat(红帽公司)创建于 1993 年,是目前世界上资深的 Linux 厂商,也是最获认可的 Linux 品牌。

Red Hat 公司的产品主要包括 RHEL(Red Hat Enterprise Linux,收费版本)和 CentOS(RHEL 的社区克隆版本,免费版本)、Fedora Core(由 RedHat 桌面版发展而来,免费版本)。

Red Hat 是在我国国内使用人群最多的 Linux 版本,资料丰富,如果你有什么不明白的地方,则容易找到人来请教,而且大多数 Linux 教程是以 Red Hat 为例来讲解的。

CentOS ,它是基于 Red Hat Enterprise Linux 源代码重新编译、去除 RedHat 商标的产物,各种操作使用和付费版本没有区别,且完全免费。缺点是不向用户提供技术支持,也不负任何商业责任。有实力的公司可以选择付费版本。

4.2 Ubuntu Linux

Ubuntu 基于知名的 Debian Linux 发展而来,界面友好,容易上手,对硬件的支持非常全面,是目前最适合做桌面系统的 Linux 发行版本,而且 Ubuntu 的所有发行版本都免费提供。

Ubuntu 的创始人 Mark Shuttleworth 是非常具有传奇色彩的人物。他在大学毕业后创建了一家安全咨询公司,1999 年以 5.75 亿美元被收购,由此一跃成为南非最年轻有为的本土富翁。作为一名狂热的天文爱好者,Mark Shuttleworth 于2002 年自费乘坐俄罗斯联盟号飞船,在国际空间站中度过了 8 天的时光。之后,Mark Shuttleworth 创立了 Ubuntu 社区,2005 年 7 月 1 日建立了 Ubuntu 基金会,并为该基金会投资 1000 万美元。他说,太空的所见正是他创立 Ubuntu 的精神之所在。如今,他最热衷的事情就是到处为自由开源的 Ubuntu 进行宣传演讲。

4.3 SuSE Linux

SuSE Linux 以 Slackware Linux 为基础,原来是德国的 SuSE Linux AG 公司发布的 Linux 版本,1994 年发行了第一版,早期只有商业版本,2004 年被Novell 公司收购后,成立了 OpenSUSE 社区,推出了自己的社区版本OpenSUSE。

SuSE Linux 在欧洲较为流行,在我国国内也有较多应用。值得一提的是,它吸取了 Red Hat Linux 的很多特质。

SuSE Linux 可以非常方便地实现与 Windows 的交互,硬件检测非常优秀,拥有界面友好的安装过程、图形管理工具,对于终端用户和管理员来说使用非常方便。

4.4 Gentoo Linux

Gentoo 最初由 Daniel Robbins(FreeBSD 的开发者之一)创建,首个稳定版本发布于 2002 年。Gentoo 是所有 Linux 发行版本里安装最复杂的,到目前为止仍采用源码包编译安装操作系统。

不过,它是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。自从 Gentoo 1.0 面世后,它就像一场风暴,给 Linux 世界带来了巨大的惊喜,同时也吸引了大量的用户和开发者投入 Gentoo Linux 的怀抱。

有人这样评价 Gentoo:快速、设计干净而有弹性,它的出名是因为其高度的自定制性(基于源代码的发行版)。尽管安装时可以选择预先编译好的软件包,但是大部分使用 Gentoo 的用户都选择自己手动编译。这也是为什么 Gentoo 适合比较有Linux 使用经验的老手使用。

4.5 其他 Linux 发行版

除以上 4 种 Linux 发行版外,还有很多其他版本,下表罗列了几种常见的Linux 发行版以及它们各自的特点:

版本名称网 址特 点软件包管理器
Debianwww.debian.org开放的开发模式,且易于进行软件包升级apt
Fedora Corewww.redhat.com拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新up2date(rpm),yum (rpm),dnf
CentOSwww.centos.orgCentOS 是一种对 RHEL(Red Hat EnterpriseLinux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞rpm
**SUSEwww.suse.com专业的操作系统,易用的 YaST 软件包管理系统YaST(rpm),第三 方 apt(rpm)软件库(repository)
Mandrivawww.mandriva.com操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更rpm
KNOPPIXwww.knoppix.com可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用apt
Gentoowww.gentoo.org高度的可定制性,使用手册完整portage
Ubuntuwww.ubuntu.com优秀易用的桌面环境,基于 Debian 构建apt

4.6 Linux 发行版本选择

如果你需要的是一个服务器系统,而且已经厌烦了各种 Linux 的配置,只是想要一个比较稳定的服务器系统,那么建议你选择 CentOS 或 RHEL。

如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大价钱购买商业软件,不想自己定制,也不想在系统上浪费太多时间,则可以选择 Ubuntu。

如果你想深入摸索一下 Linux 各个方面的知识,而且还想非常灵活地定制自己的Linux 系统,那就选择 Gentoo 吧,尽情享受 Gentoo 带来的自由快感。如果你对系统稳定性要求很高,则可以考虑 FreeBSD。

如果你需要使用数据库高级服务和电子邮件网络应用,则可以选择 SuSE。

第二章 Linux 文件系统

1 文件系统基础知识

文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件。如此反复就可以构成一个庞大的文件系统。

为了避免诸多Linux发行版使用各部相同的文件系统结构,Linux基金会发布了FHS标准,多数Linux发行版系统都遵循这一标准。

**说明:**FHS(Filesystem Hierarchy Standard),文件系统层次化标准,该标准规定了 Linux 系统中所有一级目录以及部分二级目录(/usr 和 /var)的用途。发布此标准的主要目的就是为了让用户清楚地了解每个目录应该存放什么类型的文件。

注意,目录名或文件名都是区分大小写的。比如Abc和abc是不同的目录或文件。完整的目录或文件路径是由一连串的目录名所组成的,其中每一个目录由“/”来分隔。如bin的完整路径是 /home/bin。

在文件系统中,有两个比较特殊的目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,用两个点“…”表示。

如果一个目录或文件名是以一个点开始(比如.local),就表示这个目录或文件是一个隐藏目录或文件。即以默认方式査找时,不显示该目录或文件。

2 文件系统树形图

不同的Linux发行版可能文件系统树形图稍有不同,但大同小异,如下图所示。

3 一级目录详细说明

一级目录功能(作用)
/bin/存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/设备文件保存位置
/etc/配置文件保存位置。系统内所有采用默认安装方式的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/home/普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。
/lib/系统调用的函数库保存位置
/media/挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。
/opt/第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。
/root/root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/lost+found/当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录
/proc/虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/net 是保存网络协议信息的
/sys/虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

4 二级目录详细说明

还有一些比较重要的二级目录我们也是需要去了解的,具体的说明如下:

/usr子目录功能(作用)
/usr/bin/存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/lib/应用程序调用的函数库保存位置
/usr/XllR6/图形界面系统保存位置
/usr/local/手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。
/usr/includeC/C++ 等编程语言头文件的放置目录
/var子目录功能(作用)
/var/lib/程序运行中需要调用或改变的数据保存位置。如 mysql 的数据库保存在 /var/lib/mysql/ 目录中
/var/log/登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。
/var/run/一些服务和程序运行后,它们的 PID(进程 ID)保存位置
/var/spool/里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
/var/www/RPM 包安装的 Apache 的网页主目录
/var/nis和/var/ypNIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
/var/tmp一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除

第三章 常用linux命令

1 ls命令

ls 命令是Linux下最常用的指令之一。ls命令为英文单词 list 的缩写,正如英文单词 list 的意思,其功能是列出指定目录下的内容及其相关属性信息。

ls [选项] [文件]

常用参数:

-a显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l使用长格式列出文件及目录信息
-r将文件以相反次序显示(默认依英文字母次序)
-t根据最后的修改时间排序
-A同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录)
-S根据文件大小排序
-R递归列出所有子目录

参考实例

列出所有文件(包括隐藏文件):

[root@jubot ~]# ls -a

列出文件的详细信息:

[root@jubot ~]# ls -l

列出根目录(/)下的所有目录:

[root@jubot ~]# ls / 

列出当前工作目录下所有名称是 “s” 开头的文件 :

[root@jubot ~]# ls -ltr s*

列出 /bin 目录下的所有目录及文件的详细信息 :

[root@jubot ~]# ls -lR /bin

列出当前工作目录下所有文件及目录并以文件的大小进行排序 :

[root@jubot ~]# ls -AS

2 mkdir命令

mkdir命令是“make directories”的缩写,用来创建目录。

注意:默认状态下,如果要创建的目录已经存在,则提示已存在,而不会继续创建目录。 所以在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

语法格式 : mkdir [参数] [目录]

常用参数:

-p递归创建多级目录
-m建立目录的同时设置目录的权限
-z设置安全上下文
-v显示目录的创建过程

参考实例

在工作目录下,建立一个名为 dir 的子目录:

[root@jubot ~]# mkdir dir

在目录/usr/jubot下建立子目录dir,并且设置文件属主有读、写和执行权限,其他人无权访问

[root@jubot ~]# mkdir -m 700 /usr/jubot/dir

同时创建子目录dir1,dir2,dir3:

[root@jubot ~]# mkdir dir1 dir2 dir3

递归创建目录:

[root@jubot ~]# mkdir -p jubot/dir

3 cd命令

cd命令是”change directory”中单词的首字母缩写,其英文释义是改变目录,所以该命令的功能是从当前目录切换到指定目录。

其中目录的路径可分为绝对路径和相对路径。若目录名称省略,则切换至使用者的用户目录(也就是刚登录时所在的目录)。

另外,“~”也表示为用户目录的意思,“.”则是表示目前所在的目录,“…”则表示当前目录位置的上一级目录。

**语法格式:**cd [参数] [目录名]

常用参数:

-P如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录
-L如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录
仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录
~切换至当前用户目录
切换至当前目录位置的上一级目录

参考实例

将当前工作目录切换到dir目录,并使用pwd命令查看当前目录:

[root@jubot ~]# cd dir
[root@jubot dir]# pwd
/root/dir

使用“cd ~ ”和“cd … ”命令进行目录的切换操作,并使用pwd命令查看当前目录:

注意:使用“cd ~ ”命令可以直接切换到当前用户目录,而“cd … ”是切换到上一级目录。

[root@jubot dir]# pwd
/root/dir
[root@jubot dir]# cd ~
[root@jubot ~]# pwd
/root
[root@jubot dir]# pwd
/root/dir
[root@jubot dir]# cd ..
[root@jubot dir]# pwd
/root

使用“cd …/…”命令返回上两级目录:

[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2
[root@jubot dir_2]# cd ../..
[root@jubot dir]# pwd
/root/dir

使用“cd”命令返回当前用户目录。“cd – ” 命令返回上一次所在目录:

[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2
[root@jubot dir_2]# cd
[root@jubot ~]# pwd
/root
[root@jubot ~]# cd -
/root/dir/dir_1/dir_2
[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2

4 touch命令

touch命令有两个功能:一是创建新的空文件,二是改变已有文件的时间戳属性。

touch命令会根据当前的系统时间更新指定文件的访问时间和修改时间。如果文件不存在,将会创建新的空文件,除非指定了”-c”或”-h”选项。

注意:在修改文件的时间属性的时候,用户必须是文件的属主,或拥有写文件的访问权限。

**语法格式:**touch [参数] [文件]

常用参数:

-a改变档案的读取时间记录
-m改变档案的修改时间记录
-r使用参考档的时间记录,与 --file 的效果一样
-c不创建新文件
-d设定时间与日期,可以使用各种不同的格式
-t设定档案的时间记录,格式与 date 命令相同
–no-create不创建新文件
–help显示帮助信息
–version列出版本讯息

参考实例

创建空文件:

[root@jubot ~]# touch file.txt  

批量创建文件:

[root@jubot ~]# touch file{1..5}.txt 
[root@jubot ~]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt 

修改文件的access(访问)时间:

[root@jubot ~]# stat file.txt
   File: file.txt
   Size: 0               Blocks: 0          IO Block: 512    regular empty file
 Device: 2h/2d   Inode: 87538717757135273  Links: 1
 Access: (0666/-rw-rw-rw-)  Uid: ( 1000/  root)   Gid: ( 1000/  root)
 Access: 2019-04-07 00:25:34.729216500 +0800
 Modify: 2019-04-07 00:25:34.729216500 +0800
 Change: 2019-04-07 00:25:34.729216500 +0800
  Birth: -

[root@jubot ~]# touch -a file.txt
 
[root@jubot ~]# stat file.txt
   File: file.txt
   Size: 0               Blocks: 0          IO Block: 512    regular empty file
 Device: 2h/2d   Inode: 87538717757135273  Links: 1
 Access: (0666/-rw-rw-rw-)  Uid: ( 1000/  root)   Gid: ( 1000/  root)
 Access: 2019-04-07 00:26:13.004116000 +0800
 Modify: 2019-04-07 00:25:34.729216500 +0800
 Change: 2019-04-07 00:26:13.004116000 +0800
  Birth: -

5 cat命令

Linux系统中有很多个用于查看文件内容的命令,每个命令又都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。cat这个命令也很好记,因为cat在英语中是“猫”的意思。

注意:当文件内容较大时,文本内容会在屏幕上快速闪动(滚屏),用户往往看不清所显示的具体内容。因此对于较长文件内容可以按Ctrl+S键,停止滚屏;以及Ctrl+Q键可以恢复滚屏;而按Ctrl+C(中断)键则可以终止该命令的执行。或者对于大文件,干脆用more命令吧!

**语法格式:**cat [参数] [文件]

常用参数:

-n显示行数(空行也编号)
-s显示行数(多个空行算一个编号)
-b显示行数(空行不编号)
-E每行结束处显示$符号
-T将TAB字符显示为 ^I符号
-v使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e等价于”-vE”组合
-t等价于”-vT”组合
-A等价于 -vET组合
–help显示帮助信息
–version显示版本信息

参考实例

查看文件的内容:

[root@jubot ~]# cat filename.txt

查看文件的内容,并显示行数编号:

[root@jubot ~]# cat -n filename.txt

查看文件的内容,并添加行数编号后输出到另外一个文件中:

[root@jubot ~]# cat -n jubot.log > linuxprobe.log 

清空文件的内容:

[root@jubot ~]# cat /dev/null > /root/filename.txt

持续写入文件内容,碰到EOF符后结束并保存:

[root@jubot ~]# cat > filename.txt <<EOF
> Hello, World 
> Linux!
> EOF

将软盘设备制作成镜像文件:

[root@jubot ~]# cat /dev/fd0 > fdisk.iso

6 cp命令

cp命令可以理解为英文单词copy的缩写,其功能为复制文件或目录。

cp命令可以将多个文件复制到一个具体的文件名或一个已经存在的目录下,也可以同时复制多个文件到一个指定的目录中。

**语法格式:**cp [参数] [文件]

常用参数:

-f若目标文件已存在,则会直接覆盖原文件
-i若目标文件已存在,则会询问是否覆盖
-p保留源文件或目录的所有属性
-r递归复制文件和目录
-d当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l对源文件建立硬连接,而非复制文件
-s对源文件建立符号连接,而非复制文件
-b覆盖已存在的文件目标前将目标文件备份
-v详细显示cp命令执行的操作过程
-a等价于“dpr”选项

参考实例

复制目录:

[root@jubot ~]# cp -R dir1 dir2/

将文件test1改名为test2:

[root@jubot ~]# cp -f test1 test2

复制多个文件:

[root@jubot ~]# cp -r file1 file2 file3 dir

交互式地将目录 /usr/jubot 中的所有.c文件复制到目录 dir 中:

[root@jubot ~]# cp -r /usr/jubot/*.c dir

7 mv命令

mv命令是“move”单词的缩写,其功能大致和英文含义一样,可以移动文件或对其改名。

这是一个使用频率超高的文件管理命令,我们需要特别留意它与复制的区别:mv与cp的结果不同。mv命令好像文件“搬家”,文件名称发生改变,但个数并未增加。而cp命令是对文件进行复制操作,文件个数是有增加的。

**语法格式:**mv [参数]

常用参数:

-i若存在同名文件,则向用户询问是否覆盖
-f覆盖已有文件时,不进行任何提示
-b当文件存在时,覆盖前为其创建一个备份
-u当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

参考实例

将文件file_1重命名为file_2:

[root@jubot ~]# mv file_1 file_2

将文件file移动到目录dir中 :

[root@jubot ~]# mv file /dir

将目录dir1移动目录dir2中(前提是目录dir2已存在,若不存在则改名):

[root@jubot ~]# mv /dir1 /dir2

将目录dir1下的文件移动到当前目录下:

[root@jubot ~]# mv /dir1/* .

8 rm命令

rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。 rm也是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf)。所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。

**语法格式:**rm [参数] [文件]

常用参数:

-f忽略不存在的文件,不会出现警告信息
-i删除前会询问用户是否操作
-r/R递归删除
-v显示指令的详细执行过程

参考实例

删除前逐一询问确认:

[root@jubot ~]# rm -i test.txt.bz2 
rm: remove regular file `test.txt.bz2'? 

直接删除,不会有任何提示:

[root@jubot ~]# rm -f test.txt.bz2  

递归删除目录及目录下所有文件:

[root@jubot ~]# mkdir /data/log
[root@jubot ~]# rm -rf /data/log

删除当前目录下所有文件:

[root@jubot ~]# rm -rf *

清空系统中所有的文件(谨慎):

[root@jubot ~]# rm -rf /*

9 find命令

find命令可以根据给定的路径和表达式查找的文件或目录。find参数选项很多,并且支持正则,功能强大。和管道结合使用可以实现复杂的功能,是系统管理者和普通用户必须掌握的命令。

find如不加任何参数,表示查找当前路径下的所有文件和目录,如果服务器负载比较高尽量不要在高峰期使用find命令,find命令模糊搜索还是比较消耗系统资源的。

语法格式:find [参数] [路径] [查找和搜索范围]

常用参数

-name按名称查找
-size按大小查找
-user按属性查找
-type按类型查找
-iname忽略大小写

参考实例

使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:

[root@jubot ~]# find /etc -name "*.conf

使用-size参数查看/etc目录下面大于1M的文件:

[root@jubot ~]# find /etc -size +1M

查找当前用户主目录下的所有文件:

[root@jubot ~]# find $HOME -print

列出当前目录及子目录下所有文件和文件夹:

[root@jubot ~]# find .

在/home目录下查找以.txt结尾的文件名:

[root@jubot ~]# find /home -name "*.txt"

在/var/log目录下忽略大小写查找以.log结尾的文件名:

[root@jubot ~]# find /var/log -iname "*.log"

搜索超过七天内被访问过的所有文件:

[root@jubot ~]# find . -type f -atime +7

搜索访问时间超过10分钟的所有文件:

[root@jubot ~]# find . -type f -amin +10

找出/home下不是以.txt结尾的文件:

[root@jubot ~]# find /home ! -name "*.txt"

10 grep命令

grep是“global search regular expression and print out the line”的简称,意思是全面搜索正则表达式,并将其打印出来。这个命令可以结合正则表达式使用,它也是linux使用最为广泛的命令。

grep命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式。需要注意的是:一当模式中包含了空格,务必要用双引号将其引起来。

linux系统支持三种形式的grep命令,第一种:grep,标准,模仿的代表。第二种:egrep,简称扩展grep命令,其实和grep -E等价,支持基本和扩展的正则表达式。第三种:fgrep,简称快速grep命令,其实和grep -F等价,不支持正则表达式,按照字符串表面意思进行匹配。

语法格式: grep [参数]

常用参数:

-i搜索时,忽略大小写
-c只输出匹配行的数量
-l只列出符合匹配的文件名,不列出具体的匹配行
-n列出所有的匹配行,显示行号
-h查询多文件时不显示文件名
-s不显示不存在、没有匹配文本的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-x匹配整行
-r递归搜索
-q禁止输出任何结果,已退出状态表示搜索是否成功
-b打印匹配行距文件头部的偏移量,以字节为单位
-o与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

参考实例

支持多文件查询并支持使用通配符:

[root@jubot ~]# grep zwx file_* /etc/hosts
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj

输出匹配字符串行的数量:

[root@jubot ~]$ grep -c zwx file_*
 file_1:2
 file_2:1
 file_3:0

列出所有的匹配行,并显示行号:

[root@jubot ~]# grep -n zwx file_*
file_1:1:zwx
file_1:4:zwx
file_1:10:zwxddkjflkdjfdlkfjlsdkj
file_2:2:zwx
file_4:3:dkfjlzwxejfkje
file_4:4:zwx djfkdjf
file_4:5:zwxedkfgj

显示不包含模式的所有行:

[root@jubot ~]# grep -vc zwx file_*
file_1:7                                
file_2:4
file_3:5
file_4:2

不再显示文件名:

[root@jubot ~]# grep -h zwx file_*
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
zwx
dkfjlzwxejfkje

只列出符合匹配的文件名,不列出具体匹配的行:

[root@jubot ~]# grep -l zwx file_*
file_1
file_2
file_4

不显示不存在或无匹配的文本信息:

[root@jubot ~]# grep  -s zwx file1 file_1
file_1:zwx       
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep zwx file1 file_1
grep: file1: No such file or directory  
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj

递归搜索,不仅搜索当前目录,还搜索子目录:

[root@jubot ~]# grep -r zwx file_2 *
file_2:zwx
anaconda-ks.cfg:user --name=zwx --gecos="zwx"
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj
initial-setup-ks.cfg:user --name=zwx --gecos="zwx"

匹配整词,以字面意思去解释他,相当于精确匹配:

[root@jubot ~]# grep zw* file_1
zwx                       
zwx
zdkfjeld
zw
ze
zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep -w zw* file_1
zw                         

匹配整行,文件中的整行与模式匹配时,才打印出来:

[root@jubot ~]# grep -x zwx file_*
file_1:zwx
file_1:zwx
file_2:zwx

不输出任何结果,已退出状态表示结果:

 [root@jubot ~]# grep -q zwx file_1
 [root@jubot ~]# echo $?
 0               
 [root@jubot ~]# grep -q zwx file_5
 [root@jubot ~]# echo $?
 1               
 [root@jubot ~]# grep -q zwx file5
 grep: file5: No such file or directory
 [root@jubot ~]# echo $?
 2              

查找一个文件中的空行和非空行:

[root@jubot ~]# grep -c ^$ file_1
 4              
 [root@jubot ~]# grep -c ^[^$] file_1
 15               

匹配任意或重复字符用“.”或“*”符号来实现:

[root@jubot ~]# grep ^z.x file_1
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep ^z* file_6
zwx
dfkjd

11 pwd命令

pwd命令是“print working directory”中每个单词的首字母缩写,其功能正如所示单词一样,为打印工作目录,即显示当前工作目录的绝对路径。

在实际工作中,我们经常会在不同目录之间进行切换,为了防止“迷路”,我们可以使用pwd命令快速查看当前我们所在的目录路径。

语法格式: pwd [参数]

常用参数:

-L显示逻辑路径

参考实例

查看当前工作目录路径:

[root@jubot ~]# pwd
/home/jubot

12 ln命令

ln命令是linux系统中一个非常重要命令,英文全称是“link”,即链接的意思,它的功能是为某一个文件在另外一个位置建立一个同步的链接。 一种是hard link,又称为硬链接;另一种是symbolic link,又称为符号链接。

通俗一点理解,可以把硬链接当成源文件的副本,他和源文件一样的大小,但是事实上却不占任何空间。符号链接可以理解为类似windows一样的快捷方式。

符号链接 :

  • \\1. 符号链接以路径的形式存在,类似于Windows操作系统中的快捷方式。
  • \\2. 符号链接可以跨文件系统 ,硬链接不可以。
  • \\3. 符号链接可以对一个不存在的文件名进行链接,硬链接不可以。
  • \\4. 符号链接可以对目录进行链接,硬链接不可以。

硬链接:

  • 1.硬链接以文件副本的形式存在,但不占用实际空间。
  • \\2. 硬链接不允许给目录创建硬链接。
  • 3.硬链接只有在同一个文件系统中才能创建。

语法格式: ln [参数] [源文件或目录] [目标文件或目录]

常用参数:

-b为每个已存在的目标文件创建备份文件
-d此选项允许“root”用户建立目录的硬链接
-f强制创建链接,即使目标文件已经存在
-n把指向目录的符号链接视为一个普通文件
-i交互模式,若目标文件已经存在,则提示用户确认进行覆盖
-s对源文件建立符号链接,而非硬链接
-v详细信息模式,输出指令的详细执行过程

参考实例

为源文件file.txt创建硬链接file_1:

[root@jubot ~ ]# ln /root/dir/file.txt ./file_1

使用ln命令的“-s”参数来创建目录的符号链接,并使用ls命令来查看链接文件的详细信息:

[root@jubot ~]# ln -s dir file
[root@jubot ~]# ls -l
总用量 4
-rw-------. 1 root root 1138 311 14:48 anaconda-ks.cfg
drwxr-xr-x. 2 root root   36 43 08:47 test
lrwxrwxrwx. 1 root root    4 43 08:54 file -> dir

使用ln命令的“-v”参数来输出命令的详细执行过程:

[root@jubot ~]# ln -v /root/dir/file.txt ./file_1
 './file_1' => '/root/dir/file.txt'

使用ln命令的“-b”命令来创建目标文件的备份文件,并使用ls命令来查看:

[root@jubot ~css基础教程:对css代码精简

VIM 代码片段插件 ultisnips 使用教程

Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

iphone精简教程

[原创] WINDOWS 7 精简教程之驱动精简 可用于64和32