admin 管理员组

文章数量: 887142

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 ,在这里能够下载各版本的内核源码,包括测试版和最新稳定版。

​ 和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开放的开发模式,且易于进行软件包升级apt
Fedora Corewww.redhat拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新up2date(rpm),yum (rpm),dnf
CentOSwww.centosCentOS 是一种对 RHEL(Red Hat EnterpriseLinux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞rpm
**SUSEwww.suse专业的操作系统,易用的 YaST 软件包管理系统YaST(rpm),第三 方 apt(rpm)软件库(repository)
Mandrivawww.mandriva操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更rpm
KNOPPIXwww.knoppix可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用apt
Gentoowww.gentoo高度的可定制性,使用手册完整portage
Ubuntuwww.ubuntu优秀易用的桌面环境,基于 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 ~]# ln -b /root/dir/file.txt ./file_1
[root@jubot ~]# ls
 anaconda-ks.cfg  file_1  file_1~  dir 

13 tar命令

tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。

tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

**语法格式:**tar [参数] [文件或目录]

常用参数:

-A新增文件到以存在的备份文件
-B设置区块大小
-c建立新的备份文件
-C <目录>切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录
-d记录文件的差别
-x从归档文件中提取文件
-t列出备份文件的内容
-z通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-Z通过compress指令处理备份文件
-f<备份文件>指定备份文件
-v显示指令执行过程
-r添加文件到已经压缩的文件
-u添加改变了和现有的文件到已经存在的压缩文件
-j通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v显示操作过程
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-w确认压缩文件的正确性
-p保留原来的文件权限与属性
-P使用文件名的绝对路径,不移除文件名称前的“/”号
-N <日期格式>只将较指定日期更新的文件保存到备份文件里
– -exclude=<范本样式>排除符合范本样式的文件
– -remove-files归档/压缩之后删除源文件

参考实例

将所有.jpg的文件打成一个名为all.tar的包:

[root@jubot ~]# tar -cf all.tar *.jpg

打包文件之后删除源文件:

[root@jubot ~]# tar -cvf jubot.tar jubot --remove-files

打包文件以后,以 gzip 压缩:

[root@jubot ~]# tar -zcvf log.tar.gz jubot.log

14 apt-get命令

apt-get命令是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。

**语法格式:**apt-get [参数]

常用参数:

-c指定配置文件

参考实例

更新软件:

[root@jubot ~]# apt-get update

安装vim:

[root@jubot ~]# apt-get install vim

安装nginx:

[root@jubot ~]# apt-get install nginx

卸载vim:

[root@jubot ~]# apt-get remove vim

卸载软件(删除配置文件):

[root@jubot ~]# apt-get –purge remove packagename 

15 df命令

df命令的英文全称即“Disk Free”,顾名思义功能是用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于阅读。

日常普遍用该命令可以查看磁盘被占用了多少空间、还剩多少空间等信息。

语法格式: df [参数] [指定文件]

常用参数:

-a显示所有系统文件
-B <块大小>指定显示时的块大小
-h以容易阅读的方式显示
-H以1000字节为换算单位来显示
-i显示索引字节信息
-k指定块大小为1KB
-l只显示本地文件系统
-t <文件系统类型>只显示指定类型的文件系统
-T输出时显示文件系统类型
– -sync在取得磁盘使用信息前,先执行sync命令

参考实例

显示磁盘分区使用情况:

[root@jubot ~]# df
文件系统                             1K-块    已用     可用   已用% 挂载点
devtmpfs                           1980612       0  1980612    0% /dev
tmpfs                              1994756       0  1994756    0% /dev/shm
tmpfs                              1994756    1040  1993716    1% /run
tmpfs                              1994756       0  1994756    0% /sys/fs/cgroup
/dev/mapper/fedora_linuxhell-root 15718400 2040836 13677564   13% /
tmpfs                              1994756       4  1994752    1% /tmp
/dev/sda1                           999320  128264   802244   14% /boot
tmpfs                               398948       0   398948   0% /run/user/0

以容易阅读的方式显示磁盘分区使用情况:

[root@jubot ~]# df -h
 文件系统                           容量   已用   可用  已用% 挂载点
 devtmpfs                           1.9G     0  1.9G    0% /dev
 tmpfs                              2.0G     0  2.0G    0% /dev/shm
 tmpfs                              2.0G  1.1M  2.0G    1% /run
 tmpfs                              2.0G     0  2.0G    0% /sys/fs/cgroup
 /dev/mapper/fedora_linuxhell-root   15G  2.0G   14G   13% /
 tmpfs                              2.0G  4.0K  2.0G    1% /tmp
 /dev/sda1                          976M  126M  784M   14% /boot
 tmpfs                              390M     0  390M    0% /run/user/0

显示指定文件所在分区的磁盘使用情况:

[root@jubot ~]# df /etc/dhcp
文件系统                             1K-块    已用     可用   已用% 挂载点
/dev/mapper/fedora_jubot-root 15718400 2040836 13677564   13% /

显示文件类型为ext4的磁盘使用情况:

[root@jubot ~]# df -t ext4
文件系统        1K-块   已用   可用    已用% 挂载点
/dev/sda1      999320 128264 802244   14% /boot

16 zip命令

zip程序将一个或多个压缩文件与有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到zip存档中。

对于文本文件来说,压缩比为2:1和3:1是常见的。zip只有一种压缩方法(通缩),并且可以在不压缩的情况下存储文件。(如果添加了bzip 2支持,zip也可以使用bzip 2压缩,但这些条目需要一个合理的现代解压缩来解压缩。当选择bzip 2压缩时,它将通货紧缩替换为默认方法。)zip会自动为每个要压缩的文件选择更好的两个文件(通缩或存储,如果选择bzip2,则选择bzip2或Store)。

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

常用参数:

-q不显示指令执行过程
-r递归处理,将指定目录下的所有文件和子目录一并处理
-z替压缩文件加上注释
-v显示指令执行过程或显示版本信息
-n<字尾字符串>不压缩具有特定字尾字符串的文件

参考实例

将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:

[root@jubot ~]# zip -q -r html.zip /home/html

压缩文件 cp.zip 中删除文件 a.c:

[root@jubot ~]# zip -dv cp.zip a.c 

把/home目录下面的mydata目录压缩为mydata.zip:

[root@jubot ~]# zip -r mydata.zip mydata 

把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip:

[root@jubot ~]# zip -r abc123.zip abc 123.txt 

将 logs目录打包成 log.zip:

[root@jubot ~]# zip -r log.zip ./logs 

17 ping命令

ping命令主要用来测试主机之间网络的连通性,也可以用于。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

不过值得我们注意的是:Linux系统下的ping命令与Windows系统下的ping命令稍有不同。Windows下运行ping命令一般会发出4个请求就结束运行该命令;而Linux下不会自动终止,此时需要我们按CTR+C终止或者使用-c参数为ping命令指定发送的请求数目。

**语法格式:**ping [参数] [目标主机]

常用参数:

-d使用Socket的SO_DEBUG功能
-c指定发送报文的次数
-i指定收发信息的间隔时间
-I使用指定的网络接口送出数据包
-l设置在送出要求信息之前,先行发出的数据包
-n只输出数值
-p设置填满数据包的范本样式
-q不显示指令执行过程
-R记录路由过程
-s设置数据包的大小
-t设置存活数值TTL的大小
-v详细显示指令的执行过程

参考实例

检测与jujon网站的连通性:

[root@jubot ~]# ping www.jujon

连续ping4次:

[root@jubot ~]# ping -c 4 www.jujon 

设置次数为4,时间间隔为3秒:

[root@jubot ~]# ping -c 4 -i 3 www.jujon

利用ping命令获取指定网站的IP地址:

[root@jubot ~]# ping -c 1 jujon | grep from | cut -d " " -f 4
220.181.57.216

18 curl命令

curl命令是一个利用URL规则在shell终端命令行下工作的文件传输工具;它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。

作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征;做网页处理流程和数据检索自动化。

**语法格式:**curl [参数] [网址]

常用参数:

-O把输出写到该文件中,保留远程文件的文件名
-u通过服务端配置的用户名和密码授权访问

参考实例

将下载的数据写入到文件,必须使用文件的绝对地址:

[root@jubot ~]# curl https://www.jujon/abc.txt --silent -O

访问需要授权的页面时,可通过-u选项提供用户名和密码进行授权:

[root@jubot ~]# curl -u root https://www.jujon/ Enter host password for user 'root':

19 ifconfig命令

ifconfig命令的英文全称是“network interfaces configuring”,即用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

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

常用参数:

add<地址>设置网络设备IPv6的IP地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
up启动指定的网络设备
IP地址指定网络设备的IP地址

参考实例

显示网络设备信息:

[root@jujon ~]# ifconfig
eth0   Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C       
       inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
       inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link     
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1      
       RX packets:172220 errors:0 dropped:0 overruns:0 frame:0      
       TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0 
       collisions:0 txqueuelen:1000       
       RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB) 
       Interrupt:185 Base address:0x2024  
lo    Link encap:Local Loopback       
      inet addr:127.0.0.1 Mask:255.0.0.0      
      inet6 addr: ::1/128 Scope:Host      
      UP LOOPBACK RUNNING MTU:16436 Metric:1      
      RX packets:2022 errors:0 dropped:0 overruns:0 frame:0      
      TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0   
      collisions:0 txqueuelen:0       
      RX bytes:2459063 (2.3 MiB) 
      TX bytes:2459063 (2.3 MiB)

启动关闭指定网卡:

[root@jujon ~]# ifconfig eth0 down
[root@jujon ~]# ifconfig eth0 up 

为网卡配置和删除IPv6地址:

[root@jujon ~]# ifconfig eth0 add 33ffe:3240:800:1005::2/64
[root@jujon ~]# ifconfig eth0 del 33ffe:3240:800:1005::2/64

用ifconfig修改MAC地址:

[root@jujon ~]# ifconfig eth0 down
[root@jujon ~]# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
[root@jujon ~]# ifconfig eth0 up
[root@jujon ~]# ifconfig eth1 hw ether 00:1D:1C:1D:1E 
[root@jujon ~]# ifconfig eth1 up

配置IP地址:

[root@jujon ~]# ifconfig eth0 192.168.1.56 
[root@jujon ~]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
[root@jujon ~]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255

20 dd命令

dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2

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

常用参数:

-v显示版本信息
-h显示帮助信息

参考实例

将本地的/dev/hdb整盘备份到/dev/hdd:

[root@jubot ~]# dd if=/dev/hdb of=/dev/hdd  

将压缩的备份文件恢复到指定盘:

[root@jubot ~]# gzip -dc /root/image.gz | dd of=/dev/hdb 

由标准输入设备读入字符串,并将字符串转换成大写后,再输出到标准输出设备:

[root@jubot ~]# dd conv=ucase 

将testfile文件中的所有英文字母转换为大写,然后转成为testfile_1文件:

[root@jubot ~]# dd if=testfile_2 of=testfile_1 conv=ucase 

修复硬盘:

[root@jubot ~]# dd if=/dev/sda of=/dev/sda  

第四章 Vim使用指南

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

1 命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

2 输入模式

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

3 底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

4 vi/vim键盘图

5 vi/vim 按键说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。

第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或 向右箭头键(→)光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
n那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
nn 为数字。光标向下移动 n 行(常用)
搜索替换
/word向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word向光标之上寻找一个字符串名称为 word 的字符串。
n这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd删除游标所在的那一整行(常用)
nddn 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除游标所在处,到该行的最后一个字符
d0那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G复制游标所在行到第一行的所有数据
yG复制游标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p, Pp 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J将光标所在行与下一行的数据结合成同一行
c重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u复原前一个动作。(常用)
[Ctrl]+r重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
.不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

第二部分:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc]退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w将编辑的数据写入硬盘档案中(常用)
:w!若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q离开 vi (常用)
:q!若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename]将编辑的数据储存成另一个档案(类似另存新档)
:r [filename]在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个档案。
:! command暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更
:set nu显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu与 set nu 相反,为取消行号!

特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。

举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

第五章 Linux常用快捷键

1 常用快捷键和命令结构图


如下为基本命令行提示符的样子,其中root为用户名,代表超级用户,oldbodyedu代表主机名,~代表当前目录,即家目录,#是超级用户提示符,如果是普通用户使用$。

2 基本快捷键的使用

(1)Tab,补充命令

  • 不用输入完整的命令,输入命令前几个字母后Tab键,会自动补全命令提示。

(2)移动光标命令

  • Ctrl+A:移动光标到开头

  • Ctrl+E:移动光标到结尾

  • Ctrl+F:往光标后面移动一个字符

  • Ctrl+B:往光标前面移动一个字符

(3)剪切字符

  • Ctrl+K:剪切光标处到行尾的字符

  • Ctrl+U:剪切光标处到行首的字符

  • Ctrl+Y:将剪切的字符进行粘贴

(4)复制粘贴

  • Ctrl+Ins:复制

  • Shift+Ins:粘贴

(5)中断正在运行的命令行

  • Ctrl+C

(6)退出当前Xshell

  • Ctrl+D

(7)搜索命令行使用过的历史命令记录

  • Ctrl+R

(8)获取上一条命令的最后部分,用空格分隔开来的部分

  • ESC+.


(9)清屏命令

  • Ctrl+L

    (10)暂停命令

  • Ctrl+Z

    如上面sleep 40命令执行后一直动不了,光标一直在闪,按Ctrl+Z后就可以重新回到命令行

(11)锁屏

  • Ctrl+S

(12)解除锁屏

  • Ctrl+Q

(13) !+命令 执行上一条命令,!! 执行上两条命令

3 快捷键集合

1、tab //命令或路径等的补全键,linux用的最多的一个快捷键 ⭐️

2、ctrl+a //光标迅速回到行首 ⭐️

3、ctrl+e //光标迅速回到行尾 ⭐️

4、ctrl+f //光标向右移动一个字符

5、ctrl+b //光标向左移动一个字符

6、ctrl+insert //复制命令行内容(mac系统不能使用)

7、shift+insert //粘贴命令行内容(mac系统不能使用)

8、ctrl+k //剪切(删除)光标处到行尾的所有字符 ⭐️

9、ctrl+u //剪切(删除)光标处到行首的所有字符 ⭐️

10、ctrl+w //剪切(删除)光标前的一个字符

11、ctrl+y //粘贴 ctrl+k、ctrl+u、ctrl+w删除的字符 ⭐️

12、ctrl+c //中断终端正在执行的任务并开启一个新的一行 ⭐️

13、ctrl+h //删除光标前的一个字符(相当于退格键)

14、ctrl+d //退出当前shell命令行,如果是切换过来的用户,则执行这个命令回退到原用户 ⭐️

15、ctrl+r //搜索命令行使用过的历史命令记录 ⭐️

16、ctrl+g //从ctrl+r的搜索历史命令模式中退出

17、ctrl+l //清楚屏幕所有的内容,并开启一个新的一行 ⭐️

18、ctrl+s //锁定终端,使之任何人无法输入

19、ctrl+q //解锁ctrl+s的锁定状态

20、ctrl+z //暂停在终端运行的任务,使用"fg"命令可以使暂停恢复 ⭐️

21!! //执行上一条命令 ⭐️

22!pw //这是一个例子,是执行以pw开头的命令,这里的pw可以换成任何已经执行过的字符 ⭐️

23!pw:p //这是一个例子,是仅打印以pw开头的命令,但不执行,最后的那个“p”是命令固定字符 ⭐️

24!num //执行历史命令列表的第num条命令,num代指任何数字(前提是历史命令里必须存在)⭐️

25!$ //代指上一条命令的最后一个参数,该命令常用于shell脚本中 ⭐️

26、esc+. //注意那个".“ 意思是获取上一条命令的(以空格为分隔符)最后的部分 ⭐️

27、esc+b //移动到当前单词的开头

28、esc+f //移动到当前单词的结尾

附录

linux的命令是众多的,想要更多的学习linux的命令需要长时间的积累以及参考一些命令手册。这里给出一个常用的linux手册:Linux命令大全(手册)。

本文标签: 教程 Linux