一、Linux概述

Linux内核最初只是由芬兰人林纳斯·托瓦兹1991年在赫尔辛基大学上学时出于个人爱好而编写的。

1.1 Linux特点

首先Linux作为自由软件有两个特点:

一是它免费提供源代码

,二是爱好者可以根据自己的需要自由修改、复制和发布源码

1.2 Linux的各个发行版本

Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。

  1. Red Hat Linux (小红帽)
  2. Ubuntu Linux 界面 桌面系统
  3. SuSE Linux
  4. Gentoo Linux
  5. 其他 Linux 发行版

1.3 Linux应用领域

  1. IT服务器
  2. 嵌入式
  3. 个人桌面

1.4 Linux和Windows区别

目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。

主要区别如下


二、下载安装(暂略)

三、Linux系统目录结构

在xshell中使用ll可以查看Linux的目录结构:

假设我们想要进入bin目录下查看bin目录下有哪些文件可以使用 cd  bin进入bin目录下,在bin目录下使用ll命令查看当前目录下的文件。

 想要退出到根目录下,也就是返回上一级目录,使用cd .. 命令即可对于其他目录的访问也是如此。

  • /bin

是Binary的缩写,这个目录存放着经常使用的命令。

  • /boot

存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件

  • /dev

类似于 windows的设备管理器,把所有的硬件用文件的形式存储

  • /etc

所有系统管理所需要的配置文件和子目录,操作系统的核心配置文件。

  • /home

存放普通用户的主目录,在Linux中的每个用户都有一个自己的目录,一般该目录用用户的账号名命名。

  • /lib(/lib64)

系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /media

Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt

系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。

  • /opt

这是给主机额外安装软件所摆放的目录。如安装 ORACLE数据库就可放到该目录下。默认为空。

  • /proc

虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。

  • /root

该目录为系统管理员,超级权限者的用户目录

  • /sbin (usr/sbin、/usr/local/sbin)

sbin就是super user的意思,这里存放的是系统管理员使用的系统管理程序

  • /srv

service 的缩写,该目录是存放一些服务启动之后需要提取的数据

  • /sys

Linux2.6内核的一个很大变化,该目录安装了2.6内核中新出现的一个文件系统,存储进程的文件系统。

  • /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 的预设放置也是在这里。

3.1 Linux用户和用户组

用户管理概述

Linux是一个多用户、多任务的操作系统.

用户账号和用户组

 用户概念

通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)

用户组概念

用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;

Linux用户和组的关系

用户和用户组的对应关系有以下 4 种:

  1. 一对一:一个用户可以存在一个组中,是组中的唯一成员;
  2. 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
  3. 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
  4. 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。

3.2 Linux用户管理

Linux 系统的管理员之所以是 root,是因为该用户的身 份号码即 UID的数值为 0,UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。

  • 管理员 UID 为 0:系统的管理员用户。
  • 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏 范围。
  • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。 需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)。

添加用户 useradd

useradd (选项)(参数)

选项

-d 指定创建的用户的家目录(默认为/home/username)

-e 账户的到期时间,格式为 YYYY-MM-DD.

-u 指定该用户的默认 UID

-g 指定一个初始的用户基本组(必须已存在)

-G 指定一个或多个扩展用户组

-N 不创建与用户同名的基本用户组

-s 指定该用户的默认 Shell 解释器

参数 :要创建的用户名。

示例 

下面我们创建一个普通用户并指定家目录的路径、用户的 UID和用户的名称 。

[root@localhost /]# useradd -u 501 zj

通过以下命令查看创建的用户的信息

[root@localhost home]# id zj
uid=501(zj) gid=1000(zj) groups=1000(zj)

修改用户 usermod

有些时候不小心在useradd的时候加入了错误的设定数据,此时我们当然可以直接到/etc/passwd或/etc/shadow中去修改相对应字段的数据。

usermod (选项) (参数)

选项:

-c   <备注>:修改用户帐号的备注文字;

-d   <登入目录>:修改用户登入时的目录;

-e    <有效期限>:修改帐号的有效期限;

-f     <缓冲天数>:修改在密码过期后多少天即关闭该帐号;

-g    <群组>:修改用户所属的群组;

-G    <群组>;修改用户所属的附加群组;

-l    <帐号名称>:修改用户帐号名称;

-L:锁定用户密码,使密码无效;

-s:修改用户登入后所使用的shell;

-u:修改用户ID;

-U:解除密码锁定。

示例

再来试试用-u 参数修改 zhangjin用户的 UID 号码值。除此之外,我们还可以用-g 参数 修改用户的基本组 ID,用-G 参数修改用户扩展组 ID。

[root@localhost home]# usermod -u 520 zj
[root@localhost home]# id zj
uid=520(zj) gid=1000(zj) groups=1000(zj)

用户账号口令管理

passwd 命令用于修改用户密码、过期时间、认证信息等。

passwd (选项) (参数)

选项:

-d:删除密码,仅有系统管理者才能使用;

-f:强制执行;

-k:设置只有在密码过期失效后,方能更新;

-l:锁住密码;

-s:列出密码的相关信息,仅有系统管理者才能使用;

-u:解开已上锁的帐号。

示例1

用root帮zj设置密码为123,密码是不显示的。

[root@localhost home]# passwd zj
Changing password for user zj.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

示例2

假设zhangjin正在度假,而且假期很长,那么可以使用 passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。 这样既保证了这段时间内系统的安全,也避免了频繁添加、删除用户带来的麻烦。

[root@localhost ~]# passwd -l  zj
Locking password for user zj.
passwd: Success
[root@localhost ~]# passwd -u zj
Unlocking password for user zj.
passwd: Success

删除用户 userdel

userdel [选项] 用户名

选项:

-f 强制删除用户

-r 同时删除用户及用户家目录

这个命令的目的删除用户,与它相关的文件有:

  1. /etc/passwd
  2. /etc/shadow
  3. /home/username

示例

下面使用 userdel 命令将 zj 用户删除,其操作如下:

[root@localhost ~]# userdel -rf zj
[root@localhost ~]# id zj
id: zj: no such user

3.3 Linux用户组管理

添加新组groupadd

groupadd (选项) (参数)

选项

-g:指定新建工作组的id;

-r:创建系统工作组,系统工作组的组ID小于500;

-K:覆盖配置文件“/ect/login.defs”;

-o:允许添加组ID号不唯一的工作组。

示例

建立一个新组j java,并设置组ID为 666 加入系统:

[root@localhost ~]# groupadd -g 666 java

查看组

查看root用户属于哪些组

[root@localhost ~]# groups
root

查看全部组

[root@localhost ~]# getent group

修改群组groupmod

groupmod(选项)(参数)

选项

-g<群组识别码>:设置欲使用的群组识别码;

-o:重复使用群组识别码;

-n<新群组名称>:设置欲使用的群组名称。

示例

把建立java组改为web并设置GID改为888

[root@localhost ~]# groupmod -g 888 -n  web java

删除群组groupdel

groupdel groupname

示例

删除web组

[root@localhost ~]# groupdel web

3.4 Linux超级用户和伪用户

Linux下用户分为三类:超级用户、普通用户、伪用户

  1. 超级用户:用户名为root,具有一切管理权限,UID为0,可以创建多个管理员。
  2. 普通用户:在默认情况下使用useradd创建出来的用户,普通用户UID是介于500~6000;
  3. 伪用户:这些用户的存在是为了方便系统管理,满足相应的系统进程对文件属主的要求。伪用户不能够登录,他的ID值介于1~499。

用户身份切换(su)

由于超级权限在系统管理中的不可缺少的重要作用,为了完成系统管理任务,必须用到超级权限。

[root@localhost /]# su zj
[zj@localhost /]$

普通用户切换到root用户需要输入密码,密码默认不显示

[zj@localhost /]$ su root
Password:
[root@localhost /]#

补充:

使用vim命令可以创建文件:

[root@localhost ~]# vim a.info

进入文件后键盘输入 a 可以在文件中书写内容,按 esc 键表示输入完成,按 :wq 表示保存并退出,如果不想创建文件的话使用  :q! 可以强制退出编辑模式。

使用 ll 命令可查看当前创建的 a.info 文件:

[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root   15 Jun  4 15:52 a.info
-rw-------. 1 root root 1291 May 30 04:40 anaconda-ks.cfg

想要具体查看a.info下的内容的话使用 cat a.info 命令即可。

[root@localhost ~]# cat a.info
this is root a.info

此时我们创建的文件在root目录下,该目录下的文件只能是root用户访问,普通用户不能访问:

[root@localhost /]# cd root
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root   15 Jun  4 15:52 a.info
-rw-------. 1 root root 1291 May 30 04:40 anaconda-ks.cfg

提升用户权限(visudo)

顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个命名的执行权限。

参数:

-h 列出帮助信息

-l 列出当前用户可执行的命令

-u 用户名或 UID 值 以指定的用户身份执行命令

-k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证

-b 在后台执行指定的命令

-p 更改询问密码的提示语

示例

将用户zj配置root权限,root权限的授予只能在root用户下进行。

1、在root用户下使用  visudo 命令进入权限编辑页面。

[root@localhost ~]# visudo

2、进入权限编辑页面后使用 :set nu 命令找到第92行左右。注意使用键盘上下键来定位不能使用鼠标滚轮。

3、使用 :set nonu 命令取消每行前的序号并按照下面的格式设置权限。

谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表

4.  使用 :wq 命令保存退出。此时用户zj就有了root权限。

之前我们在zj目录中不能访问root目录下的文件,现在可以访问(删除修改都OK)但是要使用 sudo 命令:

[zj@localhost root]$ sudo cat a.info
this is root a.info

补充:

当切换用户的时候,有些时候需要输入密码(15分钟有效)但是一次次输入密码也是很麻烦的事情。我们可以在 visodu 中添加配置实现一次输入永久使用:

zj  ALL=NOPASSWD:  ALL 

3.5 Linux文件基本属性

显示文件属性

ls命令

Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。

语法:

 ls [参数]

参数:

  • -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
  • -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出

查看当前根目录下的文件(出了隐藏文件):

查看当前根目录下的全部文件(包括隐藏文件):

查看文件的详细信息,之前使用的 ll 命令实际上就是 ls -l 的缩写。

Linux文件类型

Linux可以支持长达256个字符的文件名称,且文件名是区分大小写的,“abc” 与 "ABC"所代表的是不同文件。

Linux文件类型

  1. 普通文件(-):存放数据,程序等信息的文件,一般为文本文件和二进制文件。
  2. 目录文件(d):文件系统中一个目录所包含的目录文件,包括文件名和子目录名。
  3. 链接文件(l):可以在不同的文件系统之间建立链接关系来实现对文件的访问。
  4. 设备文件(c):把IO设备映射为一个设备文件。
  5. 管道文件(p):主要用于在进程间传递数据。

文件权限

所谓的文件权限,是指对文件访问权限,包括对文件的读、写、删除、执行操作。Linux是一个多用户操作系统,它运行多个用户同时登陆和工作,因此Linux将一个文件或者目录与一个用户和组联系起来。

Linux系统中,文件有三种访问权限:

  1. 读(r)- 允许读取文件
  2. 写(w)- 允许写、修改和删除某个文件
  3. 执行(x)- 允许执行某个文件

假设a.info是乔治创建的,那么乔治要关注的是属主权限,乔治一家的其他人,猪爸爸、猪妈妈和佩奇要关注的则是属组权限,佩奇的朋友山羊苏西一家关注的就是其他用户权限。(root创建的看属主权限,root组的看属组权限,其他的看其他用户权限;linux中只有一个root超级管理员

3.6 Linux权限字与权限操作

  1. chgrp: 改变文件所属群组;
  2. chown:改变文件所有人;
  3. chmod:改变文件的属性;

改变所属群组chgrp

改变一个文件的群组很简单,直接用chgrp命令,这个命令是change group的缩写。

语法:

chgrp [-R] 属组名 文件名

参数选项

  • -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

示例:将zj 用户下的 opt目录下的a.info 放到Java组。

改变文件属性chmod

Linux文件属性有两种设置方法,一种是数字,一种是符号。

Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。

文字设定法

基本上就九个权限分别是:

  • user:用户
  • group:组
  • others:其他

那么我们就可以使用 u, g, o 来代表三种身份的权限。

此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

示例:让java组对a.info文件多一个执行权限。再把这个权限删掉。

操作对象who可是下述字母中的任一个或者它们的组合:

  • u 表示“用户(user)”,即文件或目录的所有者。
  • g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
  • o 表示“其他(others)用户”。
  • a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:

  • + 添加某个权限。
  • – 取消某个权限。
  • = 赋予给定权限并取消其他所有权限(如果有的话)。
  • 设置mode所表示的权限可用下述字母的任意组合:
  • r 可读。
  • w 可写。
  • x 可执行。
  • X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
  • s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
  • t 保存程序的文本到交换设备上。
  • u 与文件属主拥有一样的权限。
  • g 与和文件属主同组的用户拥有一样的权限。
  • o 与其他用户拥有一样的权限。
  • -c : 若该档案权限确实已经更改,才显示其更改动作
  • -f : 若该档案权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
  • –help : 显示辅助说明
  • –version : 显示版本

改变文件拥有者chown

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

示例:  将root所拥有的a.info 文件改为 zj 所有。

3.7 Linux路径

路径,顾名思议,是指从树形目录中的某个目录层次到某个文件的一条道路。 Linux系统中是从" / "开始的。

注意事项:

引入路径的概念的最终目的就是找到需要的目录或者文件。路径是由目录或者文件名构成。

绝对路径

绝对路径是指从“根”开始的路径。例如/usr/local,/etc/hosts,如果一个路径是从“/”开始它一定是绝对路径。

注意:

  • 绝对路径必须以 “/” 开头,它表示根目录。

相对路径

相对路径是以 “ . ” 或者 " .. "开始的。. 表示用户操作所处的位置.. 表示上级目录。

注意:

  • 相对路径不能以 “ / ” 开头。
  • 每个目录中都有 “ ..” 目录文件。

在路径一些特殊符号的说明

. : 当前用户所在目录

.. :表示上一级目录

~ : 表示当前用户自己家目录

~ USER:表示用户名为USER的家目录。这里的USER是在/etc/passwd中存在的用户。

pwd:显示当前用户所在的详细位置。

3.8 Linux目录文件操作常用命令

pwd (显示目前所在的目录)

pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。

[root@www ~]# pwd [-P]

选项与参数:

  • -P :显示出确实的路径,而非使用连结 (link) 路径。

mkdir (创建新目录)

如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。

mkdir [-p] 目录名称

选项与参数:

  • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!

示例:在 opt 目录下创建一个叫test的文件夹

rmdir (删除空的目录)

rmdir [-p] 目录名称

选项与参数:

  • -p :从该目录起,一次删除多级空目录

示例:删除 opt 目录下的test文件

cp (复制文件或目录)

cp 即拷贝文件和目录。copy的意思。

示例:将 opt 文件中的 a.info 文件复制到    a/b/c文件下

rm (删除文件或者目录)

 rm [-rf] 文件或目录

选项与参数:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

示例:删除 opt 文件夹下的a.info 文件

示例:删除 opt 文件夹下的 a 文件。

mv (移动文件与目录,或修改名称)

 mv [-fiu] source destinationmv [options] source1 source2 source3 .... directory

选项与参数:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

示例:将 opt 文件夹下的 b.info 文件移动到 test 文件下。

示例:将test 文件夹下的 b.info 文件重命名为 a.info

四、Linux文件编辑工具vim及常见文件操作命令

4.1 vi/vim 的使用

vi或vim是Linux最常用的文本编辑器工具,vi或vim没有图形界面编辑器那样单机鼠标的简单操作,但vi编辑器在系统管理、服务器管理中,永远是图形界面的编辑器所不能比的。

基本上 vi/vim 共分为三种模式 :

  1. 命令模式(Command mode)
  2. 输入模式(Insert mode)
  3. 底线命令模式(Last line mode)

命令模式

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

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

命令 作用
dd 删除(剪切)光标所在的整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
n 显示搜索命令定位到下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步操作
p 将之前删除dd或者复制yy过的数据粘贴到光标后面
G 文本最后面
gg 文本开始
shift+^ 移动到行头
shift+$ 移动到行尾
x 删除光标所在的字符

输入模式

在命令模式输入 iao 三个字母中的任意一个就能输入内容了,此时底部出现insert 时表示当前处在输入状态。

输入模式退出到命令模式使用ESC

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

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

底线命令模式

主要保存或者退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转所编写文档的特定行数。

命令 作用
: w 保存
: q 退出
: q ! 强制退出
: wq! 强制保存退出
: set nu 显示行号
: set nonu 不显示行号
: 命令 执行该命令
: 整数 跳转到该行
:s/one/two 将当前光标所在行的第一个one替换成two
:s/one/two/g 将当前光标所在行的所有one替换成two
:%s/one/two/g 将全文中的所有one替换成two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串

4.2 Linux文件内容查看命令

cat(显示文件内容)

由第一行开始显示文件内容

cat [-AbEnTv]

选项与参数:

  • -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E :将结尾的断行字节 $ 显示出来;
  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -v :列出一些看不出来的特殊字符

示例:查看 a.info 文件里面的内容

tac(倒着显示文件内容)

ac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

nl(显示行号)

nl [-bnw] 文件

选项与参数:

  • -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种: -n ln :行号在荧幕的最左方显示; -n rn :行号在自己栏位的最右方显示,且不加 0 ; -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。

示例:显示 a.info 的行号

more(一页一页的显示文件内容)

在 more 这个程序的运行过程中,你有几个按键可以按的:

  • 空白键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f :立刻显示出档名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

less(往前翻页)

一页一页翻动,以下实例输出/etc/man.config文件的内容:

less运行时可以输入的命令有:

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能;
  • ?字串 :向上搜寻『字串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q :离开 less 这个程序;

head(只看头几行)

取出文件前面几行

head [-n number] 文件

选项与参数:

  • -n :后面接数字,代表显示几行的意思

tail(只看尾几行)

tail [-n number] 文件

选项与参数:

  • -n :后面接数字,代表显示几行的意思
  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

4.3 Linux打包压缩与搜索命令

文件打包和压缩(tar)

文件打包就是将多个文件打包成一个文件。

tar  [选项] [文件]

选项:

-c 产生.tar打包文件

-v 显示详细信息

-f 指定压缩后的文件名

-z 打包同时压缩 Gzip

-x 解包.tar文件

示例:将test文件夹下的 文件打包并压缩。

示例:将package.tar.gz 文件中的文件解压到当前test文件夹

示例:将文件解压缩到/usr/local文件下

gzip/gunzip压缩

gzip+文件     (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip+文件.gz    (功能描述:解压缩文件命令)

示例:将a.info 文件压缩

示例:将a.info.gz 文件解压缩

搜索命令(grep)

grep 命令用于在文本中执行关键词搜索,并显示匹配的结果。

grep [参数 查找内容  源文件]

选项:

-b 将可执行文件(binary)当作文本文件(text)来搜索

-c 仅显示找到的行数

-i 忽略大小写

-n 显示行号

-v 反向选择—仅列出没有“关键词”的行

-E :开启扩展(Extend)的正则表达式

示例:搜索 a.info 文件中是否存在 "is" 字符串,并显示行号

搜索命令(find)

find 命令用于按照指定条件来查找文件。

find [查找路径] 寻找条件 操作

选项:

-name 匹配名称

-perm 匹配权限(mode 为完全匹配,-mode 为包含即可)

-user 匹配所有者

-group 匹配所有组

-mtime -n +n 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)

-atime -n +n 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)

-ctime -n +n 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)

-nouser 匹配无所有者的文件

-nogroup 匹配无所有组的文件

-newer f1 !f2 匹配比文件 f1 新但比 f2 旧的文件

--type b/d/c/p/l/f 匹配文件类型(后面的字幕参数依次表示块设备、目录、字符设备、管道、 链接文件、文本文件)

-size 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小于 50KB 的文件)

-prune 忽略某个目录 -exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)

示例:查找当前文件夹下是否存在一个后缀是log的文件

示例:全局搜索a.info 文件

五、Linux常用系统工作命令

reboot 命令

reboot 命令用于重启系统,其格式为 reboot。

由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用 root 管理员来 重启,其命令如下:

[root@localhost /]# reboot

poweroff 命令

poweroff 命令用于关闭系统,其格式为 poweroff。

该命令与 reboot 命令相同,都会涉及硬件资源的管理权限,因此默认只有 root 管理员才 可以关闭电脑,其命令如下:

[root@localhost /]# poweroff

wget 命令

wget 命令用于在终端中下载网络文件。

wget [参数] 下载地址

参数:

-b 后台下载模式

-P 下载到指定目录

-t 最大尝试次数

-c 断点续传

-p 下载页面内所有资源,包括图片、视频等

-r 递归下载

六、Linux重定向、管道符和环境变量

6.1 输入输出重定向

把多个 Linux 命令适当地组合到一起,使其协同工作,以便我们更加高效地处理数据。

  • 标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。
  • 标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
  • 错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。

输入重定向作用表

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件 1 作为命令的标准输入并将标准输出到文件 2

输出重定向作用表

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>$1或命令 & >>文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的 后面)

示例:输出 a.info 文件的详细信息并将该文件的信息保存到该文件中。

示例:将错误数据输入到error.log 文件

6.2 管道命令符

管道命令符其执行格式为“命令 A | 命令 B”。命令符的作用也 可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。

示例:

找出被限制登录用户的命令是 grep "/sbin/nologin" /etc/passwd
统计文本行数的命令则是 wc -l

现在要做的就是把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信 息列表再交给 wc 命令作进一步的加工,因此只需要把管道符放到两条命令之间即可,具体如 下。这简直是太方便了!

grep "/sbin/nologin" /etc/passwd | wc -l

这个管道符就像一个法宝,我们可以将它套用到其他不同的命令上,比如用翻页的形 式查看/etc 目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本 看不清楚):

 ls -l /etc/ | more

在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的--stdin 参数相结合,我们可以用一条 命令来完成密码重置操作:

echo "linuxprobe" | passwd --stdin root

6.3 命令行的通配符

现象:

我们有时候也会遇到明明一 个文件的名称就在嘴边但就是想不起来的情况。如果就记得一个文件的开头几个字母,想遍 历查找出所有以这个关键词开头的文件,该怎么操作呢?

通配符就是通用的匹配信息的符号,比如星号(*)代 表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意 一个字符。

示例:查看 dev目录下的以sda开头的文件

6.4 重要的环境变量

在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量 用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量

自然而然地,环境变量的配置文件也相应的被分成了系统级和用户级两种。

系统级

/etc/profile

在系统启动后第一个用户登录时运行,并从/etc/profile.d目录的配置文件中搜集shell的设置,使用该文件配置的环境变量将应用于登录到系统的每一个用户。

提示:

在Linux系统中,使用以下命令可以使配置文件立刻生效。

source /etc/profile
echo $PATH

用户级

~/.profile(推荐首选)

当用户登录时执行,每个用户都可以使用该文件来配置专属于自己使用的shell信息。

七、Linux磁盘管理

分区的方式(了解)

  • MBR分区表:每块硬盘最大支持2.1TB硬盘,每块硬盘最多支持4个分区。
  • GPT分区表(全局唯一标识分区):支持9.4ZB硬盘,理论上支持分区数没有限制,但Windows限制128个主分区。

7.1 Linux分区原理

Linux的文件系统是树形的,安装的系统必须是在 / 目录下,因为 / 目录下挂载了一个主分区。/目录是树形的根,其他所有目录都是他的子节点。win系统中盘符和分区挂载,linux中文件夹和分区挂载

lsblk命令

lsblk命令来自于英文词组”list block“的缩写,其功能是用于查看系统的磁盘使用情况。

参数:

-a 显示所有设备
-b 以字节单位显示设备大小
-d 不显示 slaves 或 holders
-e 排除设备
-f 显示文件系统信息
-h 显示帮助信息
-i 仅使用字符
-m 显示权限信息
-l 使用列表格式显示
-n 不显示标题
-o 输出列
-P 使用key=”value”格式显示
-r 使用原始格式显示
-t 显示拓扑结构信息

示例:查看linux的分区

df命令

用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。

df [选项] [目录或文件名]
-a 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统;
-m 以 MB 为单位显示容量;
-k 以 KB 为单位显示容量,默认以 KB 为单位;
-h 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量;
-T 显示该分区的文件系统名称;
-i 不用硬盘容量显示,而是以含有 inode 的数量来显示。

各列信息的含义:

  • Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
  • 1K-blocks:此列表示文件系统的总大小,默认以 KB 为单位;
  • Used:表示用掉的硬盘空间大小;
  • Available:表示剩余的硬盘空间大小;
  • Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
  • Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。

fdisk命令

Linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。

重要参数:

  • -l 列出素所有分区表

菜单操作说明

  • m :显示菜单和帮助信息
  • a :活动分区标记/引导分区
  • d :删除分区
  • l :显示分区类型
  • n :新建分区
  • p :显示分区信息
  • q :退出不保存
  • t :设置分区号
  • v :进行分区检查
  • w :保存修改
  • x :扩展应用,高级功能

示例:显示当前分区情况

7.2 Linux挂载硬盘

需求是给我们Linux系统增加一个新的硬盘, 并且挂载到/root/zj。

1、虚拟机添加硬盘

2、设置分区

添加完硬盘后先重启系统,在使用 lsblk -f 查看添加的硬盘:

使用fdisk命令为硬盘分区

[root@localhost ~]# fdisk /dev/sdb ----------------------- #硬盘分区命令
Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa904fc88.Command (m for help): m   ---------------------------#输入m提示信息
Command actiona   toggle a bootable flagb   edit bsd disklabelc   toggle the dos compatibility flagd   delete a partitiong   create a new empty GPT partition tableG   create an IRIX (SGI) partition tablel   list known partition typesm   print this menun   add a new partitiono   create a new empty DOS partition tablep   print the partition tableq   quit without saving changess   create a new empty Sun disklabelt   change a partition's system idu   change display/entry unitsv   verify the partition tablew   write table to disk and exitx   extra functionality (experts only)Command (m for help): n      ----------------------- #n表示为当前的硬盘创建分区
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): p  -----------------------------  #p表示为当前硬盘设置主分区
Partition number (1-4, default 1): 1            #1表示当前分区的编号
First sector (2048-41943039, default 2048): -------------#没有输入东西表示该分区的大小是20G
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is setCommand (m for help): m
Command actiona   toggle a bootable flagb   edit bsd disklabelc   toggle the dos compatibility flagd   delete a partitiong   create a new empty GPT partition tableG   create an IRIX (SGI) partition tablel   list known partition typesm   print this menun   add a new partitiono   create a new empty DOS partition tablep   print the partition tableq   quit without saving changess   create a new empty Sun disklabelt   change a partition's system idu   change display/entry unitsv   verify the partition tablew   write table to disk and exitx   extra functionality (experts only)Command (m for help): w ------------------------------#保存并退出
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#

分区完成再查看当前系统的分区情况

3、格式化分区

就是把分区清理一下

mkfs -t ext4 /dev/sdb1

4、挂载

先创建目录 /zj

[root@localhost ~]# mkdir zj

使用mount命令将分区挂载到zj文件夹上

[root@localhost ~]# mount /dev/sdb1   ./zj

查看系统分区情况

菜鸟雷区:

这种挂载有个问题,重启计算机后,挂载信息消失。

5、永久挂载

使配置生效

[root@localhost ~]# mount -a

八、Linux系统状态检测命令

ip addr 命令

用于获取网卡配置与网络状态等信息。

uname -a 命令

uname 命令用于查看系统内核信息。

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

注意:

在使用 uname 命令时,一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主 机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统 名称等信息。

cat /etc/redhat-release 命令

查看系统的版本

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) 

free-h 命令

free 用于显示当前系统中内存的使用量信息。

[root@localhost ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           974M         66M        818M        968K         89M        774M
Swap:          2.0G         79M        1.9G

注意:

为了保证 Linux 系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。

last 命令

last 命令用于查看所有系统的登录记录。

注意:

使用 last 命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保 存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而 判断系统有无被恶意入侵!

history 命令

history 命令用于显示历史执行过的命令。

注意:

history 命令应该是老师最喜欢的命令。执行 history 命令能显示出当前用户在本地计算机 中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,还可以自定义/etc/profile 文件中的 HISTSIZE 变量值。在使用 history 命令时,如果使用-c 参数则会清空所有的命令历史记录。

uptime 命令

uptime 用于查看系统的负载信息,格式为 uptime。

[root@localhost ~]# uptime21:22:14 up  1:03,  1 user,  load average: 0.00, 0.37, 0.61

注意:

uptime 命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以 及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情 况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要 超过 5。

九、Linux软件安装命令

9.1 源码安装(了解)

以源代码安装软件,每次都需要配置操作系统、配置编译参数、实际编译,最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。

9.2 RPM软件包管理

RPM安装软件的默认路径:

  • /etc 配置文件放置目录
  • /usr/bin 一些可执行文件
  • /usr/lib 一些程序使用的动态链接库
  • /usr/share/doc 一些基本的软件使用手册与说明文件
  • /usr/share/man 一些man page档案

常用的 RPM 软件包命令

安装软件的命令格式 rpm -ivh filename.rpm
升级软件的命令格式 rpm -Uvh filename.rpm
卸载软件的命令格式 rpm -e filename.rpm
查询软件描述信息的命令格式 rpm -qpi filename.rpm
列出软件文件信息的命令格式 rpm -qpl filename.rpm
查询文件属于哪个 RPM 的命令格式 rpm -qf filename

参数说明:

  • -i:install的意思,安装
  • -v:查看更详细的安装信息画面
  • -h:以安装信息栏显示安装进度

软件安装

如你需要安装一个jdk,首先要到网上下载一个jdk的rpm包,如jdk-8u171-linux-x64.rpm。最简单的安装命令如下:

rpm -i jdk-8u171-linux-x64.rpm

不过,这样的参数其实无法显示安装的进度,所以通常我们执行的命令是这样:

rpm -ivh package-name

卸载软件

使用rpm的卸载过程一定要由最上层往下卸载,以rp-pppoe为例,这个软件主要是依据ppp这个软件来安装的,所以当你要卸载ppp的时候,就必须先卸载rp-pppoe才行!

删除的命令非常简单,通过-e参数就可以完成。不过,很常发生软件属性依赖导致无法山洼某些软件的问题。

rpm -e gcc

注意:

如果删除不想检查依赖关系,加 --nodeps

9.3 YUM

YUM可以看作是CS架构的软件,YUM的存在很好的解决了RPM的属性依赖问题。

YUM通过依赖rpm软件包管理器, 实现了rpm软件包管理器在功能上的扩展, 因此YUM是不能脱离rpm而独立运行的。

注意:

YUM是一个在线软件管理工具,所以使用YUM进行的操作大都是需要在联网的条件下才能正常使用。

查看当前YUM源

yum repolist all

如上图,只有当最右边的status为enabled该容器才算激活,

/etc/yum.repos.d/里面会有多个配置文件(文件名以.repo结尾),yum会从里面逐个查找,所以里面的容器名称不能有重复。

修改当前YUM源

1:安装wget
    yum install -y wget  (如果已经安装了则省略)
2:备份  /etc/yum.repos.d/CentOS-Base.repo文件
    cd /etc/yum.repos.d/
    mv CentOS-Base.repo CentOS-Base.repo.back

3:下载阿里云的Centos-7.repo文件
     wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

4:重新加载yum
    yum clean all
    yum makecache
5:检查配置的源是否是阿里的
   cat /etc/yum.repos.d/CentOS-Base.repo

YUM源使用手册

小技巧: 使用参数-y,当遇到需要等待用户输入时,这个选项会提供yes的响应,如上面的例子可以写成:

yum  install -y  emacs

9.4  JDK和Tomcat、MySQL安装

Jdk 安装

1、将文件上传到Linux下的 opt 文件夹,需要提前安装好xftp

2、解压安装包,将压缩包解压到/usr/local目录下。

[root@localhost opt]# tar -zxvf jdk-8u201-linux-x64.tar.gz  -C /usr/local

文件重命名:

[root@localhost local]# mv jdk1.8.0_201/ jdk1.8

3、配置环境变量

vim /etc/profile

底部(G)加入如下配置

export JAVA_HOME=/usr/local/jdk

export PATH=$PATH:$JAVA_HOME/bin

配置生效:

source /etc/profile

检查是否配置成功:

Tomcat 安装

1、下载压缩包

wget  https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz

2、解压到usr/local文件夹下并重命名


[root@localhost opt]# tar -zxvf apache-tomcat-9.0.75.tar.gz -C /usr/local[root@localhost local]# mv apache-tomcat-9.0.75/   tomcat9

3、配置环境变量

vim /etc/profile

底部加入:

export TOMCAT_HOME=/usr/local/tomcat
export PATH=$PATH:$TOMCAT_HOME/bin:$JAVA_HOME/bin
4、配置生效

source /etc/profile

Mysql数据库安装

1、下载MySQL的YUM源库。

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

2、安装YUM库

rpm -ivh mysql80-community-release-el7-3.noarch.rpm

3、安装MySQL

yum -y install mysql-community-server  --nogpgcheck

4、完成安装,重启mysql

systemctl restart mysqld

查看是否启动成功

systemctl status mysqld 

5、登录MySQL

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

grep "password" /var/log/mysqld.log

​​​

6、修改初始密码

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库,修改密码命令:

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

修改完密码后输入exit 或者ctrl+D退出再重新登录

7、使用win下的数据库可视化工具远程连接Linux系统中的Mysql

在连接之前首先要关闭防火墙:

开启远程连接,远程连接是否开启要到MySQL一个叫mysql的数据库中查看:

select User,Host,Password from user;
update user set host ="%" where user = “root”
刷新信息
mysql> flush privileges;

连接

十、Linux进程管理

10.1 查看系统中所有进程(ps-aux)

ps -aux

参数

  • -a 显示所有进程(包括其他用户的进程)
  • -u 用户以及其他详细信息
  • -x 显示没有控制终端的进程

相关信息:

USER:该进程属于哪个使用者账号。

UID:程序被该 UID 所拥有。

PID:就是这个程序的 ID 。

%CPU:该进程使用掉的CPU资源百分比。

%MEM:该进程所占用的物理内存百分比。

STAT:

  • R:正在运行
  • S:正在睡眠
  • T:停止了
  • Z:已经终止了。

TIME:该进程实际使用CPU运行的时间

COMMAND:该进程的实际指令

示例:找出mysql这个服务有关的进程信息。

ps -aux|egrep mysql

温馨提示:

egrep是grep的扩展和grep -e 是一样的...

grep中的匹配字符,全部当作字符串来处理,但是不支持正则表达式的特殊元字符....

egrep可以支持元字符...

'^':指匹配的字符串在行首, '$':指匹配的字符串在行尾,

10.2 查看系统健康状态(top)

查看系统健康状态 ,windows 加强版 任务管理器

top [-d] | top [-bnp]

top是一个不错的进程观察工具,但不同于ps是静态的结果输出。top这个进程可以持续地监测整个系统的进程的工作状态。

显示详解:

  • 当前时间
  • 系统已运行的时间
  • 当前登录用户的数量
  • 相应最近5、10和15分钟内的平均负载。

可以使用'l'命令切换uptime的显示。

  • 21:45:11 — 当前系统时间
  • 0 days, 4:54 — 系统已经运行了4小时54分钟(在这期间没有重启过)
  • 2 users — 当前有2个用户登录系统
  • load average: 0.24, 0.15, 0.19 — load average 后面的三个数分别是5分钟、10分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

按q退出任务管理器。

10.3 进程查看器(htop)

htop是Linux系统中的一个互动的进程查看器,与Linux传统的top比较的话,htop人性化并且还支持鼠标操作!

htop的安装

#安装epel源
yum install epel-release -y
#安装htop
yum install -y htop
#安装完毕后命令行输入
htop

10.4 终止进程(kill)

终止进程,kill的应用是和ps或者pgrep命名结合在一起使用的。

kill [信号量]  进程ID

示例

终止所有的httpd进程。

[root@zk3 home]# ps auxf|grep httpd
root    15968  0.0  0.0 112808  968 pts/0   S+  11:35  0:00  |    \_ grep --color=auto httpd

看上面输出中的第二列,就是进程PID.

kill 15968
ps -auxf|grep httpd

注意:

killall 正在运行的进程名 killall gami

kill -9 PID 强制终止进程

10.5 网络接口设备状态信息(netstat)

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

netstat  [选项]

列出所有端口

netstat -a # 列出所有端口

netstat -at # 列出所有TCP端口

netstat -au # 列出所有UDP端口

netstat -ax # 列出所有unix端口

netstat -atnlp # 直接使用ip地址列出所有处理监听状态的TCP端口,且加上程序名

显示每个协议的统计信息

netstat -s # 显示所有端口的统计信息

netstat -st # 显示所有TCP的统计信息

netstat -su # 显示所有UDP的统计信息

显示核心路由信息

netstat -r # 显示所有端口的统计信息

netstat -rn # 显示所有TCP的统计信息

查看端口号

lsof -i:端口号

十一、Linux系统服务

11.1 Service命令

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程。

service  服务名 [start | stop | restart | reload | status]

注意:

service命令其实是去/etc/init.d目录下,去执行相关程序

示例:查看当前网络的状况。

 service network status

11.2 Systemd命令

Linux的启动一直采用init进程。

service命令两个缺点:

一是启动时间长。init进程是串行启动只有前一个进程启动完,才会启动下一个进程。

二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

systemctl命令

systemctl是 Systemd 的主命令,用于管理系统。

假设要启动一个foo程序

System V init命令 systemctl命令 作用
service foo start systemctl start foo.service 启动服务
service foo restart systemctl restart foo.service 重启服务
service foo stop systemctl stop foo.service 停止服务
service foo reload systemctl reload foo.service 重新加载配置文件(不终止服务)
service foo status systemctl status foo.service 查看服务状态

systemd-analyze命令

systemd-analyze命令用于查看启动耗时。

# 查看启动耗时
$ systemd-analyze
# 查看每个服务的启动耗时
$ systemd-analyze blame
# 显示瀑布状的启动过程流
$ systemd-analyze critical-chain
# 显示指定服务的启动流
$ systemd-analyze critical-chain atd.service

hostnamectl命令

hostnamectl命令用于查看当前主机的信息。

# 显示当前主机的信息
$ hostnamectl
# 设置主机名。
$ sudo hostnamectl set-hostname rhel7

timedatectl命令

timedatectl命令用于查看当前时区设置。

# 查看当前时区设置
$ timedatectl
# 显示所有可用的时区
$ timedatectl list-timezones
# 设置当前时区
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS

11.3 Chkconfig

chkconfig命令用来更新、查询、改动不同执行级上的系统服务。比方安装了httpd服务,而且把启动的脚本放在了/etc/init.d文件夹下,有时候须要开机自己主动启动它,而有时候则不须要,因此,就能够使chkconfig命令来进行控制。

参数 参数说明
--add 将相应的服务加入chkconfig管理
--del 将相应的服务从chkconfig管理中删除
--level 查看相应服务的运行级别

示例:查看开机启动的程序

# chkconfig --list

示例:

# chkconfig telnet on  //开启Telnet 服务
# chkconfig --list   //列出chkconfig 所知道的所有的服务的情况# chkconfig telnet off // 关闭 Telnet 服务
# chkconfig --list   // 列出chkconfig所知道的所有的服务的情况

systemctl 设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令

System V init 命令 systemctl 命令 作用
chkconfig foo on systemctl enable foo.service 开机自动启动
chkconfig foo off systemctl disable foo.service 开机不自动启动
chkconfig foo systemctl is-enabled foo.service 查看特定服务是否为 开机自动启动
chkconfig --list systemctl list-unit-files --type=service 查看各个级别下服务 的启动与禁用情况

附录:

经常使用服务介绍

amd:      # 自己主动安装网络文件系统守侯进程
apmd:      # 高级电源管理
Arpwatch:    # 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库
Autofs:     # 自己主动安装管理进程automount。与NFS相关,依赖于NIS
Bootparamd:   # 引导參数server。为LAN上的无盘工作站提供引导所需的相关信息
crond:     # 计划任务
Dhcpd:     # 启动一个动态IP地址分配server
Gated:     # 网关路由守候进程,使用动态的OSPF路由选择协议
Httpd:     # WEBserver
Inetd:     # 支持多种网络服务的核心守候程序
Innd:      # Usenet新闻server
Linuxconf:   # 同意使用本地WEBserver作为用户接口来配置机器
Lpd:      # 打印server
Mars-nwe:    # mars-nwe文件和用于Novell的打印server
Mcserv:     # Midnight命令文件server
named:     # DNSserver
netfs:     # 安装NFS、Samba和NetWare网络文件系统
network:    # 激活已配置网络接口的脚本程序
nfs:      # 打开NFS服务
nscd:      # nscdserver,用于NIS一个支持服务,它快速缓存用户口令和组成成员关系
portmap:    # RPC portmap管理器,与inetd相似,它管理基于RPC服务的连接
postgresql:   # 一种SQL数据库server。
routed:     # 路由守候进程,使用动态RIP路由选择协议
rstatd:     # 一个为LAN上的其他机器收集和提供系统信息的守候程序
ruserd:     # 这是一个基于RPC的服务。它提供关于当前记录到LAN上一个机器日志中的用户信息
rwalld:     # 这是一项基于RPC的服务。同意用户给每一个注冊到LAN机器的其他终端写消息
rwhod:     # 激活rwhod服务进程。它支持LAN的rwho和ruptime服务
sendmail:    # 邮件serversendmail
smb:      # Samba文件共享/打印服务
snmpd:     # 本地简单网络管理候进程
squid:     # 激活代理serversquid
syslog:     # 一个让系统引导时起动syslog和klogd系统日志守候进程的脚本
xfs:      # X Window字型server,为本地和远程Xserver提供字型集
xntpd:     # 网络时间server
ypbind:     # 为NIS(网络信息系统)客户机激活ypbind服务进程
yppasswdd:   # NIS口令server
ypserv:     # NIS主server
gpm:      # 管鼠标的服务
identd:     # AUTH服务。在提供用户信息方面与finger相似

十二、Linux定时任务

什么是定时任务

定时任务命令是cond,crond就是计划任务,类似于我们平时生活中的闹钟,定点执行。

为什么要用crond

计划任务主要是做一些周期性的任务,比如凌晨3点定时备份数据、晚上23点开启网站抢购接口、凌晨0点关闭抢占接口等。

计划任务主要分为以下两种使用情况:

  1. 系统级别的定时任务

临时文件清理、系统信息采集、日志文件切割

  1. 用户级别的定时任务

定时向互联网同步时间、定时备份系统配置文件、定时备份数据库的数据。

crontab配置文件

进入crontab配置文件

vim /etc/crontab

00  02  *  *  * ls     #每天的凌晨2点整执行
00   02  1  *  * ls     #每月的1日的凌晨2点整执行
00 02 14 2 * ls     #每年的2月14日凌晨2点执行
00 02 * * 7 ls     #每周天的凌晨2点整执行
00 02 * 6 5 ls     #每年的6月周五凌晨2点执行
00 02 14 * 7 ls     #每月14日或每周日的凌晨2点都执行
00 02 14 2 7 ls     #每年2月14日或每年2月的周天的凌晨2点执行 
*/10 02 * * * ls    #每天凌晨2点,每隔10分钟执行一次
* * * * * ls      #每分钟都执行
00 00 14 2 * ls    #每年2月14日的凌晨执行命令 
*/5 * * * * ls     #每隔5分钟执行一次
00 02 * 1,5,8 * ls   #每年的1月5月8月凌晨2点执行
00 02 1-8 * * ls    #每月1号到8号凌晨2点执行
0 21 * * * ls      #每天晚上21:00执行
45 4 1,10,22 * * ls   #每月的1,10,22号的4:45执行
45 4 1-10 * * ls    #每月的1到10号的4:45执行
3,15 8-11 */2 * * ls  #每隔两天上午8点到11点的第3和第15分钟执行
0 23-7/1 * * * ls    #晚上11点到早上7点之间,每隔一个小时执行
15 21 * * 1-5 ls    #周一到周五每天晚上21:15执行

crontab命令选项

crontab   -e            #编辑定时任务
crontab   -l            #查看定时任务
crontab   -r            #删除定时任务
crontab   -u            #指定其他用户

示例

假设在每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把wwwroot文件夹进 行打包处理,使其作为一个备份文件。

25 3 * * 1,3,5 /usr/bin/tar -zcvf backup.tar.gz /opt/wwwroot

十三、Linux网络防火墙

13.1 防火墙管理工具

firewalld工具概述

Centos 系统中集成了多款防火墙管理工具,其中 firewalld服务是默认的防火墙配置管理工具,它拥有基于 CLI(命 令行界面)和基于 GUI(图形用户界面)的两种管理方式。

firewalld 中常用的区域名称及测了规则

区域 默认策略规则
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、 amba-client 与 dhcpv6-client 服务相关,则允许流量
internal 等同于 home 区域
work 拒绝流入的流量,除非与流出的流量数相关;而如果流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务 相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关

firewalld防火墙的配置方式

使用firewall-cmd 命令行工具。

使用firewall-config 图形工具。

编写/etc/firewalld/中的配置文件。

启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: 
systemctl status firewalld 
firewall-cmd --state
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld

命令行终端

Linux 命令时曾经听到,命令行终端是一种极富效率的工作方式, firewalld-cmd 是 firewalld 防火墙配置管理工具的 CLI(命令行界面)版本。

参数 作用
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此 IP 或子网的流量导向指定的区域
--remove-source= 不再将源自此 IP 或子网的流量导向某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启应急状况模式
--panic-off 关闭应急状况模式

注意:

使用 firewalld 配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配 置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正常设置防火墙策略时

添加 --permanent 参数,

这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效

示例:显示当前系统中的默认区域

示例:显示默认区域的所有规则

示例:显示当前正在使用的区域及其对应的网卡接口

示例:设置默认区域

示例:查看默认区域内允许访问的所有服务

示例:添加httpd 服务到public 区域

示例:查看public 区域已配置规则

示例:删除public 区域的httpd 服务

示例:同时添加httpd、https 服务到默认区域,设置成永久生效

firewall-cmd --add-service=http --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --list-all

示例:查看开启的端口列表

 firewall-cmd --zone=public --list-ports 

示例:开启某端口

 firewall-cmd --zone=public --add-port=8080/tcp

示例:关闭端口

 firewall-cmd --zone=public --remove-port=8080/tcp

SELinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。

说明:

当您全神贯注地使用它给照片进行美颜 的时候,它却在后台默默监听着浏览器中输入的密码信息,而这显然不应该是它应做的事情,SELinux 安全子系统就是为了杜绝此类情况 而设计的,它能够从多方面监控违法行为。

  1. 对服务程序的功能进行限制(确保程序干不了出格的事情)
  2. 对文件资源的访问资源限制(SELinux安全上下文确保文件资源只能被其他所属的服务程序进行访问)

SELinux 服务有三种配置模式:

  • enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
  • permissive:遇到服务越权访问时,只发出警告而不强制拦截。
  • disabled:对于越权的行为不警告也不拦截。

vim /etc/selinux/config

十四、Linux内核机制

今天为大家解读一副来自极客漫画网站作者Daniel Stori关于Linux 有趣的作品。

bug:

一、xshell无法连接到虚拟机:

1、执行下面命令

ifconfig

执行完该命令之后我们可以发现ifconfig中没有ens33这个文件。

2、执行下面命令

systemctl stop NetworkManager

3、执行下面命令

systemctl disable NetworkManager

4、激活链接

ifup ens33

5、重启网络服务

service network restart

再次查看发现ens33文件存在。

生产环境部署与协同开发 Linux相关推荐

  1. JAVA开发与运维(web生产环境部署)

    web生产环境部署,往往是分布式,和开发环境或者测试环境我们一般使用单机不同. 一.部署内容 1.后端服务 2.后台管理系统vue 3.小程序 二.所需要服务器 5台前端服务器 8台后端服务 三.所需 ...

  2. Linux高级实战部署--LNMP生产环境部署(mysql,nginx,php编译安装,项目部署)

    LNMP生产环境部署 一.编译安装 MySQL MySQL 类型 #### 1.MySQL Community Server - MySQL Community Server是社区版本,开源免费,但不 ...

  3. Spring Boot 最佳实践(二)集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  4. 深度学习TensorFlow生产环境部署(环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

  5. python生产环境部署

    文章目录 一.前言 二.准备工作 三.安装python 四.安装虚拟环境 一.前言 在实际工作中,很多公司的生产环境都是隔离外网的,而且往往多个项目组共用相同的服务器,因此经常会遇到两个问题: pyt ...

  6. SpringBoot与ElasticSearch、ActiveMQ、RocketMQ的整合及多环境配置、响应式框架WebFlux、服务器端主动推送SSE技术、生产环境部署、Actuator监控平台

    1.SpringBoot 与 ElasticSearch 框架的整合 (1)主要的搜索框架:MySQL.Solr.ElasticSearch MySQL:使用 like 进行模糊查询,存在性能问题 S ...

  7. Vue.js 生产环境部署

    生产环境部署 开启生产环境模式 开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱.而在生产环境下,这些警告语句却没有用,反而会增加应用的体积.此外,有些警告检查还有一些小的运行时开销,这在 ...

  8. 如何让nginx执行python代码_生产环境部署Python语言代码(django+uwsgi+nginx)

    本文主要向大家介绍了生产环境部署Python语言代码(django+uwsgi+nginx),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 基础环境不做介绍,在django开发w ...

  9. django生产环境部署

    最近尝试进行一些python web生产环境部署的任务.主要是使用django框架进行web开发.本地使用windows + python3.7可是上到服务器之后是ubuntu系统.ubuntu默认是 ...

最新文章

  1. RHEL(RedHat Enterprise Linux)5/6 ISO镜像下载
  2. python——类和对象之__dict__属性的使用
  3. VTK:Utilities之CommandSubclass
  4. lenovo Think Centre TCM 开发环境搭建
  5. JavaMail中解决中文附件名乱码的问题
  6. Hadoop的Python框架指南
  7. caused by: java.lang.outofmemory_Caused by: java.lang.OutOfMemoryError: PermGen space
  8. wireshark执行XDG问题
  9. matlab求hurst,请问如何用MATLAB计算大盘的HURST
  10. 【转载】SAP物料基本计量单位的更改
  11. UE4 键盘控制开关灯
  12. VSCode 返回上一个光标 (上一个浏览位置)
  13. 如何写出好的SEO标题,网页标题SEO优化的方法
  14. 风变python培训班学费一般多少
  15. 刘东明微信营销二十五式初探(一)
  16. 国内哪家云服务器好?
  17. RNA修饰技术介绍|介孔二氧化硅纳米颗粒(MSN)搭载的微小RNA-24(miR-24)纳米载体复合物
  18. Runtime error go fuck yourself
  19. Python实现整蛊恶搞程序生成exe文件小弹窗祝福发给好兄弟好闺蜜好室友
  20. Java最方便的安装和配置步骤

热门文章

  1. c语言srcpy,【Scrcpy电脑版】Scrcpy电脑远程控制软件下载 官方免费版-开心电玩
  2. 《Java基础》从入门到放弃系列 万字超详
  3. 马洪杰:标准化与金融科技创新互动发展实践
  4. 基于人脸识别的火车站监控解决方案(图)
  5. 探索js让你的网页“自己开口说话”
  6. 【转载】十进制小数转二进制小数方法
  7. 磁盘整理,解决无法压缩C盘多余空间的问题(无法将卷压缩到超出任何不可移动的文件所在的点)
  8. JLink固件丢失解决方法
  9. [GEF循序渐进系列之二]GEF概述
  10. Gigabit Ethernet - 1000 BASE-T