温馨提示:所有文章中所提及的CentOS相关的案例的安装包和工具,都可以在我的网盘中直接下载并跟着实操:
提取码:aj9p
1. CentOS简介

1.1 历史背景
Linux内核kernel最初是由芬兰人李纳斯•托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的,在1991年10月5日第一次正式向外公布。在Linux发布之前,有一种操作系统叫Unix,由于价格昂贵不开放源码,所以李纳斯•托瓦兹(Linus Torvalds)决心要开发自己免费的操作系统,Linux借鉴了Unix的思想,但没有一行Unix的代码,Linux系统是从Unix系统发展出来的。Linux 英文解释为 Linux is not Unix,现在业界有一种说法叫:类Unix。
1.2 Linux构成
Linux是由Linux kernel + 各种软件包构成。
1.3 发行版本
Linux的发行版就是将Linux内核与应用软件做一个打包。目前比较知名的Linux发行版有: RedHat、CentOS、Ubuntu、Fedora、Debian、Aliyu Linux、SUSE Linux、Open SUSE、CoreOS、FreeBSD等。一般来讲Web应用都选择CentOS,像Java、PHP等都是CentOS操作系统。ASP、.NET、SQL Server微软的一系列组件选择Windows Server操作系统。CentOS是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用,两者的不同,在于CentOS完全开源。90%以上的服务器领域都会使用Linux系统,而CentOS有比较大的使用率。
1.4 Centos运行环境
我们学习Centos,首先需要有Centos运行环境:
- 购买一个阿里云、华为云、百度云、腾讯云等这种云服务器,云服务器选择CentOS系统。
- 本地电脑搭建CentOS运行环境。需要借助中间软件,一般是:VMware或者VirtualBox。
2. VMware简介

VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、Linux系统。与“多启动”系统相比,VMware采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。我们一般用户使用的是Windows,如果要安装Centos系统的话,我们需要安装一台虚拟机,在虚拟机里安装一个Centos操作系统来学习或测试,正式部署的话,一般是现成的机器和系统。
2.1 VMware安装
1.去官网下载VMware的安装包,下载地址如下:
也可以使用文章开篇网盘中所提供的安装包。双击安装包 VMware-workstation-full-16.1.1-17801498.exe,并点击下一步

2.勾选许可协议,点击下一步

3.更改软件的安装目录,点击下一步

4.取掉如下两个勾选,并点击下一步

5.创建桌面快捷方式,点击下一步

6.点击安装,即可进行软件安装(注意:这里的图显示的是升级,原因是我已经在本地电脑安装过,所以是版本的升级)

7.等待安装完成,点击完成即可完成整个安装

8.启动VM时,如果提示输入许可证密钥,可以网上自行搜索激活,或参考网盘资料当中提供的vm16.txt文档激活

9.见到如下界面,即安装完成

3. CentOS操作系统安装
在国内,最常用的CentOS版本是CentOS 7这个版本,最新版本是CentOS 8,但使用率还不是很高
CentOS 7分为:
- DVD ISO标准安装版 大小有4g
- Everything ISO 对标准版的软件进行补充,集成所有软件,完全安装版,大小10G
- Minimal ISO 最小安装版,内核完全一样,但是没有安装过多软件包,体积小
3.1 CentOS下载
Centos官方下载网站:www.centos.org/
这个是Centos官方网站,提供有 DVD安装版本 ,完全安装版,以及Min版但国外的网站下载速度偏慢,建议使用国内镜像下载
阿里云镜像下载网站:mirrors.aliyun.com/centos/7/is…
下载DVD版本即可,或者直接使用网盘中已经下载好的
3.2 VMware中安装虚机器
1.打开VMware创建新的虚拟机

2.选择典型,并点击下一步

3.选择稍后安装操作系统,点击下一步

4.客户机操作系统选择Linux,版本选择CentOS 7 64位,点击下一步

5.给虚拟机命名,并设置下虚拟机的安装位置,点击下一步

6.一般默认的20G和拆分多个文件的设置就行,点击下一步

7.点击完成

8.至此,一个没有操作系统的虚拟机就安装完成了

3.3 配置虚拟机器
1.在安装系统之前,先为虚拟机搞一下配置,选择编辑虚拟机设置

2.将虚拟机的内存建议改为2GB,如下图所示

3.将处理器的数量建议改为2个,如下图所示

4.点击CD/DVD,选择一下我们之前下载好的CentOS7的DVD文件

5.网络适配器,需要确保目前的网络连接模式是NAT模式

6.配置虚拟网络,在编辑栏中找到虚拟网络编辑器,如下图所示

7.找到弹出窗口中的VMnet8,并选中,点击更改设置,提示需要以管理员身份运行,点击确定

8.以管理员身份运行后,继续选择VMnet8,并将子网IP改为:192.168.177.0(也可以改成自己想要的网段),之后我们的CentOS系统的网络IP地址就会在这个网段区间生成,我们需要连接CentOS系统也需要连接这个网段区间中的某个IP地址,改好后点击确定,等待配置完成

3.4 安装CentOS系统
1.选择开启此虚拟机,再选择第一个进行安装

2.按下回车键,等待执行

3.执行一会儿,会出现该界面,选择简体中文,并点击继续

4.进入到安装信息摘要界面,选择本地化中的日期和时间,选择亚洲上海,并调整时间,如下图所示


5.在安装信息摘要界面,找到软件中的软件选择项,我们可以对软件包进行一些相应安装,选择带GUI的服务器,并在右侧勾选兼容性、开发工具、安全性工具三项,如下图所示


6.在安装信息摘要界面,选择系统中的安装位置,直接选择默认的自动配置分区,点击完成即可


7.在安装信息摘要界面,选择系统中的网络和主机名,打开以太网,这样就能用让主机被访问,如下图所示


8.点击开始安装,进行CentOS7系统安装

9.进行系统安装,可以设置一下ROOT密码,也就是管理员账号的密码,这里我们密码默认也设置成root,设置完毕之后,等待安装完毕,这个过程可能会比较久


10.安装完毕之后,点击重启,即可进入系统,进入系统后,需要我们创建一个子用户,例如这里我们创建一个用户叫test,即可进入系统


4. 连接CentOS系统
我们平时需要使用远程连接工具来连接CentOS,方便我们进行命令操作,远程连接工具有如下几个主流工具:
XShell 官网下载:www.netsarang.com
SecureCRT 官网下载:www.vandyke.com
MobaXterm 下载链接:mobaxterm.mobatek.net
我们以XShell作为教学案例为主,安装包已经附在了网盘资料中
4.1 查看虚拟机里CentOS的IP地址
我们如果需要访问虚拟机里的CentOS就需要知道它的IP地址,以便我们用XShell工具来连接它。
1.我们在VMware中,鼠标右键选择打开终端,进入Linux系统命令行


2.我们输入 ifconfig 命令或 ip addr 命令,找到ens33网卡中的ip地址,这个ip地址就是我们以后连接虚拟机中CentOS系统的地址,例如我这里是:192.168.177.128

4.2 配置虚拟机里CentOS的IP地址
如果你的虚拟机能够在4.1章节中正常出现inet属性和ip地址,那么可以不用管下面的配置,如果发现ens33没有inet这个属性的话,那么就没法通过IP地址连接虚拟机,那么需要查看ens33网卡的配置。
1.我们先切换到root管理员账号去,输入命令: su root ,并输入密码 root

2.我们在命令行中输入:vi /etc/sysconfig/network-scripts/ifcfg-ens33,找到ONBOOT配置,如果发现是no,就证明没有启动网卡,那么我们需要将该配置改为“yes”

3.我们输入点击i就可以编辑这个文档,将网卡改为“yes”,然后按esc后输入:wq,即保存退出,这个冒号不可省略

4.然后重启网络服务,输入命令:sudo service network restart

5.再次输入 ifconfig 命令或 ip addr 命令,现在我们能看到可以访问的IP地址了

4.3 安装XShell
1.解压为大家准备好的Xshell包,找到解压目录,解压后点击,!绿化.bat即可完成

2.完成安装后,点击Xshell.exe即可启动程序,进入到如下界面
3.在会话窗口中,选择新建,在弹出框中,填写CentOS的连接地址信息,
4.在用户身份验证中,填写账号和密码,我们这里使用root账号进行,填写完毕后,点击连接,如下图所示
5.点击连接之后,会弹出一个警告框,选择接受并保存,然后输入CentOS的连接账号信息,并勾选记住用户名,如下图所示
6.出现以下窗口,说明Xshell连接CentOS7成功
7.可以在文件属性中,找到外观设置,将字体大小改的大一些
如果电脑上已经安装了Vmware或者VirtualBox,然后我把它们卸载了再重新安装,或者本地网络里没有Vmware的网卡信息,都会遇到连不上Linux的问题出现
解决办法: 卸载Vmware或者VirtualBox,要彻底将它们从电脑上清除,仅仅卸载的话是不能完全清除的,我们采用 CCleaner工具彻底清除 CCleaner工具下载:www.ccleaner.com 三个功能:轻松清理、自定义清理、注册表清理,这几个清理反复多执行几次,特别是注册表清理建议反复清理3次以上,直到不能扫描出任何东西为止,清理完毕之后,再重新安装Vmware即可恢复正常。
5.Linux文件系统结构介绍
Linxu系统和Windows系统的目录结构是非常不一样的,没有盘符的概念,Linux采用的是典型的树形文件目录结构,根目录为这个系统的顶级目录,如下图所示
5.1 /根目录
根目录为Linux系统的顶级目录
5.2 /bin目录
该目录存放的都是可执行的二进制文件,/bin目录下存放的就是我们经常使用的Linux命令
5.3 /boot目录
该目录存放的是启动Linux时的一些核心文件,具体包含一些镜像文件和链接文件,这个目录非常重要,如果遭到破坏,系统将无法启动
5.4 /dev目录
此目录包含所有的设备文件,该目录下存放Linux的外部设备,Linux中的设备也是以文件的形式存在
| 文件名 | 备注 |
|---|---|
| fd* | 代表软盘设备 |
| audio* | 代表声卡设备 |
| hd* | 代表IDE硬盘设备 |
| sd* | 代表SCSI设备,类似U盘 |
| lp* | 代表并行串口 |
| pty* | 代表网络中登录的远程终端设备 |
| ram* | 代表系统内存 |
| tty* | 代表Linux上的虚拟控制台 |
| ttyS* | 代表串行端口 |
| console | 代表系统控制台,也就是桌面控制台,可以直接连接到显示器 |
| null | 输出空设备 |
5.5 /etc目录
这个目录主要用于存放系统管理相关的配置文件以及子目录
| 文件名 | 备注 |
|---|---|
| psswd | 用户库文件,每个用户的用户名,UID,GID和工作目录等都存放在此文件中 |
| shadow | 存放用户密码的文件,每个用户的密码加密后都放入此文件 |
| group | 主要存储用户组信息 |
| fstab | 系统开机启动自动挂载分区列表,需要设置开启自动挂载的分区,都可以在此文件中加入 |
| systemd | 用来完成整个系统的基本初始化配置 |
| hosts | 设定用户自己的IP与名字的对应表 |
| resolv.conf | 客户端DNS配置文件 |
| systemd/system/*.wants | 此目录包含所有服务启动脚本,开机时将自动启动这些服务 |
| X11 | X-Window的配置文件 |
| rsyslog.conf | 系统日志输出配置文件 |
| crontab | 系统级别的守护进程配置文件 |
| sysctl.conf | 系统内核参数配置文件 |
| services | 定义系统服务与端口的对应关系 |
5.6 /home目录
该目录是系统中每个用户的工作目录,在Linux中每个用户都有自己的一个目录,而该目录一般是由用户的账号命名的
5.7 /lib目录
该目录中存放的是共享程序库和映像文件,可以供很多程序使用的,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
5.8 /media目录
Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下
5.9 /mnt目录
Linux系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容
5.10 /opt目录
该目录是给Linux额外安装软件所存放的目录,比如安装一个MySQL数据库则就可以放到这个目录下,默认为空。
5.11 /root目录
该目录是Linux超级用户root的默认主目录,一般用户没有进入这个目录的权限
5.12 /sbin目录
/sbin目录和/bin目录差不多,该目录存放的都是可执行的二进制文件,不同的是,该目录的文件是只有超级用户才能执行的命令
5.13 /srv目录
该目录存放一些服务启动之后需要提取的数据
5.14 /tmp目录
该目录为临时文件目录,主要用于存放临时文件
5.15 /usr目录
此目录主要用于存放应用程序和文件,如果在系统安装的时候选择了很多软件包,那么这些软件包默认会安装到此目录下
| 文件名 | 备注 |
|---|---|
| lib64 | 64位操作系统中的函数库目录 |
| src | 该目录包含所有程序的源代码 |
| bin | 使用者可以执行二进制文件目录 |
| local | 该目录存放本地安装的软件和其他文件 |
| lib | 32位操作系统使用的函数库目录 |
| sbin | 该目录存放系统管理员才能执行的指令 |
| include | 此目录包含C语言的头文件 |
| share | 该目录存放共享的文件和数据库 |
5.16 /var目录
此目录主要用于存放系统运行以及软件运行的日志信息
| 文件名 | 备注 |
|---|---|
| log | 该目录存放各种应用程序的日志文件,这里的文件是经常变动的,因此需要定期清理 |
| lib | 该目录存放系统正常运行时需要改变的库文件 |
| spool | 该目录是mail,new,打印机队列和其他队列输入输出的缓冲目录 |
| tmp | 该目录允许比/tmp存放更大的文件 |
| lock | 该目录存放被锁定的文件 |
| local | 该目录存放/usr/local中所安装程序的可变数据 |
| account | 该目录存放已经格式化的man页 |
| run | 该目录包含到下次系统启动前的系统信息 |
5.17 /proc目录
此目录是一个虚拟目录,目录中的信息都是内存的映射,通过这个虚拟的内存目录可以和内核内部数据结构进行交互,这个目录存在于内存中
| 文件名 | 备注 |
|---|---|
| cpuinfo | 关于系统cpu的详细信息 |
| meminfo | 内存信息,包括物理内存和虚拟内存 |
| filesystems | 当前系统支持的文件系统类型 |
| devices | 内核中的设备驱动程序列表 |
| net | 网络使用协议以及状态信息 |
| dma | 当前使用的dma通道 |
| ioports | 当前使用的I/O端口 |
| modules | 当前系统加载的内核模块信息 |
| stat | 系统的各种状态信息 |
| uptime | 系统总的启动时间和空闲时间,以秒为单位 |
| version | 内核版本信息 |
| loadavg | 系统平均负载 |
| kcore | 系统物理内存的映像 |
| kmsg | 内核输出信息 |
5.18 /run目录
该目录是外在设备的自动挂载点目录,还有就是程序或服务启动后,运行的PID存放在该目录下
5.19 /sys目录
内核中的文件系统 sysfs
5.20 /lost+found目录
该目录用于保存丢失的文件,不恰到的关机操作和磁盘错误均会导致文件丢失,这些会丢失的文件会临时存放在这个目录下。一般这个目录不会直接显示在系统中,只有出现以上情况,才会生成该目录
6. Shell介绍
用户在操作系统上完成的所有任务都是通过Shell与Linux内核交互来实现的,Shell本身是一个以C语言编写的,是用户和操作系统内核之间通信的桥梁,Shell是一种命令解析程序,又是一个强大的脚本语言。
为了加快命令的运行,Shell中定义了一些内置命令,当用户登录系统后,Shell以及内置命令就被系统载入到内存,并且一直运行,直到用户退出系统为止,除了内置命令Linux中还有许多可执行的文件,这些命令文件是在用户调用时,才会被装载。
当用户进入系统后,如果登录字符界面,将会出现Shell命令提示符,‘#’代表登录的用户是超级用户,‘$’代表登录到系统的是普通用户。
当用户输入命令的时候,Shell会先检测是否是内置命令,如果是就通过Shell内部的解释器将命令解释为系统调用,然后交给内核执行。如果不是内置命令,那么Shell会按照用户给出的路径或系统环境变量在硬盘寻找对应的命令文件,然后调入内存,再解释为系统调用,交给内核执行。
6.1 Shell的命令格式
-
Shell命令的一般格式为:
command [options] [arguments]commad:表示命令的名称,options:表示命令的选项,arguments:表示命令的参数,我们一般把上诉格式的字符串称为命令行 -
在命令行中,选项是包含一个或多个字母的代码,主要用于改变命令的执行方式,在选项前面有一个“-”符号,用于区别参数,例如:
#当ls命令加上-a选项后,列出当前目录下的所有文件,包含隐藏文件 ls -a -
一般命令有很多选项,我们可以在“-”后面把所有的选项都列出来,例如:
#列出当前目录下的所有文件,包含隐藏文件以及文件明细 ls -al -
很多命令都可以接受参数,参数就是在选项后面紧跟的一个或多个字符串,例如:
#表示显示/etc目录下的所有文件明细 ls -al /etc -
特殊情况下,有些命令可以不带参数,例如
ls命令,而且有些必须带参数,当参数不够时,Shell就会给出错误提示,例如:mv命令,至少需要两个参数 -
在Shell中的一个命令行可以输入多个命令,用
;分号将各个命令分开,例如:#查看当前目录下所有文件明细以及查看当前所在的目录路径 ls -al;pwd -
在Shell中也可以在多行中输入一个命令,用``将一个命令持续到下一行,例如:
#查看/etc目录下的所有文件明细 ls -al \ /etc
6.2 Shell的通配符
-
通配符主要是为了方便用户对文件或目录的描述,常用的通配符有
*,?,[] -
*--匹配任意一个或多个字符,例如:#列出当前目录中所有以 “.cfg”结尾的文件 ls *.cfg #列出/etc目录下所有子目录有".conf"结尾的文件,在/etc目录下的文件不算 ls -al /etc/*/*.conf -
?--匹配任意单一的字符,例如:#列出当前目录下以an开头,随后一个字母是任意字符,并以".txt"结尾的文件 ls ab?.txt #列出当前目录下以ab开头,随后两个字母是任意字符,接着以".txt"结尾的文件 ls ab??.txt -
[]--匹配任何在方括号内的单字符,例如:#列出/dev目录下以sda开头,第4个字符是12345的所有文件 ls /dev/sda[12345] #跟上面的含义一样 ls /dev/sda[1-5] -
组合使用通配符,例如:
#列出当前目录下以数字开头,随后一个是任意字符,接着以“.conf”结尾的所有文件 ls [0-9]?.conf
6.3 Shell的重定向
-
Linux系统默认将用户的键盘设为默认的标准输入,将显示器设为标准输出和错误输出,所谓的重定向,就是将输入重定向,输出重定向,错误输出重定向
-
输入重定向,输入重定向用于改变命令的输入源,利用输入重定向就可以将一个文件的内容作为命令输入,而不从键盘输入, 用于输入重定向的操作符有
<和<<,例如:#这里用wc命令统计输入给他的文件/etc/shadow的行数,单词数和字符数 wc </etc/shadow #这里表示将aa作为一堆分隔号,读取aa分隔号之间的所有内容作为输入,直到出现另一个aa分割号结束,然后将内容送给wc命令处理 wc << aa abcd bb aa -
输出重定向,输出重定向是将命令的输出结果不在显示器上显示,而是输出到一个指定的文件中,用于输出重定向的操作符有
>和>>,例如:#使用ps -ef输出系统运行进程信息全部输入到ps.txt文件中显示,而不是输出到屏幕 ps -ef > ps.txt #将file1,file2,file3的内容全部输出到file文件中,并查看如果“>”后面指定的文件不存在,Shell就会自动创建一个,如果存在,则会覆盖原来的内容,如果想内容不被覆盖,可以使用“>>”符号,来进行追加操作,而非覆盖操作 more file1 file2 file3 >file -
错误重定向,和输出重定向一样,可以使用
2>和2>>实现错误的输出重定向,例如:#解压text.tar.gz文件,如果是个损坏文件,则把错误信息输出到error.txt中 tar -zxvf text.tar.gz 2> error.txt
6.4 Shell的管道
-
管道可以把很多命令连接起来,可以把第1个命令的输出当做第2个命令的输入,第2个命令的输出当做第3个命令的输入 通过
|管道符号来建立管道连接,例如:#将/etc目录以及子目录下的所有文件分屏显示 ls -al /etc/* | more #查看正在运行的tomcat进程 ps -ef | grep tomcat
6.5 Shell中的引用
-
在命令行中有很多特殊字符,这些字符本身就具有特殊含义,如果在Shell参数中使用它们,就会出现问题,所以采用引用的技术 来忽略这些字符的特殊含义
-
转义字符
,如果将放到特殊字符前面,Shell就忽略这些特殊字符的原有含义,当做普通字符处理,例如:#将abc?*重命名问abc mv abc?* abc -
单引号
'',如果将字符串放到一对单引号之间,那么字符串中所有字符的特殊含义将被忽略,例如:#这两者的含义是等同的 mv abc?* abc mv 'abc?*' abc -
双引号
"",双引号的引用与单引号基本相当,但是有一些特殊字符即使用双引号括起来,也仍然保留自己的特殊含义,例如:"","'"
6.6 Shell中的自动补全命令行
-
自动补全命令是一个简单而且实用的功能,自动补全命令行也就是输入命令时不必把命令输入全,Shell就能智能的判断这个用户 所要输入的命令,当用户输入某个命令的一部分后,按
Tab键,Shell就会根据系统环境变量信息提示出与用户输入命令相似的所有命令和文件,例如:#<按Tab键> 就会显示出 跟/s相关的目录 cd /s #<按Tab键> 就会显示出 跟if相关的命令和文件 if
7. 系统管理与维护命令
7.1 ls命令
ls命令显示指定工作目录下的内容命令格式:ls [选项] [路径或文件]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示指定目录下的所有文件以及子目录,包含隐藏文件 |
| -d | 只显示目录列表,不显示文件 |
| -l | 除文件名称外,同时将文件或子目录的权限,使用者和大小等信息列出 |
| -s | 在每个文件名后输出该文件的大小 |
| -k | 以k字节的形式表示文件的大小 |
| -u | 以文件上次被访问的时间排序 |
| -t | 以时间排序 |
| -o | 显示除组信息外的详细信息 |
| -x | 按列输出,横向排序 |
| -r | 对目录反向排序 |
| -q | 用“?”代替不可输出的字符 |
| -m | 横向输出文件名,并以“,”作为分隔符 |
| -S | 以文件大小排序 |
| -R | 列出所有子目录下的文件 |
| -pF | 在每个文件名后附上一个字符以说明该文件的类型 |
| -C | 按列输出,纵向排序 |
| -R | 列出所有子目录下的文件 |
| -Q | 把输出的文件名用双引号括起来 |
使用举例:
#列出/home目录下文件及其子目录详情
ls -l /home
#列出当前目录下所有文件详情(包含隐藏文件)
ls -al
7.2 pwd命令
pwd命令显示当前工作目录(绝对路径),命令格式:pwd
7.3 cd命令
cd命令改变当前工作目录,命令格式:cd [目录名]
目录名说明:
| 目录名 | 说明 |
|---|---|
| cd[目录] | 切换到有目录名指定的目录下 |
| cd 或者cd ~ | 返回当前用户的默认工作目录 |
| cd ~[用户名] | 返回指定用户的工作目录下 |
| cd ..或cd ../ | 返回上级工作目录 |
| cd / | 返回到根目录 |
使用举例:
#进入/usr/bin目录
cd /usr/bin
#返回到上一级目录
cd ..
#进入根目录
cd /
#进入到当前用户的工作目录
cd
7.4 date命令
date命令显示或者修改系统时间与日期,超级用户可以修改时间,一般用户只能显示时间,命令格式:date [选项] 显示时间格式(以+开头,后面接时间格式)
选项说明:
| 选项 | 说明 |
|---|---|
| -s | 设置系统时间 |
| -d | 显示描述的日期 |
时间显示格式:
| 选项 | 说明 |
|---|---|
| %H | 显示小时,表示范围00~23 |
| %I | 显示小时,表示范围01~12 |
| %k | 显示小时,表示范围00~23 |
| %l | 显示小时,表示范围01~12 |
| %M | 显示分钟,表示范围00~59 |
| %S | 显示秒钟,表示范围00~59 |
| %p | 显示是AM(上午),还是PM(下午) |
| %r | 显示时间,格式为hh:mm:ss AM或PM |
| %T | 显示时间,格式为hh:mm:ss |
| %x | 显示年份和日期,格式为mm/dd/yyyy |
| %X | 显示时间格式,相当于%H:%M:%S的组合 |
| %a | 显示星期几 |
| %b或%B | 显示月份,%b是月的简称,%B是显示月的全称 |
| %m | 显示月份,表示格式为从01~12 |
| %Z | 显示时区 |
| %d | 显示一个月的第几天 |
| %D | 显示年份和月份,格式为mm/dd/yy |
| %Y或%y | 显示年份 |
| %c | 显示日期和时间格式,相当于“%a%d%b%Y%r%Z“的组合 |
使用举例:
#用指定的格式显示时间和日期
date +%x%X
#修改系统时间
date -s "2022-07-05 23:08:00"
7.5 passwd命令
passwd命令用于设置用户密码,命令格式:passwd [用户名]
使用举例:
#普通用户要修改自己的密码,根据提示连续输入两次密码即可
passwd
#超级用户root修改某个用户的密码时
passwd [用户名]
7.6 su命令
su命令主要用于改变用户身份,命令格式:su [选项] [用户名]
选项说明:
| 选项 | 说明 |
|---|---|
| - | 加载相应用户下的环境变量 |
| -l | 使目前的Shell成为改变身份后用户默认的Shell |
| -c | 改变身份运行一个指令后就结束 |
| -m | 改变用户身份,但是不改变环境变量 |
使用举例:
#普通用户要切换为超级用户,可执行如下命令
su -
#在普通用户test下切换超级用户root并执行一个ls命令就结束
su -c ls
7.7 clear命令
clear命令用来清除屏幕信息,命令格式:clear
7.8 man命令
man命令用来显示指定命令的帮助信息,命令格式:man [命令名称]
使用举例:
#需要得到ls命令的帮助信息
man ls
7.9 who命令
who命令显示目前登录到系统的用户,命令格式:who [选项] [file]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 列出所有信息,相当于所有选项 |
| -b | 列出系统最近启动的日期 |
| -l | 列出所有可登录的终端信息 |
| -m | 仅列出关于当前终端的信息 |
| -q | 列出在本地系统上的用户和用户数的清单 |
| -r | 显示当前系统的运行级别 |
| -s | 仅显示名称、终端和时间字段信息,这是who的默认输出 |
| -u | 显示当前每个用户的用户名、登录终端、登录时间、终端活动和进程标识 |
| -w | 显示tty终端的状态,‘+’表示对任何人可写,‘-’表示仅对root用户或所有者可写,‘?’表示遇到终端故障 |
who命令的输出格式:名称 [状态] 终端 时间 [活动] [进程标识](主机名)
| 信息名 | 说明 |
|---|---|
| 名称 | 用户的登录名 |
| 状态 | 类似于pts/1、pts/2等,此终端标识在/dev目录中可以找到 |
| 时间 | 用户登录系统的时间 |
| 活动 | 某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是个"."表示一分钟内还在进行终端活动,如果终端保持静止的时间超过24小时或者系统重启以来还没被使用过,那么标记为old |
| 进程标识 | 用户登录Shell的进程id |
| 主机名 | 登录到Linux系统上的客户端机器标识 |
使用举例:
#查询系统处于什么运行级别
who -r
#显示系统最近启动日期,以及当前每个用户的登录详情、终端状态
who -buw
7.10 whoami命令
whoami 命令显示当前登录的是谁
7.11 w命令
w命令显示登录到系统的用户信息,命令格式:w [选项] [用户]
选项说明:
| 选项 | 说明 |
|---|---|
| -h | 不显示输出信息的标题 |
| -i | 用长格式输出 |
| -s | 用短格式输出 |
| -V | 显示版本信息 |
使用举例:
#显示当前用户登录信息
w
7.12 uname命令
uname命令用来显示操作系统相关信息,命令格式:uname [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示操作系统全部信息 |
| -m | 显示系统CPU类型,是32位还是64位 |
| -n | 显示操作系统的主机名 |
| -s | 显示操作系统类型 |
| -r | 显示操作系统内核版本 |
使用举例:
#显示的顺序为操作系统名+主机名+内核版本
uname -a
7.13 uptime命令
uptime命令输出系统任务队列信息,命令格式:uptime
使用举例:
#输出当前系统时间,系统开机到现在的运行时间,目前有多少用户在线和系统平均的负载
uptime
7.14 last命令
last命令列出目前与过去登入系统的用户相关信息,命令格式:last [选项] [-n 显示列数]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 把从何处登入系统的主机名称或IP地址显示在最后一行 |
| -R | 不显示登入系统的主机名称或IP地址 |
| -x | 显示系统关机、重新开机以及执行等级的改变等信息 |
| -n | 设置列出名单的显示列数 |
| -d | 将显示的IP地址转换成主机名称 |
使用举例:
#显示最近5条目前与过去登入系统的用户相关信息
last -n 5
7.15 dmesg命令
dmesg命令显示开机信息,命令格式:dmesg [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -c | 显示开机信息后,清楚ring buffer信息 |
| -s | 设置缓冲区大小,默认设置为8192 |
| -n | 设置记录信息的层级 |
使用举例:
#显示开机信息
dmesg
7.16 free命令
free命令显示系统内存状态,包括系统物理内存、虚拟内存、共享内存和系统缓存,命令格式:free [选项] [-s (间隔秒数)]
选项说明:
| 选项 | 说明 |
|---|---|
| -b | 以字节为单位显示内存使用情况 |
| -m | 以MB为单位显示内存使用情况 |
| -K | 以KB为单位显示内存使用情况 |
| -t | 显示内存总和列 |
| -s | 根据指定的间隔时间持续显示内存使用情况 |
| -o | 不显示系统缓冲区列 |
使用举例:
#以MB为单位显示系统内存状态
free -m
7.17 ps命令
ps命令显示系统进程在瞬间的运行状态,命令格式:ps [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示所有用户的进程,包含每个程序的完整路径 |
| -x | 显示所有系统程序,包括那些没有终端的程序 |
| -u | 显示使用者的名称和起始时间 |
| -f | 详细显示程序执行的路径群 |
| -c | 只显示进程的名称,不显示进程的完整路径 |
| -e | 将除内核进程以外的所有进程的信息写到标准输出 |
使用举例:
#要查看目前使用者的进程
ps
#pid是进程标识号
#tty是进程所属的终端控制台
#time是进程所使用的总cpu时间
#cmd是正在执行的命令行
#要查看系统所有进程
ps -ef
#查看系统所有的进程,并过滤出与tomcat有关的进程
ps -ef | grep tomcat
7.18 top命令
top命令提供了对系统处理器状态的实时监控,命令格式:top [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -d | 指定每两次屏幕信息刷新之间的时间间隔 |
| -i | 不显示闲置或者僵死的进程信息 |
| -c | 显示进程的整个命令路径,而不是只显示命令名称 |
| -s | 使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险 |
| -b | 分屏显示输出信息,结合‘-n’选项可以将屏幕信息输出到文档 |
| -n | top输出信息更新的次数,完成后将推出top命令 |
交互式命令:
| 选项 | 说明 |
|---|---|
| h或? | 显示帮助信息,给出交互式命令的一些说明 |
| k | 终止一个进程,系统将提示用户输入一个需要终止的进程PID |
| i | 忽略闲置进程和僵死进程,这是一个开关式的命令 |
| s | 改变top输出信息两次刷新之间的时间,单位是秒 |
| o | 改变top输出信息中显示项的顺序,按a |
| f | 从当前显示列表中添加或删除项,按f后就会显示列表,按a~z键即可显示或隐藏对应的列,最后按Enter键确定 |
| m | 切换显示内存信息 |
| t | 切换显示进程和CPU状态信息 |
| r | 重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值,输入一个正值将使优先级降低,反之则升高,默认值是10 |
| l | 切换显示平均负载和启动时间信息 |
| q | 退出top显示 |
| c | 切换显示完整命令行和命令名称信息 |
| M | 根据驻留内存大小进行排序输出 |
| P | 根据CPU使用百分比大小进行排序输出 |
| T | 根据时间/累计时间进行排序输出 |
| S | 切换到累计模式 |
| W | 将当前top设置写入~/.toprc文件中 |
使用举例:
#要查看当前系统的进程
top
-
top的输出可以分为统计信息区和进程信息区 统计信息区: 第1行为任务队列信息 16:40:34表示当前系统时间 up 40min:表示系统已经运行了40分钟 1user:表示当前登录系统的用户数 load average:0.07,0.04,0.05表示系统平均负载,3个数值分别代表1分钟,5分钟,15分钟前到现在的平均负载
-
第2行和第3行分别为进程和CPU信息 Tasks:141total:进程总数 1 running:正在运行的进程数 140 sleeping:处于休眠状态的进程数 0 stopped:停止的进程数 0 zombie:僵死的进程数 Cpu(s):0.0 us:表示用户进程占用CPU的百分比 0.3%sy:系统进程占用CPU的百分比 0.0%ni:用户进程空间内改变过优先级的进程占用CPU的百分比 100.0%id:空闲CPU占用的百分比 0,0%wa:等待输入、输出的进程占用CPU的百分比
-
最后两行输出的是内存信息: Mem:995896 total 系统的物理内存大小 519968 free:目前空余的内存大小 225152: used:目前使用的物理内存大小 25104: buff/cache:目前用作内核缓冲区的内存大小 Swap::7999484 total 交换分区大小 7999484 free:空闲的交换分区大小 0 used:已经使用的交换分区大小 556864 avail Mem:缓存大小
-
进程信息区: PID:进程标识 USER:进程所有者的用户名 PR:进程优先级 NI:nice值,负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存总量,单位KB RES:进程使用的、未被换出的物理内存大小,单位KB SHR:共享内存大小,单位KB S:进程状态,D表示不可终端的睡眠状态,R表示运行状态,S表示睡眠状态,T表示停止状态,Z表示僵死的进程 %CPU:CPU的占用率 %MEM:进程占用的物理内存百分比 TIME+:进程总计使用的CPU时间,单位1/100秒 COMMAND:正在运行的命令或者命令路径
7.19 kill命令
kill命令用于杀掉进程,命令格式:kill pid
使用举例:
#强制杀掉进程
kill -9 pid
#让线程安全退出后再杀掉
kill -7 pid
7.20 echo命令
echo命令用于输出文本,命令格式:echo [选项] [String]
使用举例:
#显示当前语言环境
echo $LANG
#在控制台输出Linux字符串
echo Linux
#输出Linux字符串,并重定向到a.txt文件中
echo Linux >> a.txt
7.21 crontab命令
crontab命令,用于Linux系统下的定时任务命令,命令格式:crontab [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -e | 编辑创建定时任务 |
| -l | 查看定时任务 |
| -r | 删除定时任务 |
使用举例:
#创建一个定时任务,每一分钟向文件abc.txt中输出一句"hello world"
crontab -e
#时间字段说明:minute hour day month week
*/1 * * * * echo "hello world" >> abc.txt
#查看当前定时任务
crontab -l
#删除定时任务
crontab -r
#创建一个定时任务,每一分钟向阿里云时钟同步服务器的时间
crontab -e
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com
7.22 history命令
history命令,用于查看用户的操作命令历史
7.23 ulimit命令
ulimit命令用于显示系统资源限制的信息,命令格式 ulimit [选项] 选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示目前资源限制的设定 |
| -c <core文件上限> | 设定core文件的最大值,单位为区块 |
| -d <数据节区大小> | 程序数据节区的最大值,单位为KB |
| -f <文件大小> | Shell所能建立的最大文件,单位为区块 |
| -H | 设定资源的硬性限制,也就是管理员所设下的限制 |
| -m <内存大小> | 指定可使用内存的上限,单位为KB |
| -n <文件数目> | 指定同一时间最多可开启的文件数 |
| -p <缓冲区大小> | 指定管道缓冲区的大小,单位512字节 |
| -s <堆叠大小> | 指定堆叠的上限,单位为KB |
| -S | 设定资源的弹性限制 |
| -t <CPU时间> | 指定CPU使用时间的上限,单位为秒 |
| -u <程序数目> | 用户最多可开启的程序数目 |
| -v <虚拟内存大小> | 指定可使用的虚拟内存上限,单位为KB |
使用举例:
#如果Linux服务器是一个静态资源服务器,有时候会出现too much file这样的错误,我们需要修改一下同一时间最多可以打开的文件数
ulimit -n 65535
8.系统服务管理命令
8.1 shutdown命令
shutdown命令用于关机操作,命令格式:shutdown [参数名称] [-t 秒数] 时间 [警告信息]
选项说明:
| 选项 | 说明 |
|---|---|
| -f | 重新启动时不执行fsck |
| -F | 重新启动时执行fasc |
| -k | 只是发送信息给所有用户,但并不会真正的关机 |
| -n | 不调用init程序关机,而是由shutdown自己进行 |
| -r | shutdown之后重新启动系统 |
| -c | 取消一个之前的shutdown命令 |
| -t<秒数> | 发送警告信息和关机信号之间要延迟多少秒 |
| [时间] | 设置多久时间后执行shutdown命令,hh:mm 或 +m两种形式 |
| [警告信息] | 要传送给所有登录用户的信息 |
使用举例:
#要立即关机重启
shutdown -r now
#要立即关机
shutdown -h now
#设定5分钟后关机,同时发送警告信息
shutdown +5 "系统将在5分钟后重启"
8.2 halt命令
halt命令是最简单的关机命令,命令格式:halt [-finp]
选项说明:
| 选项 | 说明 |
|---|---|
| -f | 不管当前系统处于何种运行级别,都不调用shutdown而强制关机 |
| -i | 关机之前,关掉所有的网络接口 |
| -n | halt执行时,不调用系统指令sync |
| -p | 关机时调用poweroff,也就是关机的同时关闭电源,此选项为默认选项 |
使用举例:
#立即关机,相当于shutdown -h的组合
halt
8.3 reboot命令
reboot命令执行过程基本与halt相似,reboot是用于系统重启
8.4 init命令
init命令主要用于系统不同运行级别之间的切换,切换工作是立即完成的,例如:init0就是将系统关机,init6就是重启
CentsOS的运行级别定义为:0表示关机,1表示单用户模式,6表示重启,2表示多用户模式,不支出文件共享,3表示完全多用户模式,支持文件共享,默认登录到系统字符界面,4表示基本不用的用户模式,5表示完全多用户模式,支出文件共享,默认登录到图形界面
9.文件管理与编辑命令
9.1 mkdir命令
mkdir命令用于创建一个目录,命令格式:mkdir [选项] 目录名
选项说明:
| 选项 | 说明 |
|---|---|
| -m | 对新建目录设置存取权限 |
| -p | 可以指定一个路径名称 |
使用举例:
#在当前目录下,创建test1目录
mkdir test1
#在/home下创建user1目录,同时在user1下创建user2目录
mkdir -p /home/user1/user2
9.2 touch命令
touch命令用来改变指定文件的访问时间和修改时间,命令格式:touch [选项] 设定时间 文件
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 改变文件的访问时间为系统当前时间,无需设置时间选项 |
| -m | 改变文件的修改时间为系统当前时间,无需设置时间选项 |
| -c | 如果文件不存在,不创建也不提示 |
| -d | 使用指定的日期或时间 |
| -r<参考文件或目录> | 把指定文件或目录的日期、时间都设置成参考的文件或目录 |
使用举例:
#创建一个文件
touch centos.txt
#改变文件的访问时间为系统当前时间,可以通过stat centos.txt来查看文件状态
touch -a centos.txt
#改变文件修改时间为当前系统时间
touch -m centos.txt
#将文件的修改时间设定为2019年4月24日10点43分
touch -d "20190424 10:43" centos.txt
9.3 more命令
如果一个文本文件比较长,一个屏幕无法显示完毕,就需要使用more命令,more命令读取文本文件时每次显示一个屏,按Enter键会接着再显示文本的一行,命令格式:more [选项] 文件名
选项说明:
| 选项 | 说明 |
|---|---|
| -d | 在屏幕底部more提示符后显示友好信息,此信息是有关使用哪些键继续,哪些键退出,哪些键提供more命令帮助 |
| -s | 将输出文件中的多个空行减少为只有一个空行输出 |
| -p | 先清除显示屏以前的信息,再显示文本信息 |
| -c | 显示文本时,每屏显示都清除屏幕之前的信息,然后从最顶端显示出来 |
使用举例:
#要以分页的方式显示/etc/man_db.conf文件的内容
more /etc/man_db.conf
#要显示/etc/man_db.conf文件的内容,同时清除屏幕
more -c /etc/man_db.conf
9.4 cat命令
cat命令用来将文件的内容输出到标准输出,同时cat还可以用于连接合并文件,命令格式:cat [选项] 文件名 或者 cat 文件1 文件2 >文件3
选项说明:
| 选项 | 说明 |
|---|---|
| -A | 将文件中的制表符显示为‘^I’,同时再每行的末尾显示一个$符 |
| -b | 将文件中的所有非空行按顺序编号,编号从1开始 |
使用举例:
#查看/etc/man_db.conf文件的内容,输出到屏幕
cat /etc/man_db.conf
#查看/etc/man_db.conf文件的内容,同时将文件中的制表符显示为'^I',并对非空行编号输出
cat -Ab /etc/man_db.conf
#以下命令将文件file1.txt和file2.txt的内容合并后输出到文件file3.txt
cat file1.txt file2.txt > file3.txt
9.5 less命令
如果一个文本文件比较长,一个屏幕无法显示完毕,就需要使用less命令,逐屏输出(按PgUp、PgDn上下翻页),到结束的时候退出按 q 命令格式:less 文件名
使用举例:
#要以分页的方式显示/etc/man_db.conf文件的内容
less /etc/man_db.conf
9.6 head命令
如果一个文本文件比较长,可以只显示头几行内容,使用head命令,命令格式:head [选项] 文件名
选项说明:
| 选项 | 说明 |
|---|---|
| -n | 显示从头开始,多少行的文本内容,如果不使用该选项,默认为10行 |
使用举例:
#显示头50行的/etc/man_db.conf文件内容
head -n 50 /etc/man_db.conf
9.7 tail命令
如果一个文本文件比较长,可以只显示尾几行内容,使用tail命令,命令格式:tail [选项] 文件名
选项说明:
| 选项 | 说明 |
|---|---|
| -f | 循环读取文件末尾的内容,常用于查阅正在改变的日志文件 |
举例:
#动态显示文件abc.txt末尾100行的文件内容
tail -f 100 abc.txt
9.8 diff命令
diff命令用来比较文件的差异,命令格式:diff [选项] 文件1 文件2
选项说明:
| 选项 | 说明 |
|---|---|
| -c | 显示全部内容,并标出不同之处 |
| -b | 忽略行尾的空格,同时字符串中的一个或多个空格都将视为相同 |
| -r | 当文件1和文件2为目录时,会比较子目录中的文件 |
| -s | 当两个文件相同时,显示文件的相同信息 |
使用举例:
#比较文件file1和file2的不同之处
diff file1.txt file2.txt
9.9 grep命令
grep命令是文本过滤工具,命令格式:grep [选项] 需要查找的字符串 文件名
选项说明:
| 选项 | 说明 |
|---|---|
| -c | 只显示符合条件的行数,而不显示每行的具体信息 |
| -f file | 事先将要搜索的样式写入一个文件中,每行一个样式,然后以这个文件作为条件进行搜索 |
| -i | 搜索时忽略大小写 |
| -n | 在搜索结果中显示行号 |
使用举例:
#列出abc.txt文件中含有hello的字符串的行
grep hello abc.txt
#列出abc.txt文件中含有HELLO字符串的行,忽略大小写,并标识出每行的具体行号
grep -ni HELLO abc.txt
#查看当前系统进程,并过滤出含有tomcat的进程
ps -ef | grep tomcat
9.10 rm命令
rm命令用来删除某个目录及其下所有文件和目录,命令格式:rm [选项] 文件或目录
选项说明:
| 选项 | 说明 |
|---|---|
| -r | 告诉rm将选项中列出的全部目录及子目录还有文件递归删除,如果在选项中不指定-r选项,将不能删除目录 |
| -f | 忽略不存在的问题,也不会给出提示 |
| -i | 交互式删除,即在删除前进行确认 |
使用举例:
#在/home/目录下,删除user1及子目录和文件
rm -rf user1
#注意:要小心使用rm -rf组合,因为一旦文件删除,就不能被恢复了,Linux中没有windows的回收站机制,吃牢饭的操作:rm -rf /*
9.11 ln命令
ln命令用来再文件或目录之间创建链接,Linxu下的链接有两种,硬链接和符号链接(软链接) 硬链接:在Linux的文件系统中,保存在磁盘的所有类型文件会被分配一个编号,这个编号为inode号,多个文件指向同一个inode号是被允许的,这就是硬链接。允许一个文件拥有多个路径,防止误删重要文件,只有最后一个路径被删除时,文件才会真正被删除 符号链接:也叫软链接,软链接类似于Windows中的快捷方式,因此软链接是一个指向真正的文件或目录位置的符号链接
命令格式:ln [选项] 源文件 目标链接名
选项说明:
| 选项 | 说明 |
|---|---|
| -f | 如果在目标位置存在与链接名相同的文件,这个文件将被删除 |
| -s | 进行软链接 |
| -d | 允许管理员硬链接自己的目录 |
| -b | 对将在链接时会被覆盖或删除的文件进行备份 |
使用举例:
#将/etc/inittab文件硬链接到/opt/backup目录下
ln /etc/inittab /opt/backup
#当前目录下有两个文件file1.txt和file2.txt,现在将file1.txt硬链接到当前目录下,取名为file2.txt,当前目录下因为存在同名文件file2.txt,如果使用-f选项就会删除file2.txt,因此我们在使用-b选项来先备份,备份后原file2.txt文件名就变为了file2.txt~
ln -b file1.txt file2.txt
#将/etc/inittab 文件符号链接到/opt下
ln -s /etc/inittab /opt
9.12 file命令
file命令用来显示文件类型,命令格式:file [选项] 文件名
选项说明:
| 选项 | 说明 |
|---|---|
| -b | 显示文件类型结果,不显示对应文件名称 |
| -L | 直接显示符号链接所指向文件的类型 |
| -z | 显示压缩文件的信息 |
| -i | 如果文件不是常规文件,则不进一步对文件类型进行分类 |
使用举例:
#显示abc.txt的文件类型,结果为ASCII文本文件
file abc.txt
#显示test1文件的类型,显示结果为目录
file test1
#显示/bin/sh文件的类型,结果为符号链接文件
file /bin/sh
9.13 cp命令
cp命令用来将给出的文件或者目录复制到另一个文件或目录中,命令格式:cp [选项] 源文件或目录 目标文件或目录
| 选项 | 说明 |
|---|---|
| -a | 在复制目录时使用,它保留所有的信息,包括文件的链接、文件的属性、并递归的复制目录 |
| -r | 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件,此时目标文件必须为一个目录名 |
| -d | 复制时保留链接,这样不会失去链接文件 |
| -p | 保留文件的修改时间和存取权限 |
| -i | 如果已经有相同文件名的目标文件,则提示用户是否覆盖 |
使用举例:
#将abc.txt复制到/home/test下
cp abc.txt /home/test
#将当前目录下的java文件夹和其子文件复制到/home/test下
cp -r java /home/test
#将当前目录下的所有文件复制到/tmp目录下,‘./*’表示当前目录下所有文件和目录
cp -r ./* /tmp
9.14 find命令
find命令用来在指定的路径下查找指定的文件,命令格式:find path-name [-options] [-print -exec -ok命令 {} ;]
path-name是查找的目录路径,可以使用通配符
-options是选项
-print是将搜索结果输出到标准输出
-exec是指对搜索出符合条件的文件执行所给出的Linux命令,而不询问用户是否需要执行该命令,格式就是
command {} ;,注意{}和``中间有个空格,并且命令的末尾必须以;结束
-ok是指的对搜索出符合条件的文件执行所给出的Linux命令,与-exec不同的是,它会询问用户收需要执行该命令
选项说明:
| 选项 | 说明 |
|---|---|
| -name'字符串' | 查找文件名匹配所给字符串的所有文件,字符串内可用通配符*,?,[] |
| -lname'字符串' | 查找文件名匹配所给出字符串的所有符号链接文件,字符串内可用通配符*,?,[] |
| -gid n | 查找属于id号为n的用户组的所有文件 |
| -uid n | 查找属于id号为n的用户的所有文件 |
| -empty | 查找大小为0的目录或文件 |
| -path‘字符串’ | 查找路径名匹配所给字符串的所有文件,字符串内可用通配符 |
| -group‘字符串’ | 查找属于用户组名为所给字符串的所有的文件 |
| -depth | 在查找文件时,首先查找当前目录下的文件,然后再查找其子目录下的文件 |
| -prune目录 | 指出搜索时不搜索的目录 |
| -size n | 查找文件长度为n块的文件,带有c时表示文件长度以字节计 |
| -user‘字符串’ | 查找属于用户名为所给字符串的所有的文件 |
| -mtime +n或-n | 按时间搜索,+n表示n天之前的,-n表示今天到n天前之间的 |
| -type文件类型 | 按指定文件类型搜索,文件类型包括b(块设备文件),c(字符设备文件),f(普通文件),l(符号链接),d(目录),p(管道),s(socket)文件 |
使用举例:
#在/etc目录下查找文件属于root用户的文件
find /etc -user "root" -print
#在当前目录及子目录下查找所有"*.txt"文件
find . -name "*.txt" -print
#在用户自己的根目录下查找文件名以一个数字开头,紧接着是一个小写字母,最后以".conf"结尾的文件
find ~ -name "[0-9][a-z]*.conf" -print
#查询当前目录下大小为0的普通文件,并列出他们的完整路径
find . -type f -size 0 -exec ls -al {} ;
#查找当前目录下修改时间在7天以前的普通文件,然后以交互方式删除
find . -type f -mtime +7 -ok rm {} ;
9.15 whereis命令
whereis 命令查找文件,主要用于程序名的搜索,命令格式:whereis [选项]
选项说明:如果不加选项,则返回所有信息
| 选项 | 说明 |
|---|---|
| -b | 只搜索二进制文件 |
| -m | 只搜索man说明文件 |
| -s | 只搜索源代码文件 |
使用举例:
#搜索跟java有关的二进制文件、说明文件、源代码文件
whereis java
9.16 which命令
which命令是指在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果,比如which mkdir
9.17 split命令
split命令用来分割文档,将一个文件分成数个,命令格式:split [选项] [input_file] [output_file]
选项说明:
| 选项 | 说明 |
|---|---|
| -b size | 指定分割出来的文件大小,size可加入单位,b代表512字节,k代表1kb,m代表1mb |
| -n | 这里“n”指定分割的每个文件长度,默认为1000行 |
| -d | 将split命令生成的文件序列以数字形式命名 |
| -a | 指定spilit命令生成的文件序列长度,默认长度为2 |
使用举例:
#将access_log文件进行分割,设定每个分割文件的大小为1MB
split -b 1M access_log access_log_bak
#将typroa.zip文件进行分割,指定每个文件大小为20MB,输出文件序列以数字形式显示,序列长度为3
split -b 20M -d -a3 typroa.zip typroa.zip_bak
9.18 mv命令
mv命令用来将文件或目录改名或将文件由一个目录移入到另一个目录中,命令格式:mv [选项] 源文件或目录 目标文件或目录
选项说明:
| 选项 | 说明 |
|---|---|
| -i | 交互式操作,在对已经存在的文件或目录覆盖时,系统会询问是否覆盖 |
| -f | 禁止交互式操作,在mv将要覆盖某个文件或目录时,不给任何提示,默认覆盖 |
使用举例:
#创建一个myDocument目录和一个Document文件,然后将Document文件移动到myDocument目录下,最后修改myDocument目录为myDocument_1
mkdir myDocument
touch Document
mv Document myDocument
mv myDocument myDocument_1
9.19 sort命令、uniq命令、wc命令
sort命令用于排序,一般是搭配管道符使用,例如:cat file | sort
uniq命令去除重复的行,一般搭配管道符使用,例如:cat file | sort | uniq
wc命令用于统计文件的行数、单词数、字符数,例如:cat file | wc,
使用举例:
#创建hello.log文件,并在每行依次输入文本Linux、Java、HTML、Linux
vi hello.log
Linux
Java
HTML
Linux
#查看hello.log文件,并按照字典排序
cat hello.log | sort
#查看hello.log文件,按照字典排序,并去重重复的行
cat hello.log | sort | uniq
#查看hello.log文件,并统计行数、单词数、字符数
cat hello.log | wc
10. 压缩与解压命令
10.1 zip/unzip命令
zip/unzip命令将一般的文件或目录进行压缩或解压,默认生成.zip为后缀的压缩包,命令格式:zip [选项] 压缩文件名 需要压缩的文档列表 unzip [选项] 压缩文件名
zip选项说明:
| 选项 | 说明 |
|---|---|
| -r | 递归压缩,将制定目录下的所有文件以及子目录全部压缩 |
| -d | 从压缩文件内删除指定的文件 |
| -i“文件列表” | 只压缩文件列表中的文件 |
| -x“文件列表” | 压缩时排除文件列表中指定的文件 |
| -u | 更新文件到压缩文件中 |
| -m | 将文件加入压缩文件压缩后,删除原始文件,即把文件移到压缩文件中 |
| -F | 尝试修复损坏的压缩文件 |
| -T | 检查压缩文件内的每个文件是否正确无误 |
| -压缩级别 | 压缩级别1~9之间的一个数字 |
unzip选项说明:
| 选项 | 说明 |
|---|---|
| -x“文件列表” | 解压文件,但不包含文件列表中指定的文件 |
| -t | 测试压缩文件有无损坏,并不解压 |
| -v | 查看压缩文件的详细信息,具体包括压缩文件中包含的文件大小,文件名和压缩比例等,并不解压 |
| -n | 解压时不覆盖已经存在的文件 |
| -o | 解压时覆盖已经存在的文件,并且不要求用户确认 |
| -d目录名 | 把压缩文件解压到指定目录下 |
使用举例:
#将/root目录下的所有文件以及目录进行压缩,设置压缩级别为最高,保存到文件/opt/root.zip
zip -9 /opt/root.zip /root/*
#将/root目录中所有文件以及目录压缩,除了"*.cfg"文件之外,保存文件/opt/root1.zip
zip -r /opt/root1.zip /root -x "*.cfg"
#将上面/opt/root.zip中的typroa.zip文件从压缩包中删除
zip /opt/root.zip -d root/typroa.zip
#修改/root/hello.log文件,希望把更改信息更新到/opt/root.zip包中
zip -u /opt/root.zip /root/hello.log
#进入/opt目录,将root.zip压缩文件全部解压到当前目录下
cd /opt
unzip root.zip
#将/opt/root.zip压缩文件全部解压到/root目录下,除了root/hello.log文件之外,并且在解压过程中出现相同的文件就直接覆盖,不要求用户确认
unzip -o /opt/root.zip -x root/hello.log -d /root
10.2 gzip/gunzip命令
gzip/gunzip命令将一般的文件进行压缩或者解压,压缩文件预设的扩展名为.gz,其实gunzip就是gzip的硬链接,因此无论是压缩或者解压都可以通过gzip来实现,命令格式:gzip [选项] 压缩(解压缩)的文档名
选项说明:
| 选项 | 说明 |
|---|---|
| -d | 对压缩的文件进行解压 |
| -r | 递归式压缩指定目录以及子目录下的所有文件 |
| -t | 检查压缩文档的完整性 |
| -v | 对于每个压缩和解压缩的文档,显示相应的文件名和压缩比 |
| -l | 显示压缩文件的压缩信息,显示字段为压缩文档大小,未压缩文档大小,压缩比例和未压缩文档名称 |
| -num | 用指定的数字num配置压缩比,“-1”或“-fast”表示最低压缩比,“-9”或“-best”表示最高压缩比,系统默认压缩比为6 |
使用举例:
#对root.zip文件进行gzip压缩,设置gzip的压缩级别为9
gzip -9 /opt/root.zip
#查看上述root.zip.gz文件的压缩信息
gzip -l /opt/root.zip.gz
#解压上诉root.zip.gz文件到当前目录
gzip -d /opt/root.zip.gz
或者
gunzip /opt/root.zip.gz
10.3 bzip2/bunzip2命令
bzip2/bunzip2命令对文件进行压缩与解压命令,此命令类似于gzip/gunzip命令,只能对文件进行压缩,对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以.bz2为后缀的压缩包,bunzip2其实是bzip2的符号链接,因此压缩或解压都可以通过bzip2来实现,命令格式:gzip [选项] 压缩(解压缩)的文件
| 选项 | 说明 |
|---|---|
| -d | 执行解压缩,此时选项后面跟要解压缩的文件 |
| -v | 压缩或解压文件时,显示详细信息 |
| -k | bzip2在压缩或解压缩后,会删除原始文件,若要保留原始文件,可以使用此选项 |
| -f | bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件,若要覆盖,就要使用此选项 |
| -t | 测试".bz2"压缩文件的完整性 |
| -压缩级别 | 压缩级别可以从1~9中选取,数字越大,压缩率越高 |
使用举例:
#将/opt目录下的root.zip,root1.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息
bzip2 -9vk /opt/root.zip /opt/root1.zip
10.4 tar命令
tar命令是Linux下经常使用的归档工具,对文件或者目录进行打包归档,归档成一个文件,但是并不进行压缩 命令格式:tar [主选项+辅助选项] 文件或目录
主选项说明:
| 选项 | 说明 |
|---|---|
| -c | 新建文件 |
| -r | 把要归档的文件追加到档案文件的末尾 |
| -t | 列出档案文件中已经归档的文件列表 |
| -x | 从打包的档案文件中还原出文件 |
| -u | 更新档案文件,用新建文件替换档案中的原始文件 |
辅助选项说明:
| 选项 | 说明 |
|---|---|
| -z | 调用gzip命令在文件打包的过程中压缩/解压文件 |
| -w | 在还原文件时,把所有文件的修改时间设定为现在时间 |
| -j | 调用bzip2命令在文件打包的过程中压缩/解压文件 |
| -Z | 调用compress命令过滤档案 |
| -f | "-f"选项后面紧跟档案文件的存储设备,默认是磁盘,需要指定档案文件名,注意-f选项之后不能再跟任何其他选项,也就是说,-f必须是tar命令的最后一个选项 |
| -v | 指定在创建归档文件过程中,显示各个归档文件的名称 |
| -p | 在文件归档的过程中,显示各个归档文件的名称 |
| -C"目录名" | 指定解压的目录 |
| -N “yyyy/mm/dd” | 在指定日期之后的文件才会打包到档案文件中 |
| --exclude file | 在打包过程中,不将指定file文件打包 |
使用举例:
#将/root目录下所有文件打包,并显示打包的详细文件,设置打包文件名为root.tar,同时保存文件到/opt目录下
tar -cvf /opt/root.tar /root/*
#将/root目录下的所有文件打包并压缩,然后显示打包的详细文件,设置打包文件名为root.tar.gz,同时保存文件到/opt目录下
tar -zcvf /opt/root.tar.gz /root/*
#查阅上面的/opt/root.tar.gz压缩包的内容
tar -ztvf /opt/root.tar.gz | more
#将/opt/root.tar.gz解压到当前目录下
tar -zxvf /opt/root.tar.gz
#将/opt/root.tar.gz解压到/usr/local目录下
tar -zxvf /opt/root.tar.gz -C /usr/local
11. 磁盘管理与维护命令
11.1 df命令
df 命令用来检查Linux系统的磁盘空间占用情况,命令格式:df [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -h | 以容易理解的格式输出文件系统分区占用情况,如32KB,120MB |
| -k | 以KB大小单位输出文件系统分区占用情况 |
| -m | 以MB大小为单位输出文件系统分区占用情况 |
| -a | 列出所有的文件系统分区,包含0大小的文件系统分区 |
| -i | 列出文件系统分区的inode信息 |
| -T | 显示磁盘分区的文件系统类型 |
使用举例:
#查看当前系统磁盘分区情况,并显示文件系统类型,人性化输出
df -hT
11.2 du命令
du命令用来显示文件或目录所占用的磁盘空间情况,命令格式:du [选项] 文件或目录
选项说明:
| 选项 | 说明 |
|---|---|
| -s | 显示文件或整个目录的大小,单位为KB |
| -b | 以字节为单位显示文件大小或者显示目录下所有文件的大小 |
| -sh | 以人性化的格式显示文件或目录大小,如300MB、1.2GB等 |
| -sm | 以MB为单位显示文件或者目录大小 |
使用举例:
#显示当前目录下所有文件的大小
du -sh ./*
#显示当前linux系统/etc目录的总大小
du -sh /etc
11.3 sync命令
sync命令用来强制把内存中的数据写回硬盘,以免数据的丢失,命令格式:sync
在Linux系统中,修改过的操作会缓存到内存中,不会马上写入硬盘,等待适当的时候再从内存写入磁盘,这样可以提高系统读写效率,Linux下默认每隔3秒系统自动执行一次sync操作,系统正常关机时也会执行sync操作,保证所有操作全部从内存写入磁盘。如果非法关机,系统内存信息无法及时同步到磁盘,就会造成数据丢失或损坏
11.4 mount/umount命令
mount/umount命令用来挂载以及卸载指定文件系统,命令格式:mount [选项] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [挂载点] umount [挂载点]
mount选项说明:
| 选项 | 说明 |
|---|---|
| -a | 加载文件/etc/fstab中指定的所有设备 |
| -n | 不将加载信息记录在/etc/mtab文件中 |
| -r | 以只读方式加载设备 |
| -w | 以可读写模式加载设备,属于mount默认设置 |
| -f | 不加载设备,仅查看mount的挂载状态 |
| -L<标签> | 标签其实就是磁盘分区标识的别名,标签可以随便起名,在linux下磁盘分区的设备名比较难记,利用标签代替设备名,简单易记 |
| -o<选项> | 指定加载文件系统时的选项 |
| async | 以非同步的方式执行文件系统输入、输出方式 |
| atime | 每次存取都更新inode的存取时间,默认设置 |
| auto | 必须在/etc/fstab文件中指定此选项 |
| dev | 可读文件系统上的字符或块设备 |
| exec | 可执行二进制文件 |
| noatime | 每次存取时不更新inode的存取时间 |
| noauto | 加入此选项,就无法使用-a选项来加载 |
| nodev | 不读取文件系统上的字符或块设备 |
| noexec | 无法执行二进制文件 |
| nosuid | 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位 |
| nouser | 使用户无法执行加载操作,默认设置 |
| iocharset=XXX | 指定mount分区时使用的字符集 |
| codepage=XXX | 指定mount分区时使用的内码表 |
| remount | 重新加载设备,通常用于改变设备的设置状态 |
| ro | 以只读模式加载 |
| rw | 以可读写模式加载 |
| suid | 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位 |
| sync | 以同步方式执行文件系统的输入、输出动作 |
| user | 可以让一般用户加载设备 |
| defaults | 使用默认选项,默认选项为 rw、suid、dev、exec、auto、anto、nouser、async |
| -t<文件系统类型> | 指定设备的文件系统类型 |
| ext3/ext2 | Linux目录的常用文件系统 |
| msdos | MS-DOS的FAT |
| vfat | Windows 95/98的VFAT |
| nfs | 网络文件系统 |
| iso9660 | CD-ROM光盘的标准文件系统 |
| ntfs | Windows NT的文件系统 |
| 设备名 | 硬盘分区在linux上的设备标识,类似于/dev/sda1、/dev/hda2等 |
| 挂载点 | Linux系统下指定的某个目录 |
使用举例:
#将U盘挂载到Linux系统下的/mnt目录中,可以进行读写
ls /dev/sd*
mount -o rw -t ntfs /dev/sdb5 /mnt
#在Linux下访问U盘需要通过挂载方式读取,这里的-o rw表示以读写模式访问,-t指定文件的类型为ntfs(U盘默认就是这个类型),后面为U盘的分区路径,/mnt表示挂载点,挂载成功后就可以通过/mnt目录访问镜像文件内容了
#有一些U盘的文件系统类型是FAT32,那么我们则需要把-t的参数改为vfat类型
mount -o rw -t vfat /dev/sdb5 /mnt
#卸载U盘,注意卸载U盘的时候不能在挂载的目录下,否则无法卸载
umount /mnt
错误情况:如果在挂载U盘的时候,出现如下图所示情况,代表我们的Linux系统缺少ntfs文件类型的支持,需要进行安装,在我提供的网盘资料里有ntfs-3g_ntfsprogs-2017.3.23.tgz的安装包,或自行搜索下载
#解压ntfs的压缩包
tar -zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz
#切换到解压后的目录中
cd ntfs-3g_ntfsprogs-2017.3.23
#初始化配置
./configure
#编译文件
make
#执行安装
make install
#再次执行挂载,注意如果安装了ntfs-3g支持,这里要把-t选项中的类型也一并更改为ntfs-3g
mount -o rw -t ntfs-3g /dev/sdb5 /mnt
12. 网络设置与维护命令
12.1 ifconfig命令
ifconfig命令用来配置网络或显示当前网络接口状态,它类似于windows下的ipconfig命令,命令格式:ifconfig [选项] [interface] [up|down|netmask|addr|broadcast]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示所有的网络接口信息,包括活动的和非活动的 |
| -s | 仅显示每个接口的摘要数据,是有关接口活动性的,每个接口显示一行信息 |
| -v | 如果某个网络接口出现错误,将返回错误信息,以帮助发现和处理故障 |
| interface | 网络接口名,在linux下的网络接口名类似于ens33、lo等,分别表示网卡和回环接口这个是可选项,如果不添加此选项,则显示系统中所有的网卡信息 |
| up | 激活一个网络接口 |
| down | 与up相反,使指定的网络接口无效 |
| netmask | 为一个指定的网络接口指定子网掩码 |
| addr | 这里的addr为网络接口指定的ip地址 |
| broadcast | 为指定的接口设置广播地址 |
使用举例:
#显示目前系统所有网络接口信息
ifconfig
#第一行:UP代表网卡开启状态,RUNNING代表网卡上的网线处于连接状态,MULTICAST代表支持组播,MTU:1500表示最大传输单位为1500字节
#第二行:依次显示网卡的IP地址、子网掩码和广播地址
##第三行:IPv6地址的配置信息
#第四行:ether后面表示硬件网卡的MAC地址,Ethernet表示连接类型为以太网
#第五、六行:显示网卡接收数据包的统计信息和接收错误的统计信息
#第七、八行:显示网卡发送数据包的统计信息和发送错误的统计信息
#在网卡ens33上配置一个新的IP地址192.168.177.130,子网掩码为255.255.255.0
ifconfig ens33:0 192.168.177.130 netmask 255.255.255.0
#此时用ifconfig命令查看,就可以看到两个网卡信息分别是ens33和ens33:0,如果此时还想在enp33上增加IP地址那么网卡的命名依次是ens33:1、enps33:2等
#将网卡ens33禁用后再启用
ifconfig ens33 down
ifconfig ens33 up
#注意:用ifconfig命令配置的网卡信息,再网卡重启或者机器重启后,所有配置就失效了,如果要让网卡配置永久生效,就需要修改网卡的配置文件了
12.2 netstat命令
netstat命令用来显示本机网络链接、运行端口和路由表等信息,命令格式:netstat [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -a | 显示本机所有连接和监听端口 |
| -n | 以网络IP地址的形式显示当前建立的有效连接和端口 |
| -r | 显示路由表信息 |
| -s | 显示按协议的统计信息 |
| -v | 显示当前有效连接 |
| -t | 显示所有TCP协议连接情况 |
| -u | 显示所有UDP协议连接情况 |
| -c<秒数> | 后面跟的秒数,表示每隔几秒就刷新显示一次 |
| -i | 显示自动配置接口的状态 |
| -l | 仅显示连接状态为LISTEN的服务的网络状态 |
| -p | 显示连接对用的PID与程序名 |
使用举例:
#显示当前系统的路由信息
netstat -rn
#显示当前系统中所有有效的TCP连接
netstat -an
#在上面的显示中,输出分为两部分,分别是TCP/IP网络部分和UNIX Socket部分
#Proto:连接协议的种类,主要是TCP/UDP协议
#Recv-Q:不是由程序连接而产生的字节数
#Send-Q:从远端主机传送而来的字节数
#Local Address:本地端的IP地址,可以是IP,也可以是主机名
#Foreigh Address:远程主机的IP与端口
#state:显示状态列,主要有以下几个状态
#LISTEN:一般用在服务的监听端口
#SYN_SENT:在发送连接请求后,等待对方对连接请求的的确认
#SYN_RECEIVED:收到一个连接请求后,等待对方对连接请求的确认
#TIME_WAIT:表示该连接已经中断,但套接字还在等待网络结束
#FIN_WAIT1:表示该套接字已经中断,而连接正在中断之中
#FIN_WAIT2:表示该连接已经中断,正在等待对方主机响应中断确认请求
#显示目前系统中已经启动的网络连接和对应的端口信息,我们一般使用此命令来查找主机上哪个程序占用哪个端口或者是否服务正常启动,正常监听端口
netstat -tlnp
12.3 ping命令
ping命令用于测试某个地址是否可以连通,命令格式:ping 主机名或IP地址
使用举例:
#查看百度是否可以连通
ping www.baidu.com
#查看是否能够访问Windows
ping 176.201.119.44
12.4 wget命令
wget命令用来从网络上下载某个软件或是抓取某个网页内容,这个命令对于能够直接连接到互联网的Linux系统作用非常大,命令格式:wget [需要下载软件的网址]
使用举例:
#下载一个tomcat9.0.64版本
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.64/bin/apache-tomcat-9.0.64.tar.gz
执行如上命令会出现错误:如下图所示,这是因为我们试图访问的是一个以https开头的下载地址,如果是http开头的地址不会出现这个错误,我们通过报错的提示得知,我们访问的如果是一个https的下载地址就需要在wget命令后加上--no-check-certificate
wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.64/bin/apache-tomcat-9.0.64.tar.gz
12.5 curl命令
curl命令可以使用户在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。它支持30多种协议,命令格式:curl [选项] [url地址]
选项说明:
| 选项 | 说明 |
|---|---|
| -o"文件名" | 保存所访问的网页内容 |
| -i | 显示请求头信息 |
| -v | 跟踪URL的连接信息,显示整个通信的过程 |
| -d “参数" | 携带请求参数的连接,常见的就是表单参数和JSON格式参数 |
| -X | 指定请求方式,包括GET、PUT、POST、DELETE四种方式 |
| -H | 指定请求数据类型 |
使用举例:
#查看百度网页HTML
curl https://www.baidu.com
#查看百度网页HTML,并保存在本地
curl -o baidu.html https://www.baidu.com
#查看百度网页HTML,并跟踪整个请求过程,显示请求头,响应头等信息
curl -v https://www.baidu.com
#访问一个注册地址,并携带表单数据,以GET方式请求
curl -d "userName=jack&password=123456" http://127.0.0.1/reg
#访问一个登录地址,并携带JSON数据,以POST的方式请求
curl -H "Content-Type: application/json" -X POST -d "{"userName":"jack","passowrd":"123456"}" http://127.0.0.1/login
12.6 scp命令
scp命令用来将文件或者目录从一个Linux系统复制到另一个Linux系统,scp传输数据用的是SSH协议,保证了数据传输安全 命令格式:scp 远程用户名@ip地址:文件的绝对路径 本地linux系统路径 (将远程的linux系统某个文件或目录复制到本地linux上) scp 本地linux系统文件路径 远程用户名@ip地址:远程系统文件绝对路径名 (将本地linux系统某个文件或目录复制到远程linux上)
使用举例:
#将本地/root目录下的access_log文件复制到远程192.168.177.10机器上的/root目录下,命令输入完毕后就会要求输入密码
scp /root/access_log root@192.168.177.10:/root
#将192.168.177.10机器上的/root/centos目录中所有文件复制到本地/root目录下
scp -r root@192.168.177.10:/root/centos /root
12.7 telnet命令
telnet命令通过telnet协议与远程主机通信或者获取远程主机对应端口的信息,它与Windows下的telnet具有相同的功能,命令格式:telnet 主机名或IP地址 端口 ,如果linxu没有安装telnet命令,可以执行:yum -y install telnet
使用举例:
#要查看某台Linux系统22和80端口是否打开以及分别开启了什么服务
telnet 192.168.177.10 22
telnet 192.168.177.10 80
#22端口运行这SSH服务,对应的SSH版本号为SSH-2.0-OpenSSH_7.4;
#80端口如果开启,就会给出欢迎信息,此时通过键盘输入get将显示80端口对应的服务器类型;
#但如果出现Connect refused就表示端口对应服务没有开启,或者端口被屏蔽,无权访问
12.8 firewalld命令
防火墙 firewalld 服务通过一种信任机制来管理访问系统的连接
#查看防火墙状态
systemctl status firewalld
systemctl status firewalld.service
service firewalld status
#启动防火墙
systemctl start firewalld
#关闭防火墙
systemctl stop firewalld
#让防火墙可用
systemctl enable firewalld
#让防火墙禁用
systemctl disable firewalld
#重启防火墙
systemctl restart firewalld
service firewalld restart
注意:在实际公司里面不要这么做,我们自己测试为了方便可以直接关闭,在实际工作中,我们需要单独使用防火墙开放端口
#防火墙开放端口命令:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#添加多个端口:
firewall-cmd --zone=public --add-port=8080-8088/tcp--permanent
#重新加载防火墙配置:
firewall-cmd --reload
#命令含义:
--zone #作用域:查看当前的区域:firewall-cmd --get-default-zone
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
#取消删除端口开放:
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
#查询端口号3306 是否开启:
firewall-cmd --query-port=3306/tcp
#查询有哪些端口是开启的:
firewall-cmd --list-port
13. 用户管理与权限命令
13.1 groups命令
groups命令用户查看用户所在组,在Linux中,每一个账号用户,都可以进行分组,用户组信息实际上是保在/etc/group文本文件中,命令格式:groups [username]
使用举例:
#查看当前用户的分组
groups
#查看root用户所在的分组
groups root
#查看所有用户分组,并过滤出root
cat /etc/group | grep root
13.2 groupadd命令
groupadd命令用于添加用户分组,命令格式:groupadd [选项] 组名
选项说明:
| 选项 | 说明 |
|---|---|
| -g | 指定新建工作组的 id |
| -r | 创建系统工作组,系统工作组的组ID小于500 |
使用举例:
#添加用户组java
groupadd java
13.3 groupdel命令
groupdel命令用于删除用户分组,命令格式:groupdel 组名
使用举例:
#删除用户组java
groupdel java
13.4 useradd命令
useradd 命令可用来添加用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中,命令格式:useradd [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -d"目录名" | 指定用户登录时的home目录 |
| -e"有效期限" | 指定账号的有效期限 |
| -f"缓冲天数" | 指定在密码过期后多少天关闭该账号 |
| -g "组" | 指定用户所属的组 |
| -G"组" | 指定用户所属的附加组 |
| -m | 自动建立用户的登录时的home目录 |
| -M | 不要自动建立用户的登入时的home目录 |
| -n | 取消建立以用户名称为名的群组 |
| -r | 建立系统帐号,默认建立的账号是普通账号 |
使用举例:
#添加普通用户t1
useradd t1
#添加普通用户t2,并指定相应的用户组
useradd -g root t2
#添加系统用户t3,系统用户并不是指真实的使用者,这些用户是系统运行一些进程时需要的,例如mysql在linux中运行,就需要我们创建一个系统用户叫mysql来启动运行
useradd -r t3
#为新添加的用户t4指定home目录/myd,如果不加该选项,默认会在home目录下创建跟用户名相同名字的目录
useradd -d /home/myd t4
13.5 userdel命令
userdel 命令用于删除用户,命令格式:userdel [选项] [username]
选项说明:
| 选项 | 说明 |
|---|---|
| -f | 强制删除用户账号 |
| -r | 删除用户home目录及其中的任何文件 |
使用举例:
#删除t1用户,并删除其home目录的内容
userdel -r t1
#删除t3用户,由于t3用户是系统用户,所以不能加-r选项,因为不存在home目录
userdel t3
13.6 chmod命令
chmod命令用于修改文件类型和权限,命令格式:chmod [选项] [权限] [文件或目录]
选项说明:
| 选项 | 说明 |
|---|---|
| -R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更) |
| -c | 若该文件权限确实已经更改,才显示其更改动作 |
| -f | 若该文件权限无法被更改也不要显示错误讯息 |
| -v | 显示权限变更的详细资料 |
文件类型说明:
| 文件类型 | 说明 |
|---|---|
| -rw-rw-rw | -表示文件 |
| drw-rw-rw | d表示目录文件夹 |
| srw-rw-rw | s表示socket套接字文件 |
| brw-rw-rw | Block device块设备 |
| crw-rw-rw | Character Device字符设备 |
其之后的每3个字符为一组,分别为当前文件所属用户的权限,当前用户组权限,其他用户权限
权限说明:
| 权限类型 | 说明 |
|---|---|
| r | --read,读权限 4 |
| w | --write 写权限 2 |
| x | --execute 执行权限 1 |
| rwx | 最后结果表示7,代表读写执行权都具备 |
使用举例:
#常见644、755、777三种权限;
#644指,当前所属用户具备读写权限,当前用户组具备读权限,其他用户具备读权限;
#755指,当前所属用户具备读写执行权限,当前用户组具备读和执行权限,其他用户具备读和执行权限;
#777指,所有用户都具备读写执行权限,这是最高权限。
#修改/root/hello.log文件的读写执行权限
chmod 640 hello.log
#递归将/root/myDocument_1设置的权限应用到下面的所有文件
chmod -R 755 /root/myDocument_1
#还有一种统一加减权限的方式,+x -x +r -r +w -w,分别代表加减执行权限,读权先、写权限
chmod +x hello.log
13.7 chown命令
chown命令用于更改当前目录或当前文件的所属用户,命令格式:chown [选项] 用户名 目录或文件
| 选项 | 说明 |
|---|---|
| -R | 对目前目录下的所有文件与子目录进行相同的所属用户变更(即以递归的方式逐个变更) |
| -c | 若该文件确实已经更改,才显示其更改动作 |
| -f | 若该文件无法被更改也不要显示错误讯息 |
| -v | 显示权限变更的详细资料 |
使用举例:
#修改abc.txt文件的所属用户为test用户
chown test abc.txt
#递归修改/root/myDocument_1目录及其下的子文件的所属用户为test用户
chown -R test /root/myDocument_1
13.8 chgrp命令
chgrp命令用于修改目录或文件所属组,命令格式:chgrp [选项] 用户组 目录或文件
选项说明:
| 选项 | 说明 |
|---|---|
| -R | 对目前目录下的所有文件与子目录进行相同的所属用户组变更(即以递归的方式逐个变更) |
| -c | 若该文件确实已经更改,才显示其更改动作 |
| -f | 若该文件无法被更改也不要显示错误讯息 |
| -v | 显示权限变更的详细资料 |
使用举例:
#修改abc.txt文件的用户组为test
chgrp test abc.txt
#递归修改/root/myDocument_1目录及其下的子文件的所属组为test
chgrp -R test /root/myDocument_1
#一次性修改所属用户和所属组
chown test:test abc.txt
chown -R test:test /root/myDocument_1
14. 软件安装命令
14.1 rpm命令
rpm命令是由Red Hat公司开发的一种软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载等工作,但是使用rpm命令安装rpm软件包,不能自己解决软件包之间的依赖性问题,需要自己一个一个去安装依赖的软件包。rpm只能安装一个指定的软件包,如果该软件包存在依赖性关系,比如安装A包,需要先安装B包,采用rpm就要先安装B,再安装A。命令格式: rpm [选项]
选项说明:
| 选项 | 说明 |
|---|---|
| -i | 安装应用程序 |
| -e | 卸载应用程序 |
| -vh | 显示安装进度 |
| -U | 升级软件包 |
| -qa | 显示所有已安装软件包 |
使用举例:
#安装rpm包的软件:
rpm -ivh jdk1.8.201.rpm
#查看是否安装了jdk的rpm包:
rpm -qa | grep jdk
#删除某个rpm安装包:
rpm -e jdk1.8-1.8.0_202-fcs.x86_64
#注意:rpm安装软件,安装后的文件到处都有,散落一地,不好归档,并且需要自己解决依赖关系,非常麻烦,但是如果CentOS7机器没有办法连接互联网的话,要吗是使用rpm包进行安装,要吗就是使用类似.tar.gz或者是.zip
14.2 yum命令
yum命令是一个在RedHat、Fedora以及CentOS中的一种软件包管理器,它基于rpm包管理,能够从指定的服务器自动下载rpm包并且进行安装,可以自动处理软件包之间的依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。命令格式:yum [选项] [参数]
选项说明:
| 选项 | 说明 |
|---|---|
| search | 查找软件包 |
| install <package_name> | 安装指定的软件 |
| -vh | 显示安装进度 |
| -U | 升级软件包 |
| -qa | 显示所有已安装软件包 |
| remove<package_name> | 删除安装包 |
| list <package_name> | 列出以安装软件包 |
| clean <package_name> | 清除软件包 |
| -y | 自动确认,不给出提示 |
使用举例:
#安装或更新telnet命令工具
yum -y install telnet
#列出所有已安装的软件包
yum list installed
yum list installed | grep telnet
#删除软件包命令
yum remove telnet.x86_64
#卸载我们本机自带的openjdk
yum list installed | grep openjdk
yum remove java-1.8.0-openjdk.x86_64
15. 文件编辑器命令
15.1 vi命令
vi命令是Linux下标配的一个纯字符界面的文本编辑器,由于不是图形界面,相关的操作都要通过键盘输入命令来完成,需要记住一些常用的操作命令,命令格式:vi filename
交互命令说明:
| 命令 | 说明 |
|---|---|
| a或者i | 进入编辑模式,此时底部会出现insert |
| Esc | 进入命令模式,命令模式下无法编辑(默认刚打开文件时也是命令模式) |
| :wq | 在命令模式下生效,保存退出 |
| q! | 在命令模式下生效,不保存退出 |
| dd | 在命令模式下生效,删除光标所在行 |
| yy | 在命令模式下生效,复制光标所在行到缓冲区 |
| p | 在命令模式下生效,粘贴缓冲区中的内容 |
| gg | 在命令模式下生效,光标回到文件第一行 |
| GG | 在命令模式下生效,光标回到文件最后一行 |
| 在命令模式下生效,光标移动至当前行的行首 | |
| & | 在命令模式下生效,光标移动至当前行的行尾 |
| / 字符串 | 在命令模式下生效,可以输入想搜索的字符,然后确定进行搜索,如果查找的关键字不是想要的,可以按n键往后查找到想要的关键字为止 |
使用举例:
#在/root目录下打开新建文件centos.txt,并输入一行内容hello centos
vi centos.txt
#按i输入内容hello centos
#按esc退出编辑模式,并输入:wq保存
#如果vi命令打开的文件不存在,则会在保存的时候创建这个文件
#打开/root/access_log文件,快速进入到最后一行,再快速回到第一行
#在命令模式下输入GG,再输入gg即可
#打开/root/access_log文件,搜索java关键字,并查看所有的搜索结果
#在命令模式下输入/java回车搜索即可,再搜索的内容中按下n键逐一查看
15.2 vim命令
vim命令是vi命令的升级版本,完全兼容vi命令,vim命令是在vi命令的基础上增加一些功能,比如语法着色等,Min版没有vim命令, 我们需要进行自行安装 yum -y install vim,命令格式:vim filename ,其他操作和vi命令是一模一样的