Linux(从入门到精通)

Linux概述

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

Linux特点

首先Linux作为自由软件有两个特点:一是它免费提供源代码,二是爱好者可以根据自己的需要自由修改、复制和发布源码

Linux的各个发行版本

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

Red Hat Linux
Ubuntu Linux 界面 桌面系统
SuSE Linux
Gentoo Linux
其他 Linux 发行版

Linux应用领域

IT服务器
嵌入式
个人桌面

Linux和Windows区别

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

主要区别如下

实时效果反馈

1. 下面发行版本中,不是Linux的是:

Ubantu

Debian

Centos

windows

2. Linux内核1.0的发布时间:

1991

1993

1992

1994

答案

1=>D 2=>A

Linux下载安装

安装VMWare虚拟机

VMware是一个老牌的虚拟化软件。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整。

下载CentOS

进入Centos官网找要下载的版本Index of /

如需遇到下载慢可以访问阿里镜像地址

centos-vault安装包下载_开源镜像站-阿里云

安装CentOS

实时效果反馈

1. 安装Linux系统使用哪个虚拟化软件进行安装__

VMware

Idea

VSCode

pycham

2. Linux安装时下面哪一种说法不正确的是。

在安装了windows的计算机上,可以再安装一个Linux系统

在安装了Linux的计算机上,可以再安装一个Linux系统

虚拟机中只能安装一台Linux系统

安装Linux时需要先下载Centos的镜像文件

答案

1=>A 2=>C

Linux三种网络配置

背景

A是本机,A1,A2是虚拟机,B是外部联网的机器(同事的电脑)

桥接模式

相当于在物理主机与虚拟机网卡之间架设了一座桥梁,从而可以通过物理 主机的网卡访问外网。

注意:

桥接模式配置简单,但如果你的网络环境是ip资源很缺少或对ip管理比较严格的话。

bridge(桥接模式): A可以和A1,A2互通,A1,A2 -> B可以,B -> A1,A2可以

NAT

让 VM 虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟 的主机可以通过物理主机访问外网,在真机中 NAT 虚拟机网卡对应的物理网卡是 VMnet8。

注意:

实际上VMware Network Adapter VMnet8的作用是为了实现虚拟机和主机之间相互通信!

Nat(网络地址转换): A可以和A1,A2互通,A1,A2 -> B可以,B -> A1,A2不行

Host-only

仅让虚拟机内的主机与物理主机通信,不能访问外网,在真机中仅主机 模式模拟网卡对应的物理网卡是 VMnet1。

注意: NAT和host-only 不会占用一个ip地址,只能和你的本机进行通讯。NAT和host-only还有一个区别就是,host-only只能和你的本机进行通讯,不可以访问。

host-only(主机模式): A可以和A1,A2互通,A1,A2 -> B不可以,B -> A1,A2不行

实时效果反馈

1. Linux系统中_____网络模式最安全。

Nat

主机

桥接

ssh

2. Linux系统中想访问同事电脑虚拟机中的Mysql服务使用__网络模式。

Nat

主机

桥接

ssh

答案

1=>B 2=>C

Linux 远程登录

配置Nat网络模式

网络规划:

网关配置: 192.168.66.1

虚拟机ip:192.168.66.100

主机中vmnet8:192.168.66.10

设置虚拟交换机网关

管理员授权

设置子网打开NAT设置

设置网关

配置vmware8网卡

设置IPV4

配置网络和DNS服务

登录到Linux编辑网卡文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33

#修改为静态ip地址

#BOOTPROTO=none

BOOTPROTO=static

#修改为开机自启动网卡

#ONBOOT=NO

ONBOOT=yes

#配置ip

IPADDR=192.168.66.100

#子网掩码

NETMASK=255.255.255.0

#网关

GATEWAY=192.168.66.1

#配置的阿里的

DNS1=223.5.5.5

DNS2=223.6.6.6

# 保存退出  :wq

# 重启网卡  service network restart

 

设置XShell连接

连接主机

实时效果反馈

1. Linux系统中远程连接通过___服务实现的远程登录功能。

NetWork

httpd

SSH

CDMA

2. Linux系统配置NAT网络模式时,为什么要配置本机VMware8的网卡。

A 网速会变快

B 主机和虚拟机之间通信

C 激活网卡

D 配置动态IP

答案

1=>C 2=>B

Linux系统目录结构

文件系统组织结构

/lib

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

/lost+found

一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/etc

所有系统管理所需要的配置文件和子目录。my.conf

/usr

用户的很多应用程序和文件都放在这个目录下。

/bin

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

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

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

/home

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

/root

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

/boot

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

/proc

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

/srv

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

/sys

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

/tmp

存放临时文件

/dev

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

/media

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

/mnt

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

/opt

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

/usr/local

这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

/var

这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。

/selinux [security-enhanced linux] 类似 360

Selinux是一种安全子系统,它能控制程序只能访同特定文件。

登录系统后,在当前命令窗口下输入命令:

ls /

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

实时效果反馈

1. 创建新用户之后,该用户的家目录在___目录内。

/home

/root

/share

/usr

2. Linux系统中哪个是根目录。

/

/etc

/usr

/tmp

答案

1=>A 2=>A

Linux用户和用户组

用户管理概述

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

用户账号和用户组

用户概念

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

用户组概念

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

Linux用户和组的关系

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

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

实时效果反馈

1. Linux系统中超级管理员是____

root

baizhan

etc

home

2. Linux是一个_____系统。

多用户多任务

多用户单任务

单用户单任务

单用户多任务

答案

1=>A 2=>A

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 解释器

参数

用户名:要创建的用户名。

示例 1

下面我们创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。在下 面的命令中,请注意/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。 一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中:

[root@itbaizhan ~]
# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe

[root@itbaizhan ~]
# id linuxprobe

uid
=
8888(linuxprobe)
gid
=
8888(linuxprobe)
groups
=
8888(linuxprobe)

修改用户 usermod

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

语法

usermod (选项) (参数)

选项:

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

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

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

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

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

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

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

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

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

 -u:修改用户ID;

 -U:解除密码锁定。

示例1

来看一下账户 linuxprobe 的默认信息:

id linuxprobe

uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)

然后将用户 linuxprobe 加入到 root 用户组中,这样扩展组列表中则会出现 root 用户组的 字样,而基本组不会受到影响:

[root@itbaizhan ~]# usermod -G root linuxprobe



[root@itbaizhan ~]# id linuxprobe



uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

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

[root@linuxprobe ~]# usermod -u 8888 linuxprobe



[root@linuxprobe ~]# id linuxprobe



uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

用户账号口令管理

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

语法

passwd (选项) (参数)

选项:

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

 -f:强制执行;

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

 -l:锁住密码;

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

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

示例1

用root帮linuxpro修改密码

passwd linuxpro

示例2

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

[root@itbaizhan ~]# passwd -l linuxprobe



Locking password for user linuxprobe.



passwd: Success



[root@itbaizhan ~]# passwd -S linuxprobe



linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.)



[root@itbaizhan ~]# passwd -u linuxprobe



Unlocking password for user linuxprobe.



passwd: Success



[root@itbaizhan ~]# passwd -S linuxprobe



linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)

删除用户 userdel

userdel 命令用于删除用户

语法:

userdel [选项] 用户名

选项:

-f 强制删除用户

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

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

/etc/passwd
/etc/shadow
/home/username

语法:

[root@localhost~]#userdel [-r] username

参数:

-r : 连同用户的家目录也一起删除。

示例1

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

[root@itbaizhan ~]# id linuxprobe



uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)



[root@itbaizhan ~]# userdel -r linuxprobe



[root@itbaizhan ~]# id linuxprobe



id: linuxprobe: no such user

实时效果反馈

1. 新增一个用户使用命令是__

usradd

adduser

addaccount

useradd

2. Linux系统中如何查看用户信息

id

ls

cd

usermod

答案

1=>D 2=>A

Linux用户组管理

添加新组groupadd


语法

groupadd (选项) (参数)

选项

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

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

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

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

示例1

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

groupadd -g 334 bigdata

修改群组groupmod


语法

groupmod(选项)(参数)

选项

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

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

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

示例1

把建立bigdata组改为bigdata2并设置GID改为506

groupmod -g 506 -n bigdata2 bigdata

删除群组groupdel


语法:

groupdel groupname

实时效果反馈

1. Linux系统创建用户组使用_____命令。

groupadd

addgroup

groupmod

groupdel

2. Linux系统删除用户组使用_____命令。

groupadd

addgroup

groupmod

groupdel

答案

1=>A 2=>D

Linux超级用户与伪用户

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

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

用户身份切换

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

su

su命令就是切换用户的工具。

语法

su [-fmp] [-c command] [-s shell] [–help] [–version] [-] [USER [ARG]]

参数说明

-c command 或 –command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
– -l 或 –login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root

示例1

[root@itbaizhan ~]# id



uid=0(root) gid=0(root) groups=0(root)



[root@itbaizhan ~]# su – linuxprobe



Last login: Wed Jan 4 01:17:25 EST 2017 on pts/0



[linuxprobe@linuxprobe ~]$ id



uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe) context=unconfined_



u:unconfined_r:unconfined_t:s0-s0:c0.c1023

注意:

上面的 su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强 烈建议在切换用户身份时添加这个减号(-)。

sudo

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

语法:

sudo [参数] 命令名称

参数:

-h 列出帮助信息

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

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

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

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

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

总结

sudo 命令具有如下功能:

限制用户执行指定的命令:
记录用户执行的每一条命令;
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。

编辑配置文件命令: visudo 来配置用户权限。

按照下 面的格式将第 99 行(大约)填写上指定的信息:

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

注意

编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。

示例1

配置baizhan拥有root的权限

visudo



baizhan ALL=(ALL) ALL

示例2

在每次执行 sudo 命令后都会要求验证一下密码。

[root@location opt]$ touch a.info



#切换用户



[baizhan@location ~]# su baizhan



#删除a.info文件



[baizhan@location ~]# rm -rf a.info



rm: cannot remove ‘a.info/’: Permission denied



[baizhan@location ~]# sudo rm -rf a.info

这样,当切换到普通用户后再执行命令时,就不用再频繁地验证密码了,我们在日常工 作中也就痛快至极了。

visudo



baizhan ALL=NOPASSWD: ALL

实时效果反馈

1. 在Linux系统中,root管理员UID是___。

0

1

2

3

2.在Linux系统中,关于sudo命令描述错误的是。

限制用户执行指定的命令

记录用户执行的每一条命令

配置文件提供集中的用户管理

sudo命令用来替换su命令

答案

1=>A 2=>D

Linux文件基本属性

显示文件属性

ls命令

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

语法:

ls [参数]

参数:

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

文件与目录操作

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

Linux文件类型

Linux文件类型

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

文件权限

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

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

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

例如,我们以 root 的身份登陆 Linux,并执行如下指令:

[root@localhost ~]# ls -al



total 156



drwxr-x—. 4 root root 4096 Sep 8 14:06 .



drwxr-xr-x. 23 root root 4096 Sep 8 14:21 ..

解析:

文件设定不同用户的读、写和执行权限,仅涉及到 9 位字符

实时效果反馈

1. 在Linux系统中显示指定工作目录下内容的命令是。

su

cp

cd

ls

2.下面不属于Linux文件类型的是。

A 目录文件

B 普通文件

C 链接文件

D 驱动文件

答案

1=>D 2=>D

Linux权限字与权限操作

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

改变所属群组chgrp

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

语法:

chgrp [-R] 属组名 文件名

参数选项

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

改变文件属性chmod

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

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

文字设定法

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

user:用户
group:组
others:其他

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

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

语法:

chmod [who] [+ | – | =] [mode]

操作对象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 : 显示版本

数字设定法

我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4
w:2
x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: – rwx r– r-x 分数则是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+0+0 = 4
others= — = 4+0+1 = 5

所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:

chmod [-R] xyz 文件或目录

选项:

xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

示例1

如果我们需要将文件权限设置为 – rwx r-x r– 。

chomd 754 a.info

示例2

将 .bashrc 这个文件所有的权限都设定启用。

chmod 777 .bashrc

改变文件拥有者chown


更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名



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

示例:

进入 /root 目录(~)将install.log的拥有者改为bin这个账号:

[root@itbaizhan ~] cd ~



[root@itbaizhan ~]# chown bin install.log



[root@itbaizhan ~]# ls -l



-rw-r–r– 1 bin users 68495 Jun 25 08:53 install.log

将install.log的拥有者与群组改回为root:

[root@itbaizhan ~]# chown root:root install.log



[root@itbaizhan ~]# ls -l



-rw-r–r– 1 root root 68495 Jun 25 08:53 install.log

实时效果反馈

1. 在Linux系统中修改文件拥有者的命令是?

chgrp

chmod

chown

chother

2. chmod u+w,o-x text 该命令正确的意思是。

A 文件属主u删除执行权限

B 文件属主u增加写权限

C 其他用户 ( o ) 增加执行权限

D 其他用户 ( o ) 删除写权限

答案

1=>C 2=>B

Linux路径

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

注意事项:

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

绝对路径

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

注意:

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

相对路径

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

注意:

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

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

. : 当前用户所在目录

.. :表示上一级目录

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

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

实时效果反馈

1. 相对路径必须以__开头:

/

/usr

.

/usr/local

2. 绝对路径必须以__开头

.

..

../../

/

答案

1=>C 2=>D

Linux处理文件目录的常用命令

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


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

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

选项与参数:

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

pwd示例:

[root@itbaizhan ~]# pwd

/root <== 显示出目录啦~

注意:

pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!

mkdir (创建新目录)


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

语法:

mkdir [-mp] 目录名称

选项与参数:

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

mkdir示例

[root@itbaizhan ~]# cd /tmp



[root@itbaizhan tmp]# mkdir test <==创建一名为 test 的新目录



[root@itbaizhan tmp]# mkdir test1/test2/test3/test4



[root@itbaizhan ~]# mkdir -m 711 test2

rmdir (删除空的目录)


语法:

rmdir [-p] 目录名称

选项与参数:

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

删除 runoob 目录

rmdir示例:

[root@itbaizhan tmp]# rmdir itbaizhan/

cp (复制文件或目录)


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

语法:

[root@itbaizhan ~]# cp [-adfilprsu] 来源档 目标档

选项与参数:

-r:递归持续复制,用於目录的复制行为

cp示例:

[root@itbaizhan ~]# cp ~/.bashrc /tmp/bashrc



[root@itbaizhan ~]# cp -i ~/.bashrc /tmp/bashrc

cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖

rm (删除文件或者目录)


语法:

rm [-fir] 文件或目录

选项与参数:

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

rm示例:

[root@www tmp]# rm -i bashrc



rm: remove regular file `bashrc'? y

如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

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


语法:

[root@itbaizhan ~]# mv [-fiu] source destination



[root@itbaizhan ~]# mv [options] source1 source2 source3 …. directory

选项与参数:

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

mv示例:

[root@itbaizhan ~]# cd /tmp



[root@itbaizhan tmp]# cp ~/.bashrc bashrc



[root@itbaizhan tmp]# mkdir mvtest



[root@itbaizhan tmp]# mv bashrc mvtest

实时效果反馈

1. mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是__:

-m

-d

-f

-p

2. 删除文件命令为___。

mkdir

cp

mv

rm

答案

1=>D 2=>D

Linux文件编辑工具vi/vim

vi/vim 的使用

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

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

命令模式(Command mode)
输入模式(Insert mode)
底线命令模式(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 删除字符

输入模式

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

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

字符按键以及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
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串

shift+zz 保存退出

vi/vim 使用实例

编辑模式

在一般模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的!

要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。

常用语法

1)进入编辑模式

(1)i 当前光标前

(2)a 当前光标后

(3)o 当前光标行的下一行

2)退出编辑模式

按『Esc』键

指令模式

在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!

常用语法

基本语法

: 选项

w 保存

q 退出

! 感叹号强制执行

/ 查找,/被查找词,n是查找下一个,shift+n是往上查找
? 查找,?被查找词,n是查找上一个,shift+n是往下查找

示例:

: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
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串

实时效果反馈

1.Vim编辑器如何进入编辑模式_____。

a

p

q

w

2.Vim编辑器中如何保存退出文本_____。

:wq

:w

shift

ctrl

答案

1=>D 2=>A

Linux文件内容查看命令

cat(显示文件内容)


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

语法:

cat [-AbEnTv]

选项与参数:

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

cat示例:

[root@itbaizhan ~]# cat /etc/issue



CentOS release 6.4 (Final)



Kernel
on an m

tac(倒着显示文件内容)


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



[root@itbaizhan ~]# tac /etc/issue



Kernel
on an m



CentOS release 6.4 (Final)

nl(显示行号)


语法:

nl [-bnw] 文件

选项与参数:

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

nl示例:

[root@itbaizhan ~]# nl /etc/issue



1 CentOS release 6.4 (Final)



2 Kernel
on an m

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


一页一页翻动

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

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

more示例:

[root@itbaizhan ~]# more /etc/man_db.config



#



# Generated automatically from man.conf.in by the



# configure script.



#



# man.conf from man-1.6d



….(中间省略)….



–More–(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令

less(往前翻页)


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

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

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

示例:

[root@itbaizhan ~]# less /etc/man.config



#



# Generated automatically from man.conf.in by the



# configure script.



#



# man.conf from man-1.6d



….(中间省略)….



: <== 这里可以等待你输入命令!

head(只看头几行)


取出文件前面几行

语法:

head [-n number] 文件

选项与参数:

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

head示例:

head -n 20 /etc/man.config

tail(只看尾几行)


取出文件后面几行

语法:

tail [-n number] 文件

选项与参数:

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

tail示例:

[root@itbaizhan ~]# tail /etc/man.config



#
默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:



[root@itbaizhan ~]# tail -n 20 /etc/man.config



实时效果反馈

1. Linux系统中分页显示文件内容的命令是_____。

cat

head

more

nl

2.Linux系统中如何只看文件尾几行该使用____命令。

cat

tac

head

tail

答案

1=>C 2=>D

Linux打包压缩与搜索命令

tar 命令

语法:

tar [选项] [文件]

选项:

-c 产生.tar打包文件

-v 显示详细信息

-f 指定压缩后的文件名

-z 打包同时压缩 Gzip

-x 解包.tar文件

示例1

压缩多个文件

tar -zcvf XXX.tar.gz n1.txt n2.txt

示例2

压缩目录

tar -zcvf test.java.tar.gz test1

示例3

解压:tar -zxvf XXX.tar.gz

解压到当前目录



[root@itbaizhan opt]# tar -zxvf test.tar.gz



解压到/opt目录



[root@itbaizhan opt]# tar -zxvf test.tar.gz –C /opt

gzip/gunzip压缩

语法:

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



gunzip+文件.gz (功能描述:解压缩文件命令)

示例1

gzip压缩

[root@itbaizhan opt]# ls



test.java



[root@itbaizhan opt]# gzip test.java



[root@itbaizhan opt]# ls

示例2

gunzip解压缩文件

[root@itbaizhan opt]# gunzip test.java.gz



[root@itbaizhan opt]# ls



test.java

搜索命令

grep 命令

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

语法:

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

选项:

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

-c 仅显示找到的行数

-i 忽略大小写

-n 显示行号

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

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

示例1

[root@itbaizhan ~]# grep /sbin/nologin /etc/passwd

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 …… {}; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)

示例1

按文件名:根据名称查找/目录下的filename.txt文件。

find /opt/ -name *.txt

示例2

按拥有者:查找/opt目录下,用户名称为-user的文件

find /opt/ -user atguigu

实时效果反馈

1. Linux系统中tar命令解包的参数是____

-c

-v

-z

-x

2.Linux系统中搜索文件使用哪个命令。

grep

find

head

tail

答案

1=>D 2=>B

Linux常用系统工作命令

reboot 命令

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

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

[root@linuxprobe ~]# reboot

poweroff 命令

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

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

[root@linuxprobe ~]# poweroff

wget 命令

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

语法:

wget [参数] 下载地址

参数:

-b 后台下载模式

-P 下载到指定目录

-t 最大尝试次数

-c 断点续传

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

-r 递归下载

示例1

尝试使用 wget 命令下载tomcat。

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.54/bin/apache-tomcat-9.0.54.tar.gz

报错:

ERROR: cannot verify dlcdn.apache.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:



解决:

#安装下面这个模块后再去下载就可以了

yum install -y ca-certificates

实时效果反馈

1. Linux系统中,一般( )命令来进行网络下载

wget

poweroff

reboot

echo

答案

1=>A

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

输入输出重定向

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

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

示例1

比如我们分别查看两个文件的属性信息,其中第二个文件是不存在的,虽然针对这两个 文件的操作都分别会在屏幕上输出一些数据信息,但这两个操作的差异其实很大:

[root@itbaizhan ~]# touch itbaizhan



[root@itbaizhan ~]# ls -l itbaizhan



-rw-r–r–. 1 root root 0 Aug 5 05:35 itbaizhan



[root@itbaizhan ~]# ls -l xxxxxx



ls: cannot access xxxxxx: No such file or directory

注意:

在上述命令中,名为 itbaizhan的文件是存在的,输出信息是该文件的一些相关权限、 所有者、所属组、文件大小及修改时间等信息,这也是该命令的标准输出信息。而名为 xxxxxx 的第二个文件是不存在的,因此在执行完 ls 命令之后显示的报错提示信息也是该命令的错误输出信息。那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两 种输出信息。

输入重定向作用表

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

输出重定向作用表

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

注意:

对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2 是必须要写的。我们先来小试牛刀。通过标准输出重定向将 man bash 命令原本要输出到屏幕的信息 写入到文件readme.txt 中,然后显示readme.txt 文件中的内容。

示例2

如果想把命令的报错信息写入到文件,该怎么操作呢?

[root@itbaizhan ~]# ls -l xxxxxx



cannot access xxxxxx: No such file or directory



[root@itbaizhan ~]# ls -l xxxxxx > /root/stderr.txt



cannot access xxxxxx: No such file or directory



[root@itbaizhan ~]# ls -l xxxxxx 2> /root/stderr.txt



[root@itbaizhan ~]# cat /root/stderr.txt



ls: cannot access xxxxxx: No such file or directory

管道命令符

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

示例1

找出被限制登录用户的命令是 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

命令行的通配符

现象:

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

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

示例1

[root@itbaizhan ~]# ls -l /dev/sda*



brw-rw—-. 1 root disk 8, 0 May 4 15:55 /dev/sda



brw-rw—-. 1 root disk 8, 1 May 4 15:55 /dev/sda1



brw-rw—-. 1 root disk 8, 2 May 4 15:55 /dev/sda2

如果只想查看文件名为 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息, 该怎么操作呢?这时就需要用到问号来进行通配了。

[root@itbaizhan ~]# ls -l /dev/sda?



brw-rw—-. 1 root disk 8, 1 May 4 15:55 /dev/sda1



brw-rw—-. 1 root disk 8, 2 May 4 15:55 /dev/sda2

除了使用[0-9]来匹配 0~9 之间的单个数字,也可以用[135]这样的方式仅匹配这三个指定 数字中的一个,若没有匹配到,则不会显示出来:

[root@itbaizhan ~]# ls -l /dev/sda[0-9]



brw-rw—-. 1 root disk 8, 1 May 4 15:55 /dev/sda1



brw-rw—-. 1 root disk 8, 2 May 4 15:55 /dev/sda2



[root@itbaizhan ~]# ls -l /dev/sda[135]



brw-rw—-. 1 root disk 8, 1 May 4 15:55 /dev/sda1

重要的环境变量

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

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

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

系统级
/etc/profile

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

提示:

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

source /etc/profile



echo $PATH

用户级
~/.profile(推荐首选)

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

示例1

配置tomcat环境变量

vim /etc/profile



export TOMCAT_HOME=



export PATH=$PATH:$TOMCAT_HOME/bin

实时效果反馈

1. ls 命令的正常输出信息追加写入到 error.txt 文件中的命令是什么?

ls >> error.txt

ls > error.txt

ls 2> error.txt

ls 2> error.txt

2. Linux系统中针对管道符描述正确的是?

A 右边面命令的输出值作为左面命令

B 只能使用一个管道符

C 管道符的格式为“命令 A / 命令 B”

D 左面命令的输出值作为右面命令

答案

1=>A 2=>D

Linux磁盘管理

分区的方式

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

Linux分区原理

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

df命令


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

语法:

df [选项] [目录或文件名]

选项:

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

示例1:

各列信息的含义:

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

lsblk命令

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

参数:

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

参考实例

显示系统中所有磁盘设备的使用情况信息:

fdisk命令

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

重要参数:

-l 列出素所有分区表

菜单操作说明

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

参考实例

显示当前分区情况:

[root@localhost ~]# fdisk -l

实时效果反馈

1. Linux系统中fdisk命令的作用是__

A 查看CPU使用率

B 压缩文件

C 查看端口号

D 创建和维护分区表的程序

2. Linux系统中df命令的作用是_____。

A 查看CPU使用率

B 查看磁盘使用情况

C 查看内存使用情况

D 查看网络信息

答案

1=>D 2=>B

Linux挂载硬盘

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

虚拟机添加硬盘

分区

设置分区

fdisk /dev/sdb

选项:

按n : 添加新的分区
按p : 你是不是要化一个主分区
按1 : 主分区编号
按回车2次:设置分区大小
按w : 把数据写入硬盘退出

查看分区

lsblk -f

格式化

mkfs -t ext4 /dev/sdb1

挂载

先创建目录 /home/itbaizhan

mount /dev/sdb1 /home/itbaizhan

菜鸟雷区:

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

永久挂载

vim /etc/fstab

mount -a

Linux系统状态检测命令

ip addr 命令


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

uname 命令


uname 命令用于查看系统内核与系统版本等信息。

uname -a



Linux zk3 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

注意:

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

顺带一提,如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件,其命 令以及相应的结果如下:

cat /etc/redhat-release



CentOS Linux release 7.9.2009 (Core)

free 命令

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

free -h

注意:

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

last 命令

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

语法:

last [参数]

注意:

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

[root@zk3 opt]# last

history 命令

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

语法:

history [-c]

注意:

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

uptime 命令

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

[root@zk3 opt]# uptime



17:56:03 up 7:14, 2 users, load average: 0.02, 0.02, 0.05

注意:

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

实时效果反馈

1. Linux系统中ifconfig(ip addr)命令作用是__

A 查看磁盘使用情况

B 获取网卡配置和网络状态信息

C 查看CPU占用率

D 查看计算机负载

答案

1=>B

Linux下软件安装的命令

源码安装

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

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

YUM

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

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

注意:

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

YUM的配置文件
容器说明

虽然yum是你在联网后就能直接使用,不过,由于你系统的站点镜像没选择好,会导致连接速度非常慢!所以,这时候就需要我们去手动修改yum的设置文档了。

容器查询

首先,可以先查询一下目录yum server所使用的容器有哪些。

使用命令:yum repolist all,查询结果如下:

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

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

配置文件修改

打开配置文件:vi /etc/yum.repos.d/CentOS-Base.repo,内容如下

配置文件的说明:

[base]:代表容器的名字。中括号一定要存在,里面的名称可以随意起,但不能有两个相同的容器名称,否则yum会不知道去哪里找容器相关软件列表文件。

name:只是说明一下这个容器的意义而已,重要性不高。

mirrorlist:列出这个容器可以使用的镜像站点,如果不想使用可以批注掉这一行。

baseurl:这个最重要,因为后面接的就是容器的实际网址。mirrorlist是由yum程序自行去找镜像站点, baseurl则是指定固定的一个容器网址。

enable=1:启动这个容器,默认值也为1。关闭这个容器可以设置enable=0。

gpgcheck=1:指定是否需要查阅RPM文件内的数字证书。

gpgkey:数字证书的公钥文件所在位置,使用默认值即可。

注意:

1)yum会自动识别/etc/yum.repos.d/目录以.repo结尾的文件。

2)当我们修改了配置文件的网址却没有修改容器名称,可以会造成本机的列表与yum服务器的列表不同步,这时就需要手动来清除容器的数据了:

语法:yum clean [packages|headers|all]

参数:

packages:将已下载的软件文件删除

headers:将下载的软件文件头删除

all:将所有容器数据都删除

例:删除已下载过的所有容器相关数据(含软件本身与列表)

yum clean all

示例1

配置阿里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

实时效果反馈

1. Linux系统中下列描述RPM与Yum软件仓库错误的是。

A RPM 是为了简化安装的复杂度

B Yum 软件仓库是为了解决软件包之间的依赖关系

C Yum配置合理的仓库地址可以提高安装速度

D Yum是rpm替代品

2. Linux系统中如何使用yum安装httpd服务

yum install httpd

yum clean

yum list all

yum update httpd

答案

1=>D 2=>A

Linux下常用软件安装_JDK和Tomcat安装

Jdk 安装

解压jdk安装包

tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local

配置环境变量

vim /etc/profile



底部加入如下配置



export JAVA_HOME=/usr/local/jdk



export PATH=$PATH:$JAVA_HOME/bin

生效环境变量

source /etc/profile

Tomcat 安装

解压Tomcat安装包

tar -zxvf apache-tomcat-9.0.54.tar.gz -C /usr/local

配置环境变量

export TOMCAT_HOME=/usr/local/tomcat



export PATH=$PATH:$TOMCAT_HOME/bin:$JAVA_HOME/bin

实时效果反馈

1. Linux系统中生效环境变量的命令是___。

reboot

yum clean

source /etc/init.d

source /etc/profile

答案

1=>D

Linux下常用软件安装_Mysql安装

下载mysql的YUM库

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

安装YUM库

rpm -ivh mysql57-community-release-el7-10.noarch.rpm

安装数据库(–nogpgcheck就是不进行验证)

yum -y install mysql-community-server –nogpgcheck

完成安装,重启mysql

systemctl restart mysqld

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

grep “password” /var/log/mysqld.log



[root@hadoop8 ~]# grep “password” /var/log/mysqld.log



2018-10-13T08:33:27.994868Z 1 [Note] A temporary password is generated for root@localhost: yj0v.0w*ywPk

复制粘贴上边的密码进入数据库

mysql -uroot -p

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

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';



Your password does not satisfy the current policy requirements

解决报错

修改密码策略

因为当前的密码太复杂不方便后期做实验,所以使用命令修改密码策略两种方式:

mysql> set global validate_password_policy=0;



Query OK, 0 rows affected (0.00 sec)



mysql> set global validate_password_policy=LOW;



Query OK, 0 rows affected (0.00 sec)



mysql> SET GLOBAL validate_password_length=6;



Query OK, 0 rows affected (0.00 sec)



注:执行完初始化命令后需要输入数据库root用户密码



注:密码策略分四种



1、OFF(关闭) 2、LOW(低) 3、MEDIUM(中) 4、STRONG(强)

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

开启远程连接(先关闭防火墙)

再开启

select User,Host,Password from user;



update user set host =”%” where user = “root”



刷新信息



mysql> flush privileges;

实时效果反馈

1. Mysql数据库如何开启远程连接___。

update user set host ="%" where user = “root”

flush privileges;

select User,Host,Password from user;

insert user into user host value (%,user)

2. 安装Mysql数据库报如下错误原因是Your password does not satisfy the current policy requirements____。

A 无权限

B 防火墙没关

C 密码太简单

D 语句错误

答案

1=>A 2=>C

Linux下常用软件安装_MySQL卸载

检查是否安装了MySQL组件。

[root@localhost ~]# rpm -qa | grep -i mysql



mysql57-community-release-el7-10.noarch



mysql-community-libs-5.7.36-1.el7.x86_64



mysql-community-server-5.7.36-1.el7.x86_64



mysql-community-common-5.7.36-1.el7.x86_64



mysql-community-client-5.7.36-1.el7.x86_64



mysql-community-libs-compat-5.7.36-1.el7.x86_64

卸载前关闭MySQL服务

systemctl stop mysqld



systemctl status mysqld

收集MySQL对应的文件夹信息

whereis mysql



mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

卸载删除MySQL各类组件(–nodeps就是不检查依赖关系)

rpm -ev –nodeps mysql57-community-release-el7-10.noarch



rpm -ev –nodeps mysql-community-libs-5.7.36-1.el7.x86_64



rpm -ev –nodeps mysql-community-server-5.7.36-1.el7.x86_64



rpm -ev –nodeps mysql-community-common-5.7.36-1.el7.x86_64



rpm -ev –nodeps mysql-community-client-5.7.36-1.el7.x86_64



rpm -ev –nodeps mysql-community-libs-compat-5.7.36-1.el7.x86_64

删除MySQL对应的文件夹

[root@DB-Server init.d]# whereis mysql



mysql:




[root@DB-Server init.d]# find / -name mysql



/var/lib/mysql



/var/lib/mysql/mysql



/usr/lib64/mysql



[root@DB-Server init.d]# rm -rf /var/lib/mysql



[root@DB-Server init.d]# rm -rf /var/lib/mysql/mysql



[root@DB-Server init.d]# rm -rf /usr/lib64/mysql

删除mysql用户及用户组

[root@DB-Server init.d]# rpm -qa | grep -i mysql

实时效果反馈

1. Linux系统中卸载mysql组件rpm命令使用___参数。

-zxvf

-rf

-remove

-ev

答案

1=>D

Linux进程管理

ps


查看系统中所有进程

语法:

ps [options] [–help]

参数

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

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

示例1

列出目前所有的正在内存当中的进程。

相关信息:

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

UID:程序被该 UID 所拥有。

PID:就是这个程序的 ID 。

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

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

STAT:

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

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

COMMAND:该进程的实际指令

示例2

找出和cron 与 syslog 这两个服务有关的PID号码。

[root@zk3 home]# ps -aux|egrep '(cron|syslog)'



root 714 0.0 0.1 126388 1680 ? Ss Oct17 0:01 /usr/sbin/crond -n



root 1069 0.0 0.4 222780 4552 ? Ssl Oct17 0:49 /usr/sbin/rsyslogd -n



root 15844 0.0 0.0 112808 988 pts/0 R+ 10:39 0:00 grep -E –color=auto (cron|syslog)

温馨提示:

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

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

egrep可以支持元字符…

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

top


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

语法:

top [-d] | top [-bnp]

选项

-d:屏幕刷新间隔时间;



-p<进程号>:指定进程;

示例1

每2s更新一次top,观察整体信息。

top -d 2

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的时候就表明系统在超负荷运转了。

显示详解:

Tasks — 任务(进程),系统现在共有144个进程,其中处于运行中的有1个,143个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示

显示详解:

这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示:

us, user: 运行(未调整优先级的) 用户进程的CPU时间
sy,system: 运行内核进程的CPU时间
ni,niced:运行已调整优先级的用户进程的CPU时间
wa,IO wait: 用于等待IO完成的CPU时间
hi:处理硬件中断的CPU时间
si: 处理软件中断的CPU时间
st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

可以使用't'命令切换显示。

1.3% us — 用户空间占用CPU的百分比。 1.0% sy — 内核空间占用CPU的百分比。 0.0% ni — 改变过优先级的进程占用CPU的百分比 97.3% id — 空闲CPU百分比 0.0% wa — IO等待占用CPU的百分比 0.3% hi — 硬中断(Hardware IRQ)占用CPU的百分比 0.0% si — 软中断(Software Interrupts)占用CPU的百分比

在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。

显示详解:

接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。

物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。

内存显示可以用'm'命令切换。

509248k total — 物理内存总量(509M) 495964k used — 使用中的内存总量(495M) 13284k free — 空闲内存总量(13M) 25364k buffers — 缓存的内存量 (25M)

swap交换分区 492536k total — 交换区总量(492M) 11856k used — 使用的交换区总量(11M) 480680k free — 空闲交换区总量(480M) 202224k cached — 缓冲的交换区总量(202M)

这里要说明的是不能用windows的内存概念理解这些数据,如果按windows的方式此台服务器“危矣”:8G的内存总量只剩下530M的可用内存。Linux的内存管理有其特殊性,复杂点需要一本书来说明,这里只是简单说点和我们传统概念(windows)的不同。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:

13284+25364+202224 = 240M。

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

显示详解:

PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

S:这个是进程的状态。它有以下不同的值:

D – 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。

示例2

假设10 604是一个已经存在的PID,观察该进程。

top -d 2 -p 10604

htop

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

htop的安装

#安装epel源



yum install epel-release -y



#安装htop



yum install -y htop



#安装完毕后命令行输入



htop

kill


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

语法:

kill [信号量] 进程ID

注: 信号代码可以省略,常用的信号代码是 – 9,表示强制终止

示例1

终止所有的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 强制终止进程

netstat


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

语法:

netstat [选项]

参数:

-a或–all:显示所有连线中的Socket; -A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址; -c或–continuous:持续列出网络状态; -C或–cache:显示路由器配置的快取信息; -e或–extend:显示网络其他相关信息; -F或–fib:显示FIB; -g或–groups:显示多重广播功能群组组员名单; -h或–help:在线帮助; -i或–interfaces:显示网络界面信息表单; -l或–listening:显示监控中的服务器的Socket; -M或–masquerade:显示伪装的网络连线; -n或–numeric:直接使用ip地址,而不通过域名服务器; -N或–netlink或–symbolic:显示网络硬件外围设备的符号连接名称; -o或–timers:显示计时器; -p或–programs:显示正在使用Socket的程序识别码和程序名称; -r或–route:显示Routing Table; -s或–statistice:显示网络工作信息统计表; -t或–tcp:显示TCP传输协议的连线状况; -u或–udp:显示UDP传输协议的连线状况; -v或–verbose:显示指令执行过程; -V或–version:显示版本信息; -w或–raw:显示RAW传输协议的连线状况; -x或–unix:此参数的效果和指定”-A unix”参数相同;

–ip或–inet:此参数的效果和指定”-A inet”参数相同。

示例1

列出所有端口

netstat -a # 列出所有端口



netstat -at # 列出所有TCP端口



netstat -au # 列出所有UDP端口



netstat -ax # 列出所有unix端口



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

示例2

显示每个协议的统计信息

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



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



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

示例3

显示核心路由信息

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



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

示例4

查看端口号

lsof -i:端口号

实时效果反馈

1. 从后台启动进程,应在命令的结尾加上符号____。

&

@

#

$

2. 在日常管理中,通常CPU会影响系统性能的情况是____。

A CPU已满负荷运转

B CPU的运行效率为30%

C CPU的运行效率为50%

D CPU的运行效率为80%

答案

1=>A 2=>A

Linux系统服务

Service命令

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

语法:

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

注意:

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

示例1

查看当前防火墙的状况,关闭防火墙和重启防火墙。

[root@zk3 ~]# service iptables status

Systemd命令

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

$ sudo /etc/init.d/apache2 start



# 或者



$ service apache2 start

service的两个缺点:

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

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

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

systemctl

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

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

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

systemctl 是 Systemd 的主命令管理系统
systemd-analyze 命令用于查看启动耗时。
hostnamectl 命令用于查看当前主机的信息。
localectl 命令用于查看本地化设置。
timedatectl 命令用于查看当前时区设置。

Chkconfig

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

选项:

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

示例1

列出chkconfig 所知道的所有命令。

# 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相似

实时效果反馈

1. Linux系统中针对systemd说法错误的是_____。

A systemd命令解决service命令启动时间长的问题

B systemd命令解决service命令启动脚本复杂的问题

C systemd 取代了initd

D systemd是一个命令

答案

1=>D

Linux系统定时任务

什么是定时任务

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

为什么要用crond

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

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

系统级别的定时任务

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

用户级别的定时任务

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

crontab配置文件

[root@centos7 ~]# vim /etc/crontab



SHELL=/bin/bash



PATH=/sbin:/bin:/usr/sbin:/usr/bin



MAILTO=root



# For details see man 4 crontabs



# Example of job definition:



# .—————- minute (0 – 59)



# | .————- hour (0 – 23)



# | | .———- day of month (1 – 31)



# | | | .——- month (1 – 12) OR jan,feb,mar,apr …



# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat



# | | | | |



# * * * * * user-name command to be executed



备注:



1) * 表示任意的(分、时、日、月、周)时间都执行



2) – 表示一个时间范围段, 如5-7点



3) , 表示分隔时段, 如6,0,4表示周六、日、四



4) /1 表示每隔n单位时间, 如*/10 每10分钟

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命令选项

-e #编辑定时任务



-l #查看定时任务



-r #删除定时任务



-u #指定其他用户

计划任务实践示例

示例1

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

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

实时效果反馈

1. Linux 系统的长期计划任务所使用的服务是什么___。

crond

network

mysqld

httpd

2. 下列描述每天7:50开启ssh服务 的定时任务正确的是__

50 7 * * * sshd start /sbin/service

7 50 * * * /sbin/service sshd start

50 7 * * * /sbin/service start sshd

50 7 * * * /sbin/service sshd start

答案

1=>A 2=>D

Linux网络防火墙

防火墙管理工具

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(命令行界面)版本。

firewalld-cmd 命令中使用的参数以及作用

参数 作用
–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 参数,

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

常用示例

区域管理示例

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

firewall-cmd –get-default-zone

显示默认区域的所有规则

firewall-cmd –list-all

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

firewall-cmd –get-active-zones

设置默认区域

firewall-cmd –set-default-zone=home



firewall-cmd –get-default-zone

服务管理示例

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

firewall-cmd –list-service

添加httpd 服务到public 区域

firewall-cmd –add-service=http –zone=public

查看public 区域已配置规则

firewall-cmd –list-all –zone=public

删除public 区域的httpd 服务

firewall-cmd –remove-service=http –zone=public

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

firewall-cmd –add-service=http –add-service=https –permanent



firewall-cmd –reload



firewall-cmd –list-all

端口管理示例

查看开启的端口列表

[root@localhost local]# firewall-cmd –zone=public –list-ports

开启某端口

[root@localhost local]# firewall-cmd –zone=public –add-port=8080/tcp



success

关闭某端口

[root@localhost local]# firewall-cmd –zone=public –remove-port=8080/tcp



success

SELinux(学起来太麻烦了,所以只用学一个如何关闭他就可以了)

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

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

说明:

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

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

SELinux 服务有三种配置模式:

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

SELinux 服务的主配置文件中,定义的是 SELinux 的默认运行状态,可以将其理解为系 统重启后的状态,因此它不会在更改后立即生效。可以使用 getenforce 命令获得当前 SELinux 服务的运行模式:

关闭它

[root@linuxprobe ~]# getenforce



Enforcing

注意:

修改 SELinux 当前的运行模式(0 为禁用,1 为启用)。这种修改只是临时的,在系统 重启后就会失效:

setenforce 0

getenforce

实时效果反馈

1. 如何在 firewalld 中把默认的区域设置为 dmz?

firewall-cmd --set-default-zone=dmz

firewall-cmd --set-default-zone=public

firewall-cmd dmz=--set-default-zone

--set-default-zone=dmz firewall-cmd

2. Linux系统中 如何让 firewalld 中以永久(Permanent)模式配置的防火墙策略规则立即生效?

firewall-cmd --start

firewall-cmd --load

firewall-cmd --restart

firewall-cmd --reload

答案

1=>A 2=>D

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容