Linux概述
1、操作系统
定义:操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序
作用:是把计算机系统中对硬件设备的操作封装起来,供应用软件调用,也是提供一个让用户与系统交互的操作界面。
在我们的常见的操作系统中有
PC端的
1、Windows
2、MacOS
3、Linux
移动端OS
1、安卓与苹果
2、操作系统的发展史
Unix
1965年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘、显示器),连接一台电脑
为了解决数量不够用的问题
1965年左后由贝尔实验室、麻省理工学院 以及 通用电气共同发起了Multics项目,想让大型主机支持300台终端
1969年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究
1969年从这个项目中退出的Ken Thompson当时在实验室无聊时,为了让一台空闲的电脑上能够运行“星际旅行”游行,在8月份左右趁着其妻子探亲的时间,用了1个月的时间 编写出了 Unix操作系统的原型
1970年,美国贝尔实验室的 Ken Thompson,以 BCPL语言 为基础,设计出很简单且很接近硬件的 B语言(取BCPL的首字母),并且他用B语言写了第一个UNIX操作系统。
因为B语言的跨平台性较差,为了能够在其他的电脑上也能够运行这个非常棒的Unix操作系统,Dennis Ritchie和Ken Thompson 从B语言的基础上准备研究一个更好的语言
肯·汤普逊(左)和丹尼斯·里奇(右)
1972年,美国贝尔实验室的 Dennis Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言
1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了现在大名鼎鼎的Unix操作系统
早期的Unix系统都是针对专门的硬件系统开发的,不同厂商都是为自己的服务器开发专门的Unix操作系统。
Minix
因为AT&T(通用电气)的政策改变,在Version 7 Unix推出之后,发布新的使用条款,将UNIX源代码私有化,在大学中不再能使用UNIX源代码。Andrew S. Tanenbaum(塔能鲍姆)教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不使用任何AT&T的源代码前提下,自行开发与UNIX兼容的操作系统,以避免版权上的争议。他以小型UNIX(mini-UNIX)之意,将它称为MINIX。
Linux
因为Minix只是教学使用,因此功能并不强,因此Torvalds利用GNU的bash当做开发环境,gcc当做编译工具,编写了Linux内核-v0.02,但是一开始Linux并不能兼容Unix,即Unix上跑的应用程序不能在Linux上跑,即应用程序与内核之间的接口不一致,因为Unix是遵循POSIX规范的,因此Torvalds修改了Linux,并遵循POSIX(Portable Operating System Interface,他规范了应用程序与内核的接口规范); 一开始Linux只适用于386,后来经过全世界的网友的帮助,最终能够兼容多种硬件;
Minix最有名的学生用户是Linus Torvalds,他在芬兰的赫尔辛基大学用Minix操作平台建立了一个新的操作系统的内核,他把它叫做Linux。
Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统
Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE。
Unix与Linux区别
Linux和UNIX的最大的区别是,前者是开放源代码的自由软件,而后者是对源代码实行知识产权保护的传统商业软件。
这应该是他们最大的不同,这种不同体现在用户对前者有很高的自主权,而对后者却只能去被动的适应;这种不同还
表现在前者的开发是处在一个完全开放的环境之中,而后者的开发完全是处在一个黑箱之中,只有相关的开发人员才能 够接触的产品的原型 。
具体区别如下:
UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上.
UNIX是商业软件,收费,而Linux是自由软件,免费、公开源代码的.
Linux商业化的有RedHat Linux 、SuSe Linux、slakeware Linux、国内的红旗等,还有Turbo Linux.
Unix主要有Sun 的Solaris、IBM的AIX, HP的HP-UX,以及x86平台的的SCO Unix/Unixware.
3、Linux发行版本
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
- 开发版:由于要试验各种解决方案,所以变化很快。
内核源码网址:http://www.kernel.org 所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。
Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
排行 | 版本 | 描述 |
---|---|---|
1 | MX Linux | 基于Debian和antiX |
2 | Linux Mint | 基于Ubuntu和Debian |
3 | Ubuntu | 顶级Linux发行版之一 |
4 | Elementary OS | 基于Debian |
5 | Manjaro Linux | 基于Arch Linux |
6 | Zorin OS | 基于Debian |
7 | Fedora | 软件技术方面处于领先地位 |
8 | Debian | 设计得非常稳定 |
9 | CentOS | 基于Fedora和Red Hat的企业最佳Linux |
10 | Kali Linux | 基于Debian |
Linux能做什么?
Linux可作为企业级服务器,或嵌入式开发平台也包含个人桌面系统。包含虚拟化、数据库服务器、Web服务器、开发平台等等
哪些人要学习Linux?
Linux管理员,oracle管理员,网络工程师,程序开发者等等。Linux系统涉及方面非常广泛,生态也越来越强大,非常适合大家学习
个人桌面领域的应用
此领域是传统linux应用最薄弱的环节,传统linux由于界面简单、操作复杂、应用软件少的缺点,一直被windows所压制,但近些年来随着ubuntu、fedora等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,linux在个人桌面领域的占有率在逐渐的提高
典型代表:ubuntu、fedora、suse linux
服务器领域
linux在服务器领域的应用是其重要分支
linux免费、稳定、高效等特点在这里得到了很好的体现,但早期因为维护、运行等原因同样受到了很大的限制,但近些年来linux服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛
典型代表: Red Hat公司的AS系列
完全开源的debian系列
suse EnterPrise 11系列等
嵌入式领域
近些年来linux在嵌入式领域的应用得到了飞速的提高
linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
小贴士:Minix没有火起来的原因
Andrew Tanenbaum教授在发布Minix3时,接受采访时他透露MINIX3将移植到ARM架构。他说,MINIX3没有统治世界是源于他在1992年犯下的一个错误,当时他认为BSD必然会一统天下,因为它是一个更稳定和更成熟的系统,其它操作系统难以与之竞争。
因此他的MINIX的重心集中在教育上。四名BSD开发者已经成立了一家公司销售BSD系统,他们甚至还有一个有趣的电话号码1-800-ITS-UNIX。
然而他们正因为这个电话号码而惹火上身。美国电话电报公司因电话号码而提起诉讼。
官司打了三年才解决。在此期间,BSD陷于停滞,而Linux则借此一飞冲天。
他的错误在于没有意识官司竟然持续了如此长的时间,以及BSD会因此受到削弱。如果美国电话电报公司没有起诉,Linux永远不会流行起来,BSD将统治世界。
Linux文件与路径
1、文件结构
Windows和Linux文件系统区别
在windows平台下,打开“此电脑”,我们可以看到盘符分区
每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形
但是在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
Centos没有盘符这个概念,只有一个根目录/,所有文件都在它下面
[root@localhost ~]# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
当我们输入ls / 可以查看更目录下的文件查看根目录下的系统文件
目录 | 说明 | 备注 |
---|---|---|
bin | 存放普通用户可执行的指令 | 即使在单用户模式下也能够执行处理 |
boot | 开机引导目录 | 包括Linux内核文件与开机所需要的文件 |
dev | 设备目录 | 所有的硬件设备及周边均放置在这个设备目录中 |
etc | 各种配置文件目录 | 大部分配置属性均存放在这里 |
lib/lib64 | 开机时常用的动态链接库 | bin及sbin指令也会调用对应的lib库 |
media | 可移除设备挂载目录 | 类似软盘 U盘 光盘等临时挂放目录 |
mnt | 用户临时挂载其他的文件系统 | 额外的设备可挂载在这里,相对临时而言 |
opt | 第三方软件安装目录 | 现在习惯性的放置在/usr/local中 |
proc | 虚拟文件系统 | 通常是内存中的映射,特别注意在误删除数据文件后,比如DB,只要系统不重启,还是有很大几率能将数据找回来 |
root | 系统管理员主目录 | 除root之外,其他用户均放置在/home目录下 |
run | 系统运行是所需文件 | 以前防止在/var/run中,后来拆分成独立的/run目录。重启后重新生成对应的目录数据 |
sbin | 只有root才能运行的管理指令 | 跟bin类似,但只属于root管理员 |
srv | 服务启动后需要访问的数据目录 | |
sys | 跟proc一样虚拟文件系统 | 记录核心系统硬件信息 |
tmp | 存放临时文件目录 | 所有用户对该目录均可读写 |
usr | 应用程序放置目录 | |
var | 存放系统执行过程经常改变的文件 |
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录 下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
2、基本概念
用户目录:位于 /home/user,称之为用户工作目录或家目录,表示方式:
# 在home有一个user 这里就是之前创建的msb123用户
[root@localhost ~]# cd /home
[root@localhost home]# ls
msb123
# 使用~回到root目录,使用/是回到根目录下
[root@localhost msb123]# cd ~
[root@localhost ~]#
登录信息
[root@localhost /]#
Linux的bash解析器终端用来显示主机名和当前用户的标识;
# root表示bai当前用户叫root(系统管理员账户)
# localhost表示当前使用的主机名叫localhost(没有设置系bai统名字的时候默认名称是localhost)
# / 表示你当前所处的目录位置 (这里的'/'表示你当前在根目录下)
相对路径和绝对路径
绝对路径
从/目录开始描述的路径为绝对路径,如:
[root@localhost /]# cd /home/msb123
[root@localhost /]# ls /usr
相对路径
从当前位置开始描述的路径为相对路径,如:
[root@localhost /]# cd ../../
[root@localhost /]# ls abc/def
. 和 …
每个目录下都有**.和…**
. 表示当前目录
.. 表示上一级目录,即父目录
例如这里切换路径时候
# 从 / 根目录切换到 home目录
[root@localhost /]# cd home
# 确认路径/home
[root@localhost home]# pwd
/home
# 切换到当前目录cd . 目录无变化
[root@localhost home]# cd .
# 切换到当前目录cd .. 目录回到上一级根目录
[root@localhost home]# cd ..
[root@localhost /]#
(注意 根目录下的 . 和 … 都表示当前目录)
文件权限
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。
Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
在 Unix/Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
访问用户
通过设定权限可以从以下三种访问方式限制访问权限:
- 只允许用户自己访问(所有者) 所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。
- 允许一个预先指定的用户组中的用户访问(用户组) 用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。
- 允许系统中的任何用户访问(其他用户) 用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类
访问权限
用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:
- 读权限(r) 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
- 写权限(w) 对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
- 可执行权限(x) 对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。
[root@localhost /]# ls -l
总用量 20
lrwxrwxrwx. 1 root root 7 8月 31 15:48 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 8月 31 15:58 boot
...
我们来拆解结构,这里面我只列了根目录下的一部分内容
用到 ls -l 命令查看当前文件夹下详细信息,具体的命令和参数,后面会深入讲解
我们需要关注的是文件或目录的权限情况
l rwx rwx rwx
d r-x r-x r-x
# 首先第一个字母 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
[ d ] 表示目录
[ l ] 表示为链接文档(link file)
[ - ] 表示为文件
[ b ] 表示为装置文件里面的可供储存的接口设备(可随机存取装置)
[ c ] 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
# 其次接下来的字符中,以三个为一组,且均为 [ rwx ] 的三个参数的组合
[ r ]代表可读(read)
[ w ]代表可写(write)
[ x ]代表可执行(execute)
[ - ]
# 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
此时问题来了那么这三组一样是有什么区分尼?
# 这里就涉及到刚才所描述的访问用户权限
# 所有者 所有者表示该文件的所有者
# 用户组 表示当前用户再同一组
# 其他用户 允许系统中的任何用户访问,系统内的其他所有用户就是 other 用户类
# 可以将这个权限进行类比,如我的篮球,
# 所有者表示的是我可以玩
# 用户组表示,我可以借给我同班同学玩
# 其他用户表示,我可以借给其他班的同学玩
文件属主与属组
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
[root@localhost /]# ls -l
总用量 20
...
dr-xr-xr-x. 5 root root 4096 8月 31 15:58 boot
...
[root@localhost /]# cd /home
[root@localhost home]# ls -l
总用量 0
drwx------. 2 msb123 msb123 83 9月 2 15:54 msb123
# 在以上实例中,msb123 文件是一个目录文件,属主和属组都为 msb123,属主有可读、可写、可执行的权限;与属主同组的用户无权限读写执行;其他用户也无权限读写执行
# 对于 root 用户来说,一般情况下,文件的权限对其不起作用。
3、基本命令信息
熟悉一些入门的命令
1、ls
ls 命令
作用:Linux ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
语法: ls [-alrtAFR](选项) [name...](参数)
参数:
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出) 示例如下:
[root@localhost ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出 示例如下:
[root@localhost ~]# ls -l
总用量 4
-rw-------. 1 root root 1437 8月 31 15:54 anaconda-ks.cfg
-r 将文件以相反次序显示(原定依英文字母次序) 示例如下:
[root@localhost ~]# ls -ra
.tcshrc .cshrc .bashrc .bash_profile .bash_logout .bash_history anaconda-ks.cfg .. .
-t 将文件依建立时间之先后次序列出 示例如下:
[root@localhost ~]# ls -lt
总用量 4
-rw-------. 1 root root 1437 8月 31 15:54 anaconda-ks.cfg
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录) 示例如下:
[root@localhost ~]# ls -A
anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/" 示例如下:
[root@localhost ~]# ls -F /home
msb123/
-R 若目录下有文件,则以下之文件亦皆依序列出 示例如下:
[root@localhost ~]# ls -R /home
/home:
msb123
/home/msb123:
常用组合
[1]查看文件详情:ls -l 或 ll
[2]增强对文件大小易读性,以人类可读的形式显示文件大小: ls -lh
[3]对文件或者目录进行从大到小的排序: ls -lhs
[4]查看当前目录下的所有文件或者目录,包括隐藏文件: ls -la
[5]只查看当前目录下的目录文件: ls -d .
[6]按照时间顺序查看,从上到倒下时间越来越近: ls -ltr
[7]查看文件在对应的inode信息:ls -li
2、cd
cd 命令
作用:变换当前目录到dir。默认目录为home,可以使用绝对路径、或相对路径。
语法:cd [dir](路径)
# 跳到用户目录下
[root@localhost ~]# cd /home/msb123
[root@localhost msb123]#
# 回到home目录
[root@localhost msb123]# cd ~
[root@localhost ~]#
# 跳到上次所在目录
[root@localhost ~]# cd -
/home/msb123
[root@localhost msb123]#
# 跳到父目录(也可以直接使用 cd ..)
[root@localhost msb123]# cd ./..
[root@localhost home]#
# 再次跳到上次所在目录
[root@localhost home]# cd -
/home/msb123
[root@localhost msb123]#
# 跳到当前目录的上两层
[root@localhost msb123]# cd ../..
[root@localhost /]#
# 把上个命令的最后参数作为dir
这里我们先将文件夹cd 到python2.7路径
[root@localhost /]# cd /usr/include/python2.7/
[root@localhost python2.7]#
# 这里使用cd ./..参数作为引子
[root@localhost python2.7]# cd ./..
# 这里我们使用命令,重复最后一个命令参数,直到回到了根目录
[root@localhost include]# cd !$
cd ./..
[root@localhost usr]# cd ./..
[root@localhost /]#
3、pwd
pwd 命令
作用:可立刻得知目前所在的工作目录的绝对路径名称
语法:pwd [--help][--version]
参数说明:
--help 在线帮助。
--version 显示版本信息。
查看当前所在目录:
[root@localhost /]# cd /home
[root@localhost home]# pwd
/home
[root@localhost home]#
Linux基本命令一
1、mkdir 命令
mkdir
**作用:**命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录
**语法:**mkdir [选项] 目录
**命令功能:**通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限。并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)
命令参数:
选项参数 | 完整参数 | 功能描述 |
---|---|---|
-m | –mode=模式 | 设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask |
-p | –parents | 可以是一个路径名称。 此时若路径中的某些目录尚不存在,加上此选项后, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录; |
-v | –verbose –help –version | –verbose 每次创建新目录都显示信息 –help显示此帮助信息并退出 –version输出版本信息并退出 |
示例如下:
# 创建目录 正常使用无参数
[root@localhost text.txt]# mkdir mydir
[root@localhost text.txt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 7 13:06 mydir
# 切换至mydir目录
[root@localhost text.txt]# cd mydir/
# 参数-p 进行递归创建目录 使用参数 -p
[root@localhost mydir]# mkdir -p text1/text2
# 切换至text2目录
[root@localhost mydir]# cd text1/text2/
[root@localhost text2]# pwd
/root/mydir/text1/text2
总结:# 使用参数 -p 可以创建多层路径文件目录
# 分别创建三个目录,并设置权限 使用参数 -m
[root@localhost text2]# mkdir -m 777 exercise1
[root@localhost text2]# mkdir -m 765 exercise2
[root@localhost text2]# mkdir -m 654 exercise3
[root@localhost text2]# ll
总用量 0
drwxrwxrwx. 2 root root 6 9月 7 13:22 exercise1
drwxrw-r-x. 2 root root 6 9月 7 13:23 exercise2
drw-r-xr--. 2 root root 6 9月 7 13:23 exercise3
总结:# 使用参数 -m 可以创建文件并设置文件的权限
注意(777,765,654 其中每一个数字,分别表示User、Group、及Other的权限。r=4,w=2,x=1)
# 创建一个目录,并设置权限 使用参数 -v -m
[root@localhost text2]# mkdir -v -m 654 exercise4
mkdir: 已创建目录 "exercise4"
2、touch 命令
touch
**作用:**用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
ls -l 可以显示档案的时间记录。
**语法:**touch [-acfm] [-d<日期时间>] [-r<参考文件或目录>] [-t<日期时间>] [–help] [–version] [文件或目录…]
命令参数:
参数 | 参数描述 |
---|---|
-a | 只更新访问时间,不改变修改时间 |
-m | 改变修改时间记录 |
-c | 不创建不存在的文件 |
-f | 不使用,是为了与其他 unix 系统的相容性而保留。 |
-m | 只更新修改时间,不改变访问时间 |
-r file | 使用文件file的时间更新文件的时间 |
-t | 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分 |
–no-create | 不会建立文件 |
–help | 列出指令格式 |
–version | 列出版本讯息 |
示例如下:
(1)使用指令"touch"创建"text1.txt"文件
[root@localhost text2]# cd exercise1
[root@localhost exercise1]# touch text1.txt
[root@localhost exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月 7 13:44 text1.txt
# 当然touch可以一次创建多个文件,例如:touch text1.txt text2.txt text3.txt ...
[root@localhost exercise1]# touch text2.txt text3.txt
[root@localhost exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月 7 13:44 text1.txt
-rw-r--r--. 1 root root 0 9月 7 13:45 text2.txt
-rw-r--r--. 1 root root 0 9月 7 13:45 text3.txt
(2)使用指令"touch"修改文件"text1.txt"的时间属性为当前系统时间,发现如果文件存在,这里直接是修改时间了
[root@localhost exercise1]# touch text1.txt
[root@localhost exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月 7 13:46 text1.txt
# 发现时间是已经修改了
(3)强制避免使用touch命令创建新文件 使用参数 -c
有时,如果新文件不存在,则需要避免创建新文件。 在这种情况下,可以使用touch命令使用’-c’选项
[root@localhost exercise1]# ls
text1.txt text2.txt text3.txt
[root@localhost exercise1]# touch -c text4.txt
[root@localhost exercise1]# ls
text1.txt text2.txt text3.txt
(4)更改文件的访问和修改时间 使用参数 -a
touch命令的另一个用途是更改文件的访问时间和修改时间
[root@localhost exercise1]# stat text3.txt
文件:"text3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16626 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:04:07.539848285 +0800
最近更改:2020-09-07 14:04:07.539848285 +0800
最近改动:2020-09-07 14:04:07.539848285 +0800
创建时间:-
[root@localhost exercise1]# touch -a text3.txt
[root@localhost exercise1]# stat text3.txt
文件:"text3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16626 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:08:33.788865586 +0800
最近更改:2020-09-07 14:04:07.539848285 +0800
最近改动:2020-09-07 14:08:33.788865586 +0800
创建时间:-
我们看到先是使用stat查看文件详细信息 最近访问和最近更改时间
当我们使用命令使用参数-a 对文件 text3.txt 做了一些操作 touch -a text3.txt
再查看时间时,发现文件已经修改好了
(4)仅更改此文件的修改时间 使用参数 -m
[root@localhost exercise1]# touch -m text3.txt
[root@localhost exercise1]# stat text3.txt
文件:"text3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16626 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:08:33.788865586 +0800
最近更改:2020-09-07 14:15:59.782894567 +0800
最近改动:2020-09-07 14:15:59.782894567 +0800
创建时间:-
(5)将访问和修改时间从一个文件复制到另一个文件 使用参数 -r
[root@localhost exercise1]# touch text3.txt -r text1.txt
[root@localhost exercise1]# stat text1.txt
文件:"text1.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16624 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 13:57:38.308822993 +0800
最近更改:2020-09-07 13:57:38.308822993 +0800
最近改动:2020-09-07 13:57:38.308822993 +0800
创建时间:-
[root@localhost exercise1]# stat text3.txt
文件:"text3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16626 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 13:57:38.308822993 +0800
最近更改:2020-09-07 13:57:38.308822993 +0800
最近改动:2020-09-07 14:19:35.732908600 +0800
创建时间:-
# 输出显示text3.txt现在具有与text1.txt相同的访问和修改值
(6)使用指定的时间戳创建新文件 使用参数-t
[root@localhost exercise1]# touch -t 2001011314.52 time.log
[root@localhost exercise1]# stat time.log
文件:"time.log"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16627 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-01-01 13:14:52.000000000 +0800
最近更改:2020-01-01 13:14:52.000000000 +0800
最近改动:2020-09-07 14:26:23.916935124 +0800
创建时间:-
# 最近访问与最近更该时间为设定的时间 2020-01-01 13:14:52.000000000
(7)将文件的时间戳更改为其他时间 使用参数
[root@localhost exercise1]# touch -c -t 1801011314.52 time.log
[root@localhost exercise1]# stat time.log
文件:"time.log"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16627 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2018-01-01 13:14:52.000000000 +0800
最近更改:2018-01-01 13:14:52.000000000 +0800
最近改动:2020-09-07 14:30:45.188952101 +0800
创建时间:-
# 使用参数修改为指定的时间戳
3、rm 命令
rm
**作用:**用于删除一个文件或者目录。
**语法:**rm [选项] 文件…
命令参数:
参数 | 参数描述 |
---|---|
-i | 删除前逐一询问确认 |
-f | 即使原档案属性设为唯读,亦直接删除,无需逐一确认 |
-r | 将目录及以下之档案亦逐一删除 (递归删除) |
(1)删除文件或者目录前提示 使用参数 -i
[root@localhost exercise1]# ls
text1.txt text2.txt time.log
[root@localhost exercise1]# rm -i text2.txt
rm:是否删除普通空文件 "text2.txt"?y
[root@localhost exercise1]# ls
text1.txt time.log
# 这里提示是否删除,输入 y确认
(2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认 -rf
我们先切换到上一级目录
[root@localhost exercise1]# cd ../
[root@localhost text2]# ls
exercise1 exercise2 exercise3 exercise4
[root@localhost text2]# rm -rf exercise1
[root@localhost text2]# ls
exercise2 exercise3 exercise4
[root@localhost text2]#
4、rmdir 命令
rmdir
**作用:**用于删除空的目录。从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。
**语法:**rmdir [-p] dirName
命令参数:
参数 | 参数描述 |
---|---|
-p | 当子目录被删除后使它也成为空目录的话,则顺便一并删除。 |
注意(不能删除非空目录)
(1)正常删除目录
[root@localhost text2]# ls
exercise2 exercise3 exercise4
[root@localhost text2]# rmdir exercise2
[root@localhost text2]# ls
exercise3 exercise4
[root@localhost text2]# rmdir exercise3
[root@localhost text2]# ls
exercise4
# 这里删除空目录
(1)工作目录下的 text1 目录中,删除名为 text2 的子目录。若 text2 删除后,text1 目录成为空目录,则 text1 亦予删除,类推
[root@localhost ~]# ls -R mydir/
mydir/:
text1
mydir/text1:
text2
mydir/text1/text2:
[root@localhost ~]# rmdir -p mydir/text1/text2/
[root@localhost ~]# ls
anaconda-ks.cfg
5、mv 命令
mv
**作用:**用来为文件或目录改名、或将文件或目录移入其它位置。
语法:
mv [options] source dest
mv [options] source... directory
命令参数:
参数 | 参数描述 |
---|---|
-i | 若指定目录已有同名文件,则先询问是否覆盖旧文件; |
-f | 在 mv 操作要覆盖某已有的目标文件时不给任何指示 |
mv参数设置与运行结果
命令格式 | 运行结果 |
---|---|
mv 文件名 文件名 | 将源文件名改为目标文件名 |
mv 文件名 目录名 | 将文件移动到目标目录 |
mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名 |
mv 目录名 文件名 | 出错 |
先给个环境
[root@localhost ~]# ls -R mydir/
mydir/:
test1 test2
mydir/test1:
text1.log text1.txt text2.log
mydir/test2:
(1)将文件 text1.log 重命名为 text2.txt
[root@localhost test1]# ls
text1.log text1.txt text2.log
[root@localhost test1]# mv text1.log text2.txt
[root@localhost test1]# ls
text1.txt text2.log text2.txt
(2)将文件 text1.txt text2.log text2.txt 移动到mydir的 test2 目录中
[root@localhost test1]# mv text1.txt text2.log text2.txt ../test2
[root@localhost test1]# ls
[root@localhost test1]# cd ../test2
[root@localhost test2]# ls
text1.txt text2.log text2.txt
(3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖 使用参数 -i 询问
[root@localhost test2]# ls
text1.txt text2.log text2.txt
[root@localhost test2]# mv -i text2.txt text1.txt
mv:是否覆盖"text1.txt"? y
[root@localhost test2]# ls
text1.txt text2.log
[root@localhost test2]#
(4)移动当前文件夹下的所有文件到上一级目录
[root@localhost test2]# mv * ../
[root@localhost test2]# ls ../
test1 test2 text1.txt text2.log
6、cp 命令
cp
**作用:**用于复制文件或目录。
语法:
cp [options] source dest
cp [options] source... directory
命令参数:
参数 | 参数功能描述 |
---|---|
-a | 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合 |
-d | 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 |
-f | 覆盖已经存在的目标文件而不给出提示。 |
-i | 与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。 |
-p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 |
-r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 |
-l | 不复制文件,只是生成链接文件。 |
# 常用的一些有以下参数
-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样
[root@localhost ~]# ls -R mydir/
mydir/:
test1 test2 text1.txt text2.log
mydir/test1:
mydir/test2:
# 目录文件环境
(1)复制 text1.txt 到 test1 目录下,保持原文件时间,如果原文件存在提示是否覆盖。使用参数 -ai
[root@localhost ~]# cp -ai mydir/text1.txt mydir/test1
[root@localhost ~]# ls mydir/test1
text1.txt
(2)为 text1.txt 建议一个链接(快捷方式) 使用参数 -s
[root@localhost ~]# cp -s mydir/text2.log link_text2
[root@localhost ~]# ls
anaconda-ks.cfg link_text2 mydir
# 注意(只能于当前目录中创建相对的符号链接)
(3)将当前或者制定的目录下的所有文件复制到新目录
[root@localhost ~]# cp -r mydir/ test
[root@localhost ~]# ls -R test
test:
test1 test2 text1.txt text2.log
test/test1:
text1.txt
test/test2:
test1 test2
test/test2/test1:
text1.txt
test/test2/test2:
[root@localhost ~]# ls -R mydir/
mydir/:
test1 test2 text1.txt text2.log
mydir/test1:
text1.txt
mydir/test2:
test1 test2
mydir/test2/test1:
text1.txt
mydir/test2/test2:
# 两个文件一模一样的内容
7、cat命令
cat
**作用:**用于连接文件并打印到标准输出设备上
**语法:**cat [-AbeEnstTuv] [–help] [–version] fileName
命令参数:
-n | –number | 由 1 开始对所有输出的行数编号 |
-b | –number-nonblank | 和 -n 相似,只不过对于空白行不编号 |
-s | –squeeze-blank | 当遇到有连续两行以上的空白行,就代换为一行的空白行 |
-v | –show-nonprinting | 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外 |
-E | –show-ends | 在每行结束处显示 $ |
-T | –show-tabs | 将 TAB 字符显示为 ^I |
-A | –show-all | 等价于 -vET |
-e | 等价于"-vE"选项 | |
-t | 等价于"-vT"选项 |
参考环境,事先编辑好的文本
[root@localhost ~]# vi mydir/text1.txt
# 编辑文本,使用vi打开文本
# 按i键进入编辑界面
# 输入对应的内容后
# 按ESC退出编辑模式
# 按住shift+;进入命令行界面
# 输入wq回车接口保存退出
(1)显示整个文件内容 使用 cat 正常进查看
[root@localhost ~]# cat mydir/text1.txt
# 编辑文本,使用vi打开文本
# 按i键进入编辑界面
# 输入对应的内容后
# 按ESC退出编辑模式
# 按住shift+;进入命令行界面
# 输入wq回车接口保存退出
(2)把 text1.txt 的文档内容加上行号后输入 text2.log 这个文档里:
[root@localhost mydir]# cat -n text1.txt > text2.log
[root@localhost mydir]# cat text2.log
1 # 编辑文本,使用vi打开文本
2 # 按i键进入编辑界面
3 # 输入对应的内容后
4 # 按ESC退出编辑模式
5 # 按住shift+;进入命令行界面
6 # 输入wq回车接口保存退出
(3)把 text1.txt 和 text2.txt 的文档内容加上行号(空白行不加)之后将内容附加到 text3.txt 文档里
[root@localhost mydir]# cat -b text1.txt text2.log >> text3.txt
[root@localhost mydir]# cat text3.txt
1 # 编辑文本,使用vi打开文本
2 # 按i键进入编辑界面
3 # 输入对应的内容后
4 # 按ESC退出编辑模式
5 # 按住shift+;进入命令行界面
6 # 输入wq回车接口保存退出
7 1 # 编辑文本,使用vi打开文本
8 2 # 按i键进入编辑界面
9 3 # 输入对应的内容后
10 4 # 按ESC退出编辑模式
11 5 # 按住shift+;进入命令行界面
12 6 # 输入wq回车接口保存退出
(3)清空 /mydir/text1.txt 文档内容
[root@localhost mydir]# cat /dev/null > text1.txt
[root@localhost mydir]# cat text1.txt
[root@localhost mydir]# ls
test1 test2 text1.txt text2.log text3.txt
8、more 命令
more
**作用:**类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h
**语法:**more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
命令参数:
参数 | 参数功能描述 |
---|---|
-num | 一次显示的行数 |
-d | 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] , 如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声 |
-l | 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能 |
-f | 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上) |
-p | 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容 |
-c | 跟 -p 相似,不同的是先显示内容再清除其他旧资料 |
-s | 当遇到有连续两行以上的空白行,就代换为一行的空白行 |
-u | 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同) |
+/pattern | 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示 |
+num | 从第 num 行开始显示 |
fileNames | 需要显示内容的文档,可为复数个数 |
常用的操作命令
按键 | 按键功能描述 |
---|---|
Enter | 向下 n 行,需要定义。默认为 1 行 |
Ctrl+F | 向下滚动一屏 |
空格键 | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
V | 调用vi编辑器 |
!命令 | 调用Shell,并执行命令 |
q | 退出more |
(1)显示文件中从第3行起的内容
[root@localhost mydir]# more +3 text3.txt
3 # 输入对应的内容后
4 # 按ESC退出编辑模式
5 # 按住shift+;进入命令行界面
6 # 输入wq回车接口保存退出
7 1 # 编辑文本,使用vi打开文本
8 2 # 按i键进入编辑界面
9 3 # 输入对应的内容后
10 4 # 按ESC退出编辑模式
11 5 # 按住shift+;进入命令行界面
12 6 # 输入wq回车接口保存退出
(2)在所列出文件目录详细信息,借助管道使每次显示 5 行
[root@localhost mydir]# ls -l / | more -5
总用量 20
lrwxrwxrwx. 1 root root 7 8月 31 15:48 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 8月 31 15:58 boot
drwxr-xr-x. 20 root root 3240 9月 5 13:07 dev
drwxr-xr-x. 75 root root 8192 9月 7 10:30 etc
--More--
# 空格会显示下5行
# 回车会显示下1行
9、less 命令
less
**作用:**less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
**语法:**less [参数] 文件
命令参数:
参数 | 参数功能描述 |
---|---|
-i | 忽略搜索时的大小写 |
-N | 显示每行的行号 |
-o | <文件名> 将less 输出的内容在指定文件中保存起来 |
-s | 显示连续空行为一行 |
/字符串: | 向下搜索“字符串”的功能 |
?字符串: | 向上搜索“字符串”的功能 |
n | 重复前一个搜索(与 / 或 ? 有关) |
N | 反向重复前一个搜索(与 / 或 ? 有关) |
-x <数字> | 将“tab”键显示为规定的数字空格 |
b | 向后翻一页 |
d | 向后翻半页 |
h | 显示帮助界面 |
Q | 退出less 命令 |
u | 向前滚动半页 |
y | 向前滚动一行 |
空格键 | 滚动一行 |
回车键 | 滚动一页 |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页 |
(1)查看文件
[root@localhost mydir]# less text3.txt
1 # 编辑文本,使用vi打开文本
2 # 按i键进入编辑界面
...省略...
# 进入后查看,Q键退出界面
(2)ps查看进程信息并通过less分页显示
[root@localhost mydir]# less text3.txt
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:06 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 05:06 ? 00:00:00 [kthreadd]
...省略...
(3)查看命令历史使用记录并通过less分页显示
[root@localhost test]# history | less
1 exit
2 reboot
3 shutdowm -r now
4 poweroff
5 cd
...省略...
(4)查看多个文件
[root@localhost mydir]# less text3.txt
# 此时如果需要查看多个文件可以使用 可以输入shift+;进入命令行模式
# 使用 p 和 n 进行上下页面翻页查看
附加备注
1.全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
2.单行导航
j - 向前移动一行
k - 向后移动一行
3.其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令
v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处
Linux 命令大全 Linux 命令大全
Linux基本命令二
1、head 命令
head
**作用:**用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
**语法:**head [参数] [文件]
命令参数:
参数 | 参数描述 |
---|---|
-q | 隐藏文件名 |
-v | 显示文件名 |
-c<数目> | 显示的字节数 |
-n<行数> | 显示的行数 |
(1)显示 1.log 文件中前 20 行
[root@localhost ~]# head 1.log -n 20
(2)显示 1.log 文件前 20 字节
[root@localhost ~]# head -c 20 log2014.log
(3)显示 t.log最后 10 行
[root@localhost ~]# head -n -10 t.log
扩展:tail 命令,查看文件的末尾
2、which 命令
which
在 linux 要查找某个命令或者文件,但不知道放在哪里了,可以使用下面的一些命令来搜索
which 查看可执行文件的位置。
whereis 查看文件的位置。
locate 配合数据库查看文件位置。
find 实际搜寻硬盘查询文件名称。
**作用:**用于查找文件(which指令会在环境变量$PATH设置的目录里查找符合条件的文件。)
**语法:**which [文件…]
命令参数:
参数 | 参数描述 |
---|---|
-n<文件名长度> | 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名 |
-p<文件名长度> | 与-n参数相同,但此处的<文件名长度>包括了文件的路径 |
-w | 指定输出时栏位的宽度 |
-V | 显示版本信息 |
(1)查看 ls 命令是否存在,执行哪个
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
(2)查看 which
[root@localhost ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/alias
/usr/bin/which
(3)查看 cd
[root@localhost ~]# which cd
/usr/bin/cd
(注意:显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)
(4)查看当前 PATH 配置
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
3、whereis命令
whereis
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,
而find则是遍历硬盘查找文件
**作用:**用于查找文件
**语法:**whereis [-bfmsu][-B <目录>…]-M <目录>…][-S <目录>…][文件…]
命令参数:
参数 | 参数描述 |
---|---|
-b | 定位可执行文件 |
-B<目录> | 只在设置的目录下查找可执行文件 |
-f | 不显示文件名前的路径名称 |
-m | 定位帮助文件 |
-M<目录> | 只在设置的目录下查找说帮助文件 |
-s | 定位源代码文件 |
-S<目录> | 只在设置的目录下查找源代码文件 |
-u | 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件 |
(1)查找 locate 程序相关文件
[root@localhost ~]# whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
(2)查找 locate 的源码文件
[root@localhost ~]# whereis -s locate
(3)查找 lcoate 的帮助文件
[root@localhost ~]# whereis -m locate
4、locate命令
locate
需要注意这个命令在我们的最小mini系统里面是没有安装的
[root@localhost ~]# yum install mlocate
...省略...
[root@localhost ~]# updatedb
**作用:**用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录
**语法:**locate [-d ][–help][–version][范本样式…]
命令参数:
参数 | 参数描述 |
---|---|
-b | 仅匹配路径名的基本名称 |
-c | 只输出找到的数量 |
-d | 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db |
-e | 仅打印当前现有文件的条目 |
-1 | 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。 这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料 |
-0 | 在输出上带有NUL的单独条目 |
-S | 不搜索条目,打印有关每个数据库的统计信息 |
-q | 安静模式,不会显示任何错误讯息 |
-P | 检查文件存在时不要遵循尾随的符号链接 |
-l | 将输出(或计数)限制为LIMIT个条目 |
-n | 至多显示 n个输出 |
-m | 被忽略,为了向后兼容 |
-r | REGEXP – 使用基本正则表达式 |
–regex | 使用扩展正则表达式 |
-o | 指定资料库存的名称 |
-h | 显示帮助 |
-i | 忽略大小写 |
-V | 显示版本信息 |
常用参数:
参数 | 参数描述 |
---|---|
-l | num(要显示的行数) |
-f | 将特定的档案系统排除在外,如将proc排除在外 |
-r | 使用正则运算式做为寻找条件 |
(1)查找和 pwd 相关的所有文件(文件名中包含 pwd)
[root@localhost ~]# locate pwd
/etc/.pwd.lock
/usr/bin/pwd
...省略...
(2)搜索 etc 目录下所有以 sh 开头的文件
[root@localhost ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
(3)查找 /root 目录下,以 sh 结尾的文件
[root@localhost ~]# locate -r '^/root.*sh$'
/root/test.sh
5、find命令
find
**作用:**用于在文件树中查找文件,并作出相应的处理
语法:
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
命令参数:
参数 | 参数描述 |
---|---|
pathname | find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录 |
find命令将匹配的文件输出到标准输出 | |
-exec | find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格 |
-ok | 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行 |
命令选项:
选项 | 选项描述 |
---|---|
-name | 按照文件名查找文件 |
-perm | 按文件权限查找文件 |
-user | 按文件属主查找文件 |
-group | 按照文件所属的组来查找文件 |
-type | 查找某一类型的文件,诸如: b - 块设备文件 d - 目录 c - 字符设备文件 l - 符号链接文件 p - 管道文件 f - 普通文件 |
-size n :[c] | 查找文件长度为n块文件,带有c时表文件字节大小 |
-amin n | 查找系统中最后N分钟访问的文件 |
-atime n | 查找系统中最后n*24小时访问的文件 |
-cmin n | 查找系统中最后N分钟被改变文件状态的文件 |
-ctime n | 查找系统中最后n*24小时被改变文件状态的文件 |
-mmin n | 查找系统中最后N分钟被改变文件数据的文件 |
-mtime n | 查找系统中最后n*24小时被改变文件数据的文件 |
-maxdepth n | 最大查找目录深度 |
-prune | 选项来指出需要忽略的目录。在使用-prune选项时要当心, 因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略 |
-newer | 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项 |
来看例子
(1)查找 48 小时内修改过的文件
[root@localhost ~]# find -atime -2
.
./.bash_profile
...省略...
(2)在当前目录查找 以 .log 结尾的文件。 . 代表当前目录
[root@localhost ~]# find ./ -name '*.log'
./mydir/text2.log
./test.log
(3)查找 /opt 目录下 权限为 777 的文件
[root@localhost ~]# find /opt -perm 777
(4)查找大于 1K 的文件
[root@localhost ~]# find -size +1000c
./anaconda-ks.cfg
./.bash_history
./.viminfo
(5)查找等于 1000 字符的文件
[root@localhost ~]# find -size 1000c
-exec
注意:-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名
(6)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)
[root@localhost ~]# find . -type f -mtime +10 -exec rm -f {} \;
# 可以不用操作,了解一下结构即可
(7)当前目录中查找所有文件名以.log结尾、更改时间在0日以上的文件,并删除它们,
只不过在删除之前先给出提示。 按y键删除文件,按n键不删除
[root@localhost ~]# find . -name '*.log' -mtime +0 -ok -exec rm {} \;
< -exec ... ./mydir/text2.log > ? n
(8)用 exec 选项执行 cp 命令
[root@localhost ~]# find . -name '*.log' -exec cp {} test3 \;
-xargs find
-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
(9)查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型
[root@localhost ~]# find . -type f -print | xargs file
(10)查找当前目录下所有以 js 结尾的并且其中包含 ‘editor’ 字符的普通文件
[root@localhost ~]# find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
[root@localhost ~]# find -type f -name '*.js' | xargs grep -lF 'editor'
(11)利用 xargs 执行 mv 命令
[root@localhost ~]# find . -name "*.log" | xargs -i mv {} test4
(12)用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行:
[root@localhost ~]# find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'
(13)查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:
[root@localhost ~]# find . -name '[a-z]*[4-9].log' -print
(14)在 test 目录查找不在 test4 子目录查找
[root@localhost ~]# find test -path 'test/test4' -prune -o -print
(15)实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件
[root@localhost ~]# find -newer log2012.log ! -newer log2017.log
depth
depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
实例:find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找
[root@localhost ~]# find / -name "CON.FILE" -depth -print
6、chmod命令
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。
用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找
[root@localhost ~]# ll
总用量 20
-rw-------. 1 root root 1437 8月 31 15:54 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 9月 8 18:29 file1
lrwxrwxrwx. 1 root root 15 9月 7 16:31 link_text2 -> mydir/text2.log
drwxr-xr-x. 4 root root 92 9月 7 18:08 mydir
-rw-r--r--. 1 root root 13 9月 8 16:35 myfile
-rw-r--r--. 1 root root 36 9月 9 13:16 test3
-rw-r--r--. 1 root root 36 9月 8 18:36 test.log
-rwxr-xr-x. 1 root root 67 9月 8 18:36 test.sh
这里使用test.log作为例子
-rw-r--r--. 1 root root 36 9月 8 18:36 test.log
第一列共有 10 个位置,
第一个字符指定了文件类型。
在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。
如果是 d,表示是一个目录。
从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。
权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行
语法:
chmod [-cfvR] [--help] [--version] mode file...
常用参数:
参数 | 参数描述 |
---|---|
-c | 当发生改变时,报告处理信息 |
-R | 处理指定目录以及其子目录下所有文件 |
权限范围:
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组
权限代号:
代号 | 代号权限 |
---|---|
r | 读权限,用数字4表示 |
w | 写权限,用数字2表示 |
x | 执行权限,用数字1表示 |
- | 删除权限,用数字0表示 |
s | 特殊权限 |
环境:-rw-r--r--. 1 root root 36 9月 8 18:36 test.log
(1)增加文件 t.log 所有用户可执行权限
[root@localhost ~]# ls -n test.log
-rwxr-xr-x. 1 0 0 36 9月 8 18:36 test.log
(2)撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息
[root@localhost ~]# chmod u=r test.log -c
mode of "test.log" changed from 0755 (rwxr-xr-x) to 0455 (r--r-xr-x)
[root@localhost ~]# ls -n test.log
-r--r-xr-x. 1 0 0 36 9月 8 18:36 test.log
(3)给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
[root@localhost ~]# chmod 751 test.log -c
或者
[root@localhost ~]# chmod u=rwx,g=rx,o=x t.log -c
(4)将mydir 目录及其子目录所有文件添加可读权限
[root@localhost ~]# chmod u+r,g+r,o+r -R text/ -c
7、chown命令
chown 将指定文件的拥有者改为指定的用户或组,
用户可以是用户名或者用户 ID;
组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符
注意:一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限。
语法:
chown [-cfhvR] [--help] [--version] user[:group] file...
常用参数:
参数 | 参数描述 |
---|---|
user | 新的文件拥有者的使用者 ID |
group | 新的文件拥有者的使用者组(group) |
-c | 显示更改的部分的信息 |
-f | 忽略错误信息 |
-h | 修复符号链接 |
-v | 显示详细的处理信息 |
-R | 处理指定目录以及其子目录下的所有文件 |
–help | 显示辅助说明 |
–version | 显示版本 |
(1)改变拥有者和群组 并显示改变信息
[root@localhost ~]# chown -c mail:mail test.log
changed ownership of "test.log" from root:root to mail:mail
-r--r-xr-x. 1 mail mail 36 9月 8 18:36 test.log
(2)改变文件群
[root@localhost ~]# chown -c :mail test.sh
changed ownership of "test.sh" from root:root to :mail
(3)改变文件夹及子文件目录属主及属组为 mail
[root@localhost ~]# chown -cR mail: mydir
changed ownership of "mydir/test1/text1.txt" from root:root to mail:mail
changed ownership of "mydir/test1" from root:root to mail:mail
...省略...
8、tar 命令
用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。
弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件
**作用:**用于备份文件(tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件)
语法:
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]
命令参数:
参数 | 参数描述 |
---|---|
-c | 建立新的压缩文件 |
-f | 定压缩文件 |
-r | 添加文件到已经压缩文件包中 |
-u | 添加改了和现有的文件到压缩包中 |
-x | 从压缩包中抽取文件 |
-t | 显示压缩文件中的内容 |
-z | 支持gzip压缩 |
-j | 支持bzip2压缩 |
-Z | 支持compress解压文件 |
-v | 显示操作过程 |
有关 gzip 及 bzip2 压缩:
gzip 实例:压缩 gzip fileName .tar.gz 和.tgz 解压:gunzip filename.gz 或 gzip -d filename.gz
对应:tar zcvf filename.tar.gz tar zxvf filename.tar.gz
bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
对应:tar jcvf filename.tar.gz 解压:tar jxvf filename.tar.bz2
(1)将test.log test.sh全部打包成 tar 包
[root@localhost ~]# [root@localhost ~]# tar -cvf log.tar test.log test.sh
test.log
test.sh
(2)将 /etc 下的所有文件及目录打包到指定目录或当前目录,并使用 gz 压缩
[root@localhost ~]# tar -zcvf ./etc.tar.gz /etc
(3)查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)
[root@localhost ~]# tar -ztvf ./etc.tar.gz
...省略...
(4)要压缩打包 /home, /etc ,但不要 /home/mashibing ,只能针对文件,不能针对目录
[root@localhost ~]# tar --exclude /home/mshibing -zcvf myfile.tar.gz /home/* /etc
9、date命令
**作用:**用来显示或设定系统的日期与时间
语法:
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
时间参数
参数 | 描述参数 |
---|---|
% | 印出 % |
%n | 下一行 |
%t | 跳格 |
%H | 小时(00…23) |
%I | 小时(01…12) |
%k | 小时(0…23) |
%l | 小时(1…12) |
%M | 分钟(00…59) |
%p | 显示本地 AM 或 PM |
%r | 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) |
%s | 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 |
%S | 秒(00…61) |
%T | 直接显示时间 (24 小时制) |
%X | 相当于 %H:%M:%S |
%Z | 显示时区 |
日期参数
参数 | 描述参数 |
---|---|
%a | 星期几 (Sun…Sat) |
%A | 星期几 (Sunday…Saturday) |
%b | 月份 (Jan…Dec) |
%B | 月份 (January…December) |
%c | 直接显示日期与时间 |
%d | 日 (01…31) |
%D | 直接显示日期 (mm/dd/yy) |
%h | 同 %b |
%j | 一年中的第几天 (001…366) |
%m | 月份 (01…12) |
%U | 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形) |
%w | 一周中的第几天 (0…6) |
%W | 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形) |
%x | 直接显示日期 (mm/dd/yy) |
%y | 年份的最后两位数字 (00.99) |
%Y | 完整年份 (0000…9999) |
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
使用权限:所有使用者。
当您不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。
当您以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
语法:
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
常见参数
-d | 显示 datestr 中所设定的时间 (非系统时间) |
–help | 显示辅助讯息 |
-s | 将系统时间设为 datestr 中所设定的时间 |
-u | 显示目前的格林威治时间 |
–version | 显示版本编号 |
(1)
10、cal 命令
**作用:**用户显示公历(阳历)日历
**语法:**cal [选项] [[[日] 月] 年]
参数 | 参数描述 |
---|---|
-1 | 只显示当前月份(默认) |
-3 | 显示上个月、当月和下个月 |
-s | 周日作为一周第一天 |
-m | 周一用为一周第一天 |
-j | 输出儒略日 |
-y | 输出整年 |
-V | 显示版本信息并退出 |
-h | 显示此帮助并退出 |
(1)显示指定年月日期
[root@localhost ~]# cal 9 2020
(2)显示2020年每个月日历
[root@localhost ~]# cal -y 2020
(3)将星期一做为第一列,显示前中后三月
[root@localhost ~]# cal -3m
11、grep命令
grep
强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索
grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容
**作用:**用于查找文件里符合条件的字符串
注意:如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 **-**,则 grep 指令会从标准输入设备读取数据
语法:
grep [option] pattern file|dir
常用参数:
参数 | 参数描述 |
---|---|
-A n | 显示匹配字符后n行 |
-B n | 显示匹配字符前n行 |
-C n | 显示匹配字符前后n行 |
-c | 计算符合样式的列数 |
-i | 忽略大小写 |
-l | 只列出文件内容符合指定的样式的文件名称 |
-f | 从文件中读取关键词 |
-n | 显示匹配内容的所在文件中行数 |
-R | 递归查找文件夹 |
grep 的规则表达式
^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* #一起用代表任意字符。
[] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) #标记匹配字符,如'\(love\)',love被标记为1。
\< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b #单词锁定符,如: '\bgrep\b'只匹配grep。
(1)查找指定进程
[root@localhost ~]# ps -ef | grep svn
root 6771 9267 0 15:17 pts/0 00:00:00 grep --color=auto svn
(2)查找指定进程个数
[root@localhost ~]# ps -ef | grep svn -c
1
(3)从文件中读取关键词
[root@localhost ~]# cat test.log | grep -f test.log
马士兵教育:www.mashibing.com
(4)从文件夹中递归查找以.sh结尾的行,并只列出文件
[root@localhost ~]# grep -lR '.sh$'
.bash_history
test.sh
.viminfo
log.tar
(5)查找非x开关的行内容
[root@localhost ~]# grep '^[^x]' test.log
马士兵教育:www.mashibing.com
(6)显示包含 ed 或者 at 字符的内容行
[root@localhost ~]# grep -E 'ed|at' test.log
12、ps命令
ps
**作用:**用于显示当前进程 (process) 的状态
语法:
ps [options] [--help]
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps 工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
命令参数
参数 | 参数描述 |
---|---|
-A | 显示所有进程 |
a | 显示所有进程 |
-a | 显示同一终端下所有进程 |
c | 显示进程真实名称 |
e | 显示环境变量 |
f | 显示进程间的关系 |
r | 显示当前终端运行的进程 |
-aux | 显示所有包含其它使用的进程 |
(1)显示当前所有进程环境变量及进程间关系
[root@localhost ~]# ps -ef
(2)显示当前所有进程
[root@localhost ~]# ps -A
(3)与grep联用查找某进程
[root@localhost ~]# ps -aux | grep apache
root 20112 0.0 0.0 112824 980 pts/0 S+ 15:30 0:00 grep --color=auto apache
(4)找出与 cron 与 syslog 这两个服务有关的 PID 号码
[root@localhost ~]# ps aux | grep '(cron|syslog)'
root 20454 0.0 0.0 112824 984 pts/0 S+ 15:30 0:00 grep --color=auto (cron|syslog)
13、kill命令
kill
kill 命令用于删除执行中的程序或工作
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看
语法:
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
常用参数:
参数 | 参数描述 |
---|---|
-l | 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称 |
-a | 当处理当前进程时,不限制命令名和进程号的对应关系 |
-p | 指定kill 命令只打印相关进程的进程号,而不发送任何信号 |
-s | 指定发送信号 |
-u | 指定用户 |
(1)先使用ps查找进程pro1,然后用kill杀掉
[root@localhost ~]# kill -9 $(ps -ef | grep pro1)
-bash: kill: root: 参数必须是进程或任务 ID
-bash: kill: (27319) - 没有那个进程
-bash: kill: (27317) - 没有那个进程
Linux编辑器vim
1、vi与vim的简介
在Linux下,绝大部分的配置文件都是以ASCII码的纯文本形式存在的,可以利用一些简单的编辑软件修改配置。
在Linux命令行界面下的文本编辑器有很多,比如nano,Emacs,vim等。但是所有的UNIX Like系统都会内置vi文本编辑器,而其他的文本编辑器则不一定存在。很多软件的编辑接口都会主动调用vi,而且它的编辑速度相当快。因为有太多的Linux命令都默认使用vi座位数据编辑的接口,所以我们必须学会vi,否则很多的命令无法操作。
vim可以视为vi的高级版本,vim可以用颜色或者底线等方式显示一些特殊的信息。vim可以根据文件的扩展名或者是文件内的开头信息判断该文件的内容而自动调用该程序的语法判断式。
概括的说:vi是文字处理器,而vim是它的升级版本,是一个程序开发工具。vim加入了许多额外的功能,例如支持正则表达式的查找架构,多文件编辑器,块复制等。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
既然是程序开发工具,那么就可以安装这个环境
[root@localhost ~]# yum install vim
已加载插件:fastestmirror
...省略...
中间提示是否继续或者OK选择 y 即可
基本上 vi/vim 共分为三种模式,
分别是命令模式(Command mode),输入模式(Insert mode)和末行命令模式(Last line mode)
一般使用VI操作直接进入的模式,即默认模式。在此模式下可以进行的操作:移动光标、复制、粘贴、删除操作。
2、命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
shift + : 切换到末行命令模式,以在最底一行输入命令。
任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
(注意:若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。)
移动光标的方法 | |
---|---|
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 | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n | n 为数字。光标向下移动 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 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! |
删除、复制与贴上 | |
---|---|
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 删除游标所在的那一整行(常用) |
ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦! | |
. | 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
3、输入模式
在命令模式下按下i就进入了输入模式。
在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可
进入输入或取代的编辑模式 | |
---|---|
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] | 退出编辑模式,回到一般模式中(常用) |
4、末行模式
末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如:
:sp newfile
则分出一个窗口编辑newfile文件。如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。
指令行的储存、离开等指令 | |
---|---|
:w | 将编辑的数据写入硬盘档案中(常用) |
:w! | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
:q | 离开 vi (常用) |
:q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ | |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出) |
ZQ | 不保存,强制退出。效果等同于 :q!。 |
:w [filename] | 将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] | 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command | 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息! |
:n1,n2s/word1/word2/g | n1 与 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 !(常用) |
vim 环境的变更 | |
---|---|
:set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
普通用户:默认自动使用vim替换了vi |
4、vim 中批量添加注释
方法一 :块选择模式
批量注释:
Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
取消注释:
Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。
方法二: 替换命令
批量注释。
使用下面命令在指定的行首添加注释。
使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。
取消注释:
使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。
例子:
1、在 10 - 20 行添加 // 注释
:10,20s#^#//#g
2、在 10 - 20 行删除 // 注释
:10,20s#^//##g
3、在 10 - 20 行添加 # 注释
:10,20s/^/#/g
4、在 10 - 20 行删除 # 注释
:10,20s/#//g
Linux网络
1、Linux网络配置文件
查看第一张网卡的网卡信息:
[root@localhost yum.repos.d]# cat vi /etc/sysconfig/network-scripts/ifcfg-ens33
cat: vi: 没有那个文件或目录
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=fe07c6dd-8437-474f-8c72-37f5555d754e
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.0.150
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
配置 | 说明 |
---|---|
DEVICE=eth0 | 网卡设备名,eth0表示第一张网卡 |
BOOTPROTO=none | 是否自动获取IP(none、static、dhcp),当值为dhcp时,只需配置上述例子中的那几项就可以联网 |
HWADDR=00:0C:29:11:30:39 | MAC地址 |
NM_CONTROLLED=yes | 是否可以由Network Manager图形管理工具托管 |
ONBOOT=yes | 是否随网络服务启动当前网卡生效(在CentOS 6 以上的版本中ONBOOT是默认关闭的。) |
TYPE=Ethernet | 网络类型,这里为以太网 |
UUID=5ab36190-a5df-4bf1-94d8-6c126afd05f1 | 唯一识别码 |
IPADDR=192.168.0.200 | IP地址 |
NETMASK=255.255.255.0 | 子网掩码 |
GATEWAY=192.168.0.1 | 网关 |
DNS1=202.106.0.20 | DNS |
IPV6INIT=no | IPv6是否启用,这里设置为不启用 |
USERCTL=no | 是否允许非root用户控制此网卡,这里为不允许 |
说明: 1.自动获取IP的条件是:必须在局域网内存在DHCP服务器。 2.相同UUID网络配置的计算机会导致互相不能上网。
主机名文件
查看主机名文件:
[root@localhost yum.repos.d]# cat /etc/sysconfig/network # 在centos7之前的版本
# Created by anaconda
修改主机名:
hostnamectl set-hostname mylinux1
最好还要修改host
vi /etc/hosts
192.168.23.3 mylinux1
DNS配置文件
查看DNS配置文件:
[root@localhost yum.repos.d]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.0.1
nameserver
这一项,设置的是域名服务器的地址,多个域名服务器,则在后续添加空格继续补充域名服务器的地址,或者另起一行做类似的nameserver
配置
防火墙设置:
查看防火墙状态: systemctl status firewalld.service
绿的running表示防火墙开启
执行关闭命令: systemctl stop firewalld.service
再次执行查看防火墙命令:systemctl status firewalld.service
执行开机禁用防火墙自启命令 : systemctl disable firewalld.service