虚拟机上的Linux学习

开始学习Linux了,还没有掌握系统完全备份的技术,所以不敢直接在物理机器上安装Linux,我选择使用虚拟机安装.由于时间不多,我会略过部分内容的笔记,但基本保证书本内容都过一遍.

个人补充

  • linux下基本上都严格区分大小写包括目录

使用虚拟机安装Linux

  • 最开始参考的网上书籍《linux就该这么学》,所以根据书籍选择的RHEL-server-7发行版作为学习环境。 *

下载基本环境

VM12
RHEL-server-7

虚拟机安装RHEL 7

新建虚拟机
典型安装
稍后安装操作系统
客户机操作系统:Linux Red Hat Enterprise Linux 7 64 位
最大磁盘大小:20GB
自定义硬件修改

内存:2GB
处理器:默认;勾选虚拟化vt;虚拟化cpu计数器
光驱:使用ISO镜像文件:选择下载好的RHEL iso文件
网卡:我选择的是仅主机模式,你可以自行修改
打印机等设备可以根据需求修改或者删除

配置完成

虚拟机管理界面单机”开启此虚拟机”
Linux安装

回车开始加载安装镜像 30-60s
选择语言(最好英语) ;单击continue
单击SOFTWARE SELECTION选项
单击Server with GUI ;单击Done
单击 NETWORK&HOSTNAME,将Hostname字段设置为linuxprobe.com单击Done
单击INSTALL ATION DESTINATION,不做任何修改单击Done
单击Begin Installation
选择ROOT PASSWORD
设置root密码,若使用弱密码则需要单击两次Done(我使用的密码是我常用的密码)
等待30-60min
Reboot
单击LICENSE INFORMATION
选中I accept the license agreement ;单击Done
单击FINISH CONFIGURATION
单击Forward
选中 No,Iprefer to register at alater time
单击Finish(此处设置为不注册系统对后续的实验操作和生产工作均无影响)
选择语言(我选的英语) next next
创建一个本地普通用户 名称(我的是e1se) 密码(我的密码是通用密码) 单击Next
选择中国的时区 Next
单击Start using Red Hat Enterprise Linux Server

RHEL7 安装部署工作完成

预备知识

一些符号

1
2
[user@localhost /]$ cd
[user@localhost ~]$ cd

上面的~代表你的/home/user目录
/代表根目录
$代表普通用户
#代表超级(root)用户

使用者与群组

群组内的成员具有相同的权限,root用户有所有权限.
默认,系统上的所有账户信息都是记录在/etc/passwd文件内
个人密码记录在/etc/shadow/文件,群组名称记录在/etc/group

用户类型

  • 超级用户
  • 普通用户:需要由root用户或者其他管理员创建,拥有的权限收到限制,通常只在自己的home目录中拥有完全权限.
  • 虚拟用户:大多是在安装系统及部分程序自动添加的. 虚拟用户不能登录系统,他们的存在是为了方便系统管理,用于维持系统或者某个程序正常运行.

用户组类型

为了方便检查,设置文件或目录的访问权限.每个用户账号至少属于一个组,这个组称为该用户的基本组.
创建一个用户账号就会自动创建一个与该帐号同名的用户组.每创建一个用户账号就会自动创建一个与该帐号同名的用户组.
每个用户可以同时加入多个组,除去基本组,其余的都称为附加组.

UID和GID

UID

uid是每一个用户账号的唯一标识符.
Root账号UID:0
虚拟用户账号UID:1~499
普通用户账号UID:500~65535

GID

每个用户组的唯一标识符
ROOT UID:0
虚拟组账号GID:1~499
普通组账号UID:500~65535

用户配置文件

登录时系统会查阅/etc/passwd文件,查看是否有这个账号,然后确定UID,通过UID确认用户和身份,存在账号则读取/etc/shadow文件中所对应的密码,密码无误,登录系统.

用户账号文件

passwd文件每行代表一个用户

1
2
root:x:0:0:root:/root:/bin/bash  
//用户名:密码:uid:gid:注释性描述:home目录:Shell类型

用户登录时所用的shell类型默认是bin/bash

用户影子文件(shadow)

shadow文件只有root用户才能查看.

用户管理

useradd创建用户

用法:useradd [参数] [用户名]
部分参数:
|参数|作用|
| :———– | :———————— |
| -u | 指定UID |
| -d | 指定用户home目录 |
| -g | 指定用户的基本组 |
| -G |指定用户的附加组 |
| -e | 指定用户账号失效时间,yyyy-mm–dd |
| -M | 不建立用户的home目录 |
| -s | 指定用户的登录Shell |

1
2
useradd -e 2018-05-01 temp01 #创建一个失效时间是2080501的用户 temp01
useradd -s /sbin/nologin -M ftpuser #创建一个禁止登录的,不创建home目录的用户ftpuser

passwd为用户设置密码

用法:passwd [参数] 用户名
部分参数
| 参数 | 作用 |
| :———–| :—————————————– |
| -d | 清空密码,只有系统管理员才能使用 |
| -l | 锁住账号 |
| -u | 解开已经上锁的账号 |

su 切换用户身份

用法:su [用户名]

userdel删除用户账号

用法:userdel [参数] 用户名
部分参数:
-r: 删除用户账号及其home目录

usermod 修改用户账号属性

用法: usermod [参数] 用户名
| 参数 | 描述 |
| :————– | :—————————————- |
| -d | 修改用户home目录 |
| -g | 修改用户基本组 |
| -G | 修改用户附加组 |
| -l | 修改用户账号名称 |

1
usermod -l admin horse #将horse重命名为admin

groupadd 新建用户组

用法:groupadd [选项] 组名
部分参数: -g :指定gid号

gpasswd添加删除组成员

用法: gpasswd [选项] 用户名 组名
| 参数 | 描述 |
| :————– | :—————————————- |
| -d | 指定组删除用户 |
| -a | 添加用户到指定组 |

groupdel删除用户组

用法:groupdel [组名]

groups 查询某个用户所属组

usage:groups [用户名]

Linux目录结构和文件类型

Linux系统结构

文件系统.png
文件系统.png
文件系统.png

  • Linux中只有一个根目录/
  • home目录类似用户配置文件夹,用于存放个人数据
  • Linux 系统中所有用户的home目录都集中在/home目录中,如/home/test,除了root用户的home目录是/root.

Linux文件基本属性

例子

使用命令ls -ld bin查看bin这个文件的详细信息且不显示这个文件下的子目录
文件属性2.png
文件属性.png

  1. 代表这个文件类型
    1. 为[d]表示目录
    2. 为[-]表示文件
    3. [l]表示链接文档
    4. [b]表示装置文件里面的可供存储的接口设备(可随机存取装置);
    5. [c]表示装置文件里面的串行端口设备(如键盘,鼠标等)
  2. 代表这个文件的权限
  3. 硬连接的数量(文件默认是1,目录默认是2)
  4. 文件所有者
  5. 文件所有组(文件所有者不一定属于文件所有组)
  6. 文件大小默认大小为b,可在命令后加-h,显示mb,gb等单位
  7. 文件创建时间或修改时间
  8. 文件名称

Linux文件的属性包括:文件节点,种类,权限模式,链接数量,归属用户,归属用户组,最近访问或修改的时间等内容.

Linux文件权限

权限对目录树的作用

r: 查询目录下文件名的权限(ls)
w:具有修改目录结构的权限,如新建目录和文件,删除目录下的文件和目录,重命名次目录下的文件等(touch rm mv cp)
x: 可以进入目录的权限(cd)

权限对文件的作用

r:可读取文件内容(cat more head tail)
w:可编辑新增修改文件内容(vi vim),但不包含删除文件
x:可执行权限

权限格式:(2号位置)
权限格式.png

默认权限

文件在创建时如果不指定具体的权限,那么系统会给它分配一个默认的权限
使用umask查看umask值 例如 0002
第一个0是特殊默认权限,可以先不管,后面的002就是我们需要的值,由于普通文件没有可执行权限,只有r,w权限,所以浅显最大值为(-rw-rw-rw)666.目录需要进入访问权限,最大权限为777.

计算
文件默认权限最大值为666,默认权限需要换算成字母再相减.建立文件后的默认权限,为666减去umask值的后三个.目录就是777减去umask值的后三个
默认权限计算.png
修改umask值

1
umask 0027

umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,需要修改/etc/profile文件或是修改/etc/bashrc文件,例如要将默认umask值设置为027,那么可以在文件中增加一行“umask 027”

改变文件的属性与权限
  • charp[选项][组][文件]:改变文件所属群组
    -c当发生改变时输出调试信息
    -R处理指定目录极其子目录下的所有文件
    -v运行时显示详细信息的处理信息
  • chown[选项]…[所有者][:[组]]文件…:改变文件拥有者
    -c显示更改部分的信息
    -R处理指定目录及其子目录下的所有文件
    -v显示详细的处理信息
  • chmod[选项][指定文件的权限模式或者要改变权限的文件]:改变文件的权限,suid,sgid,sbid等特性
    chmod2.png
    chmod1.png
    例如:
1
chmod u+x,g+w f01  //为文件设置自己可以执行,组员可以写入的权限

强制位,冒险位

强制位有:SUID和SGID,主要用于文件及目录
冒险位有:SBIT,只用于目录,多数是共享目录

强制位和冒险位的表现方式
强制位与冒险位都是添加在执行权限的位置上,强制位使用S和s来表示,冒险位使用T和t来表示。如果该位置上原已有执行权限,则强制位与冒险位以小写字母的方式表示。否则,以大写字母表示。即:
强制位
S:表示该位没有x位
s:表示该位有x位
冒险位
T:表示该位没有x位
t:表示该位有x位

SUID

setuid(在u的x位置上使用一个s)对文件进行设置
默认情况下用户执行一个指令,会以该用户的身份来运行进程.当一个文件设置了SUID后,所有用户执行这个文件都是以这个用户的所有者的权限来执行.相当于让对此文件没有执行权限的用户执行此文件

SGID

setgid(在g的x位置上使用一个s)对目录设置
对目录作用:默认情况下,用户建立的文件夹属于当前所在的组,但是设置SGID后,表示在此目录中,任何人建立的文件,都会属于目录所属的组,但是用户还是属于之创建的用户.

SBIT

sticky(o的x位置上使用一个t)对目录设置
默认情况下,如果一个目录o上有w和x权限,则任何人可以在此目录中建立与删除文件。一旦目录上设置了冒险位(SBIT),则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。其他用户则不能。注意:直接在文件上面设置冒险位是没有作用的,冒险位要创建在目录上面

设置强制位和冒险位

通过+,-设置强制位和冒险位

1
2
3
4
chmod u+s filename //对文件添加强制位
chmod u-s filename //对文件取消强制位
chmod g+s dir //对目录添加冒险位
//注意设置强制位,冒险位需要用小写字母,否则设置无意义

通过数字设置强制位和冒险位
需要放在”读,写,执行”的三位数字前来指定,权限值为:
4(set uid)2(set gid)1(sticky)

1
chmod 4--- document 设置suid

Shell

什么是Shell

shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。
shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。
不论何时你键入一个命令,它都被Linux shell所解释。一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。
shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后shell试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。shell 编程语言很易学,并且一旦掌握后它将成为你的得力工具。任何在提示符下能键入的命令也能放到一个可执行的shell程序里,这意味着用shell语言能简单地重复执行某一任务。

bash和Shell的关系

最常用的shell:在Linux 和 UNIX系统里可以使用多种不同的shell可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。三种shell 都有它们的优点和缺点。(自行查阅)
Linux 系统默认使用的终端是Bash(Bourne Again shell ), 正如它的名字所暗示的,是 Bourne shell (sh)的扩展。

主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势

通过上下方向键来调取过往执行过的 Linux 命令;
命令或参数仅需输入前几位就可以用 Tab 键补全;
具有强大的批处理脚本;
具有实用的环境变量功能;

RPM红帽软件包管理器

RPM类似于控制面板,大大简化Linux系统安装管理软件的步骤.建
立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。
常用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

YUM软件仓库

尽管 RPM 能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决,
而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件会是非常痛苦的。
Yum 软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum 软件仓库可以
根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安
装到系统。

常见的Yum命令

yum repolist all 列出所有仓库
yum list all 列出仓库中所有软件包
yum info 软件包名称 查看软件包信息
yum install 软件包名称 安装软件包
yum reinstall 软件包名称 重新安装软件包
yum update 软件包名称 升级软件包
yum remove 软件包名称 移除软件包
yum clean all 清除所有仓库缓存
yum check-update 检查可更新的软件包
yum grouplist 查看系统中已经安装的软件包组
yum groupinstall软件包组 安装指定的软件包组
yum groupremove软件包组 移除指定的软件包组
yum groupinfo软件包组 查询指定的软件包组信息

RPM 与 Yum 软件仓库的作用: RPM 是为了简化安装的复杂度,而 Yum软件仓库是为了解决软件包之间的依赖关系。

基础Linux命令

Linux命令格式

命令名称 [命令参数] [命令对象 ]
注意,命令名称、命令参数、命令对象之间请用空格键分隔。

命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选
项名称),也可以用短格式(单个字母的缩写),两者分别用–与-作为前缀

1
2
3
4
5
/*
执行查看帮助命令
*/
man --help //长格式
man -h //短格式

man命令

切换到root用户

默认登录时,是我们新建的普通用户,在正式进入系统前我们要点击”Not listed(未列出)”来切换到root身份,输入用户名(root)和密码,就可以登录到root用户了,依然会要求选择语言,然后进入欢迎界面.
root用户拥有更高的权限,普通用户下man的一些命令会因为权限不足而无法执行.

使用Linux系统命令行终端

桌面单击右键选择Open in Terminal打开终端
输入man man命令就可以查看到一大长传man命令的帮助信息,它提示了man命令所能使用的参数.

man命令下常用按键

由于man man查看到的帮助信息很长,所以要熟练的使用Terminal中的常用按键.如下图

main

man命令帮助信息的结构

man帮助信息包含大量内容,通常是如下的结构

man_help

常用系统命令

echo命令

用于在终端输出字符串或变量提取后的值,格式为echo[字符串]|[$变量].

输出字符串haha

1
echo haha

输出变量SHELL的值

1
echo $SELL

date命令

用于显示以及设置系统的时间或者日期,格式为date[选项][+指定的格式].

date

按照默认格式查看当前系统时间:

1
2
$ date
Fri Oct 5 12:03:01 CST 2018

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的 date 命令如下所示:

1
2
[e1se@linuxprobe Desktop]$ date "+%Y-%m-%d %H:%M:%S"
2018-10-05 12:09:34

将系统的当前时间设置为 2017 年 9 月 1 日 8 点 30 分的 date 命令如下所示:

1
2
$ date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017

date 命令中的参数%j 可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时
间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:

1
$ date "+%j"

reboot

p55
用于重启系统,需要root权限

1
$ reboot

poweroff

用于关闭系统,需要root权限

1
$ poweroff

wget

用于在网络终端中下载网络文件格式为wet[参数] 下载地址
wget

ps

ps简介

用于查看系统中的进程状态,格式为ps[参数]
ps命令会有很多输出值,通常会与管道符技术搭配使用,用来抓取与摸个指定服务进程相对于的PID号码,管道符技术第三章会学习.
ps命令

进程状态

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在 Linux 系统中,有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自 含义如下所示。

  • R(运行)进程正在运行或在运行队列中等待。
  • S(中断)进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
  • D(不可中断)进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
  • Z(僵死)进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
  • T(停止)进程收到停止信号后停止运行。

使用ps aux命令后就会显示上图描述的信息.

在Linux系统中命令的参数 有长短格式之分,长格式之间不能合并,长短之间也不能,但是全为短格式是可以合并的,合并后仅仅保留一个最前端的减号.所以ps -a -u -x可以合并为ps -aux,另外ps命令允许参数不加减号所以最终合并为ps aux.

top命令

用于动态监视进程活动与系统负载信息,格式为top
top 命令相当强大,能够动态地查看系统运维状态,完全将它看作 Linux 中的“强化版的 Windows 任务管理器”。
执行top后,结果的前5行为系统整体统计信息.

  • 第一行:系统时间,运行时间,登录终端数目,系统负载(三个数值为1,5,15分钟内的平均值)
  • 第二行:进程总数,运行中的进程数,睡眠中的进程数,停止的进程数,僵死的进程数
  • 第三行:用户占用资源百分比,系统内核占用资源百分百,改变过优先级的进程资源百分比,空闲的资源百分比等.
  • 第四行:物理内存总量,内存总使用量,使用量,空闲量,已被提前加载的内存量
  • 第五行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量

pidof命令

用于查询某个指定服务进程的PID值,格式为pidof[参数][服务名称]
每个进程的进程号码值(PID)是唯一的,因此可以通过 PID 来区分不同的进程。例如, 可以使用如下命令来查询本机上 sshd 服务程序的 PID:

1
2
$ pidof sshd
1634

kill命令

用于终值某个指定PID的服务进程,格式为kill[参数][PID]
终止掉刚才查询的sshd进程:

1
$kill 1634

相当于强制停止sshd服务,需要root,执行成功后不会有任何提示,没有消息就是最大的好消息.

killall命令

killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为killall[参数][服务名称]

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这 些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。下 面以 httpd 服务程序为例,来结束其全部进程。由于 RHEL7 系统默认没有安装 httpd 服务程 序,因此大家此时只需看操作过程和输出结果即可,等学习了相关内容之后再来实践。

1
[root@linuxprobe ~]# pidof httpd 13581 13580 13579 13578 13577 13576 [root@linuxprobe ~]# killall httpd [root@linuxprobe ~]# pidof httpd [root@linuxprobe ~]#

*在terminal中执行了一个命令后想立即停止,使用ctrl+c中指该命令的进程,如果有些命令在执行时不断的在屏幕上输出信息,影响后续输入,则可以在执行命令时在末尾加一个&符号,这样命令将进入系统后台来执行

系统状态检测命令

ifconfig命令

用于获取网卡配置与网络状态等信息,格式为`ifconfig[网络设备][参数]
使用 ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就 是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址), 以及 RX、TX 的接收数据包与发送数据包的个数及累计流量:

1
[root@linuxprobe ~]# ifconfig eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255         inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20<link>         ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)         RX packets 36  bytes 3176 (3.1 KiB)         RX errors 0  dropped 0  overruns 0  frame 0

uname命令

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

1
2
 [root@linuxprobe Desktop]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

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

1
[root@linuxprobe ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.0 (Maipo)

uptime命令

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

1
2
[root@linuxprobe Desktop]# uptime
17:17:24 up 7:48, 2 users, load average: 0.45, 0.19, 0.17

free命令

free 用于显示当前系统中内存的使用量信息,格式为free [-h]
在使用 free 命令时,可以结合使用-h 参数以更人性化的方式输出当前内存的实时使用量信息

1
2
3
4
5
[root@linuxprobe Desktop]# free -h
total used free shared buffers cached
Mem: 1.8G 1.4G 419M 10M 1.4M 522M
-/+ buffers/cache: 883M 943M
Swap: 2.0G 24K 2.0G

freeh

who命令

who 用于查看当前登入主机的用户终端信息,格式为who [参数]
这三个简单的字母可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的 终端信息

1
2
3
[root@linuxprobe Desktop]# who
root :0 2018-10-08 16:05 (:0)
root pts/0 2018-10-08 16:52 (:0)

last命令

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linuxprobe Desktop]# last
root pts/0 :0 Mon Oct 8 16:52 still logged in
root pts/0 :0 Mon Oct 8 16:40 - 16:47 (00:07)
root pts/0 :0 Mon Oct 8 16:36 - 16:40 (00:03)
root pts/0 :0 Mon Oct 8 16:33 - 16:35 (00:02)
root pts/0 :0 Mon Oct 8 16:32 - 16:33 (00:00)
root pts/1 :0 Mon Oct 8 16:32 - 16:32 (00:00)
root pts/1 :0 Mon Oct 8 16:28 - 16:31 (00:02)
root pts/0 :0 Mon Oct 8 16:05 - 16:32 (00:26)
root :0 :0 Mon Oct 8 16:05 still logged in
(unknown :0 :0 Mon Oct 8 16:05 - 16:05 (00:00)
e1se pts/0 :0 Mon Oct 8 15:44 - 16:05 (00:20)
e1se :0 :0 Mon Oct 8 09:32 - 16:05 (06:32)
(unknown :0 :0 Mon Oct 8 09:29 - 09:32 (00:03)
reboot system boot 3.10.0-123.el7.x Mon Oct 8 17:28 - 17:35 (00:06)
e1se pts/0 :0 Mon Oct 8 09:27 - 09:28 (00:01)
e1se :0 :0 Mon Oct 8 09:25 - 09:28 (00:02)
(unknown :0 :0 Mon Oct 8 09:24 - 09:25 (00:00)
reboot system boot 3.10.0-123.el7.x Mon Oct 8 17:24 - 09:28 (-7:-55)
(unknown :0 :0 Mon Oct 8 09:23 - crash (08:00)
reboot system boot 3.10.0-123.el7.x Mon Oct 8 17:22 - 09:28 (-7:-54)

history命令

history 命令用于显示历史执行过的命令,格式为history [-c]
。执行 history 命令能显示出当前用户在本地计算机 中执行过的最近 1000 条命令记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@linuxprobe Desktop]# history
1 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz
2 pidof sshd
3 kill 1634
4 top&
5 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz
6 ./configure
7 make
8 make install
9 chmod vmware-install.pl
10 ./vmware-install.pl
11 yes
12 ./vmware-install.pl
13 uname -a
14 uptime
15 free -h
16 who
17 last
18 history

在使用 history 命令时,如果使用-c 参数则会清空所有的命令历史记录,还可以使用“!编码数字”的方式来重复执行某一次的命令,历史命令会被保存到用户Home目录中的.bash_history文件中
,可以用 cat 命令查看其文件 内容

1
[root@linuxprobe ~]# cat ~/.bash_history

sosreport命令

用于手机系统配置及架构信息并输出诊断文档,格式为sosreport
当 Linux 系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简 单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦 或让他们能提前了解某些复杂问题。

工作目录切换命令

工作目录指的是用户当前在系统中所处的位置。由于工作目录会牵涉系统存储结构相关 的知识,因此第 6 章将详细讲解这部分内容。读者只需简单了解一下这里的操作实验即可, 如果不能完全掌握也没有关系,毕竟 Linux 系统的知识体系太过庞大,每一位初学人员都需 要经历这么一段时期

pwd命令

pwd 命令用于显示用户当前所处的工作目录,格式为pwd [选项]

1
2
[root@linuxprobe Desktop]# pwd
/root/Desktop

cd命令

cd 命令用于切换工作路径,格式为cd [目录名称]
这个命令应该是最常用的一个 Linux 命令了。可以通过 cd 命令迅速、灵活地切换到不同 的工作目录。除了常见的切换目录方式,还可以使用cd -命令返回到上一次所处的目录, 使用cd..命令进入上级目录,以及使用cd ~命令切换到当前用户的家目录,亦或使用 cd ~username切换到其他用户的Home录.

1
[root@linuxprobe ~]# cd /etc

此时,要返回到上一次的目录(即/etc 目录),可执行如下命令:

1
2
[root@linuxprobe bin]# cd - /etc 
[root@linuxprobe etc]#

ls命令

ls 命令用于显示目录中的文件信息,格式为ls [选项] [文件]
使用 ls 命令的-a参数看 到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息。将这 两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性 信息:

1
2
3
4
5
6
7
8
9
10
11
[root@linuxprobe ~]# ls -al
total 56
dr-xr-x---. 14 root root 4096 Oct 8 16:31 .
drwxr-xr-x. 17 root root 4096 Oct 8 17:28 ..
-rw-------. 1 root root 1032 Aug 9 02:57 anaconda-ks.cfg
-rw-------. 1 root root 270 Oct 8 19:06 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 11 root root 4096 Oct 8 16:26 .cache
drwx------. 16 root root 4096 Oct 8 16:26 .config

如果想要查看目录属性信息,则需要额外添加一个-d 参数。例如,可使用如下命令查看 /etc 目录的权限与属性信息:

1
2
[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
参数 描述
-a 显示所有文件,包括隐藏文件
-A 显示所有文件,不包括.和..
-l 显示文件或目录的详细信息
-al 显示文件或目录的详细信息,包括隐藏文件
-o 在-l的基础上取消了所属组的显示
-d 仅显示目录名,而不显示目录下的内容列表 .显示符号链接文件本身,而不显示所指向的目录列表
-m 使用,分割显示的文件/目录
-n 以用户识别码和群组识别码替代其名称
-S 按照文件/目录的大小排序,降序
-r 反向排序

ls的显示结果以颜色来区分:
ls颜色对照表

文本文件编辑命令

Linux 系统中“一切都是文件”,而对服务程序进行配置自然也就是编辑程序的配置文件。本节将讲解几 条用于查看文本文件内容的命令。至于编辑器使用起来比较复杂,因此将放到第 4 章与 Shell 脚本内容一起讲解。

cat命令

用于查看纯文本文件(内容较少的),格式为cat[参数][文件]
如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@linuxprobe ~]# cat -n initial-setup-ks.cfg       
1 #version=RHEL7
2 # X Window System configuration information
3 xconfig --startxonboot
4
5 # License agreement
6 eula --agreed
7 # System authorization information
8 auth --enableshadow --passalgo=sha512
9 # Use CDROM installation media
10 cdrom
11 # Run the Setup Agent on first boot
12 firstboot --enable
13 # Keyboard layouts
14 keyboard --vckeymap=us --xlayouts='us'
15 # System language
16 lang en_US.UTF-8
………………省略部分输出信息………………
参数 描述
-n 由1开始对所有输出的行数编号
-b 同-n,但是空白行不进行编行
-s 将多个空行压缩为一行

more/less命令

用于查看纯文本文件(内容较多的),格式为more/less [选项]文件
一旦使用 cat 命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得 及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用 more 命令来查看。
。more 命 令会在最下面使用百分比的形式来提示您已经阅读了多少内容。您还可以使用空格键或回车 键向下翻页.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@linuxprobe ~]# more anaconda-ks.cfg
#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network --hostname=linuxprobe.com
# Root password
rootpw --iscrypted $6$YBKGLQqneFUOPVyj$RDA3.2gfi5jogqurPhWi60L6EQrYNK9HNh.Qcsj4R
ujNhMBlEX3yq79WDEXrPVR0ySs49NikeY14SkkIl6Zn10
# System timezone
timezone America/New_York --isUtc
# X Window System configuration information
--More--(64%)

more命令和less命令的用法是一样的,包括按键命令都差不多。more命令和less命令最大的区别是,more命令只能向下翻页,而less命令不仅可以向下翻页,还可以向前翻页;还有,more命令和less命令都有在显示的内容中查找字符串的功能,但是more命令只可以向下查找,不可以向上查找字符串,而less命令既可以向下查找,也可以向上查找。

head命令

用于查看纯文本文档的前N行,格式为head[选项][文件]
查看前5行
-n Num选项:显示显示前num

1
2
3
4
5
6
[root@linuxprobe ~]# head -n 5 anaconda-ks.cfg
#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media

tail命令

tail 命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为tail [选项] [文件]
。tail 命令的操作方法与 head 命令非常相似,只需要执行tail -n 20 文件名命令 就可以达到这样的效果。tail 命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时 查看最新日志文件时,这特别有用,此时的命令格式为tail -f 文件名

1
2
3
4
5
6
7
8
9
10
11
[root@linuxprobe ~]# tail -f /var/log/messages
Oct 8 21:00:01 linuxprobe systemd: Started Session 83 of user root.
Oct 8 21:01:01 linuxprobe systemd: Starting Session 84 of user root.
Oct 8 21:01:01 linuxprobe systemd: Started Session 84 of user root.
Oct 8 21:01:01 linuxprobe systemd: Failed to mark scope session-84.scope as abandoned : Stale file handle
Oct 8 21:10:01 linuxprobe systemd: Starting Session 85 of user root.
Oct 8 21:10:01 linuxprobe systemd: Started Session 85 of user root.
Oct 8 21:20:01 linuxprobe systemd: Starting Session 86 of user root.
Oct 8 21:20:01 linuxprobe systemd: Started Session 86 of user root.
Oct 8 21:30:01 linuxprobe systemd: Starting Session 87 of user root.
Oct 8 21:30:01 linuxprobe systemd: Started Session 87 of user root.

tr命令

tr 命令用于替换文本文件中的字符,格式为tr [原始字符] [目标字符]
在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替 换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更 是不现实。这时,就可以先使用 cat命令读取待处理的文本,然后通过管道符(详见第 3 章) 把这些文本内容传递给 tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换 为大写:

1
2
3
4
5
6
7
8
9
 [ rootelinuxprobe ~]# cat anaconda-ka. cfg I tr [a-z][A-2]
# VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION AUTH --ENABLESHADOW--PASSALGO=SHA512
# USE CDROM INSTALLATION MEDIA CDROM
# RUN THE SETUP AGENT ON FIRST BOOT FIRSTBOOT--ENABLE IGNOREDISK--ONLY-USE=SDA
# KEYBOARD LAYOUTS KEYBOARD--VCKEYMAP=US--XLAYOUTS=' US,
# SYSTEM LANGUAGE LANG EN_US. UTE-8
# NETWORK INFORMATION NETWORK--BOOTPROTO=DHCP--DEVICE=ENO16777728--ONBOOT=OFE --IPV6=AUTO NETWORK--HOSTNAME=LOCALHOST. LOCALDOMAIN
# ROOT PASSWORD

wc命令

wc 命令用于统计指定文本的行数、字数、字节数,格式为wc [参数] 文本
参数:

  • -l :只显示行数
  • -w:只显示单词数
  • -c:只显示字节数

在 Linux 系统中,passwd 是用于保存系统账户信息的文件,要统计当前系统中有多少个 用户,可以使用下面的命令来进行查询,是不是很神奇:

1
2
[root@linuxprobe ~]# wc -l /etc/passwd 
38 /etc/passwd

stat命令

stat 命令用于查看文件的具体存储信息和时间等信息,格式为stat 文件名称.
stat命令可以用于于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出 文件的三种时间状态:AccessModifyChange。这三种时间的区别将在下面的touch 命令中详细详解:

1
2
3
4
5
6
7
8
9
10
 [root@linuxprobe ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1032 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 69122924 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2018-10-08 19:33:00.596075247 +0800
Modify: 2018-08-09 02:57:19.481052343 +0800
Change: 2018-08-09 02:57:19.481052343 +0800
Birth: -

cut命令

cut 命令用于按提取文本字符,格式为cut [参数] 文本
一般 而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是 如果按列搜索,不仅要使用-f 参数来设置需要看的列数,还需要使用-d 参数来设置间隔符号。 passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用 下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@linuxprobe ~]# head -n 2 /etc/passwd    //查看这个文件开头两行,确定格式
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]# cut -d: -f1 /etc/passwd //使用参数提取列文本
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
参数 作用
d分隔符 指定分隔符,默认为Tab
f 指定显示的列数
c 单位改为字符

diff命令

diff 命令用于比较多个文本文件的差异,格式为diff [参数] 文件
在使用 diff 命令时,不仅可以使用–brief 参数来确认两个文件是否不同,还可以使用-c 参 数来详细比较出多个文件的差异之处.

1
2
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt 
Files diff_A.txt and diff_B.txt differ

文件目录管理命令

ln命令

为文件或目录建立连接
格式:ln [选项] 源文件 目标文件
-s :创建软连接

1
2
1n/etc/passwd passwd
1n-s/etc/passwd password02

touch命令

touch 命令用于创建空白文件或设置文件的时间,格式为touch [选项] [文件]
touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件
。对 touch 命 令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性 的更改时间(ctime)与文件的读取时间(atime)上面。touch 命令的参数及其作用如表
touchu
-t 使用指定时间而非现在时间

1
touch -d "2018-06-01" test  #将test文件的时间戳修改为指定时间2018-06-01

mkdir命令

p71
mkdir 命令用于创建空白的目录,格式为mkdir [选项] 目录
除了创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录.或者当前目录下创建n个目录

1
2
3
4
[root@e1se~]# mkdir linuxprobe
[root@e1se~]# cd linuxprobe
[root@e1se linuxprobe]# mkdir -p a/b/c/d/e
[root@e1se linuxprobe]# cd a
1
[root@e1se linuxprobe]# mkdir test1 test2 test3

rmdir命令

删除空目录
格式:rmdir [选项] 目录名

  • -v显示指令执行过程
  • -p 当子目录被删除后使它也成为空目录的话,则顺便一并删除
1
rmdir -p /test0/test1  //删除/test0和test1目录

cp命令

用于复制文件或目录,格式为cp[参数] 源文件 目标文件
复制分为三种情况:

  • 如果目标文件是目录,则把源文件复制到该目录中;
  • 如果目标文件也是普通文件,则会询问是否覆盖它;
  • 如果目标文件不存在,则执行正常的复制操作;

cp命令的参数机器作用:

参数 作用
-p 保留原始文件的属性
-d 若对象为”链接文件”,则保留该”链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr

下面的例子使用touch创建一个名为install.log的普通空白文件,然后将其复制为x.log的备份文件,最后再使用ls命令查看目录中的文件:

1
2
3
4
# touch install.log
# cp install.log x.log
# ls
install.log x.log

mv命令

用于剪切文件或将文件重命名,格式为mv[参数] 源文件 [目标路径|目标文件名]
在同一个目录中对一个文件进行剪切操作,就是对这个文件重命名.

1
2
3
# mv x.log linux.log
# ls
install.log linux.log //刚才这个目录下是install.log x.log,x.log被重命名了~

rm命令

用于删除文件或者目录,格式为rm[参数] 文件
-f参数,不用确认直接强制删除
-r参数,递归删除,删除目录的时候必须加上

我们常说删库跑路用的命令就是rm -rf

1
rm -f /tmp/*.txt #强制删除/tmp目录下所有的txt文件

dd命令

用于按照指定大小和个数的数据块来复制文件或者转换文件,格式为dd[参数]
dd能够让用户按照指定大小和个数的数据块来复制文件的内容,同时也可以在复制过程中转换其中的数据.
dd命令的参数及作用
| 参数 | 作用 |
| :—– | :——————– |
| if | 输入文件名称 |
| of | 输出文件夹名称 |
| bs | 设置每个”块”的大小 |
| count | 设置复制’块’的个数 |

Linux系统中有一个名为/dev/zero的设备文件,这个文件不会占用系统存储空间,却可以搭配dd创建无穷无尽的数据

例如使用/dev/zerp作为输入搭配dd从设备文件中取出一个大小为560mb的数据块,然后保存成名为560_file的文件.

1
2
3
4
# dd if=/dev/zero of=560_file count=1 bs=560m
1+0 records in
1+0 records out
57802560 bytes(578mb) copied,27.0000s,21.6 mb/s

理解了上面的这个例子就可以随意创建任意大小的文件了.

下例展示使用dd命令将文件压制为光盘映像文件(iso):

1
2
3
4
# dd if=/dev/cdrom of=REHEL.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes(3.7GB) copied,370.758s10.1MB/s

file命令

用于查看文件的类型,格式为file 文件名
Linux系统中文本,目录,设备等一切都成为文件,我们无法凭借后缀就知道具体文件类型,所以使用file命令查看文件类型

1
2
# file anaconda-ks.cfg
anaconda-ks.cfg :ASCCII text

打包压缩与搜索命令

Tar 命令

用于对文件进行打包压缩或解压,格式为tar [参数] [文件]
在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,其实这些格式大部分都是由 tar 命令来生成的

tar 命令的参数及其作用 :
| 参数 | 作用 |
| :———- | :————————————- |
| -c | 创建压缩文件指定名称 |
| -x | 解开压缩文件 |
| -t | 查看压缩包内有哪些文件 |
| -z | 用Gzip压缩或者解压 |
| -j | 用bzip2压缩或者解压 |
| -v | 显示压缩或者解压的过程 |
| -f | 目标文件名 |
| -P(大写) | 保留原始的权限与属性 |
| -p | 使用绝对路径来压缩 |
| -C(大写) | 指定解压到的目录 |
-C 参数用于指定要解压到哪个指定的目录。-f 参数特别重要,它必须放到压缩参数的最后一位,代表要压缩或解压的软件包名

下例使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:

1
2
3
4
5
6
7
8
9
10
11
[root@linuxprobe Desktop]# tar -czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-lohit-bengali.conf
/etc/fonts/conf.d/59-liberation-sans.conf
...省略部分信息...

下例将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令来创建/root/etc目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linuxprobe Desktop]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/65-0-khmeros-base.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/31-cantarell.conf
etc/fonts/conf.d/67-lohit-malayalam.conf
etc/fonts/conf.d/10-scale-bitmap-fonts.conf
etc/fonts/conf.d/65-0-lohit-kannada.conf
etc/fonts/conf.d/20-unhint-small-vera.conf
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/25-no-bitmap-fedora.conf
etc/fonts/conf.d/65-0-lohit-tamil.conf
etc/fonts/conf.d/25-unhint-nonlatin.conf
...省略部分...

grep命令

用于在文本中执行关键词搜索,并显示匹配的结果行,格式为grep [参数] [文件]

部分grep参数:
| 参数 | 作用 |
| :——– | :——————————————– |
| -b | 将可执行文件(binary)当作文本文件 (text)来搜索 |
| -c | 仅显示找到的行数 |
| -i | 忽略大小写 |
| -n | 显示行号 |
| -v | 反向选择 仅列出没有”关键词”的行 |

在 Linux 系统中,/etc/passwd 文件是保存着所有的用户信息,而一旦用户的登录终端被 设置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令来查找出当前系统中不允 许登录系统的所有用户信息:

1
2
3
4
5
6
7
[root@linuxprobe Desktop]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
省略部分输出

反选并显示在第几行:

1
2
3
4
5
6
[root@linuxprobe Desktop]# grep -nv /sbin/nologin /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
38:e1se:x:1000:1000:e1se:/home/e1se:/bin/bash

find命令

用于按照指定的条件来递归查找文件,格式为find [查找路径] 寻找条件 操作
它可以使用不同的文件特性作为寻找条件(文件名称,大小,修改时间,权限等),一旦匹配成功则默认将信息显示到 屏幕上.

部分find参数:

参数 作用
-maxdepth<目录层级> 设置最大目录层级
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天内,+n指的是n天前)
-atime -n +n 匹配访问文件的时间
-ctime -n +n 匹配修改文件权限的时间
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
–type b/d/c/p/l/f 匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道,连接文件,文本文件
-size 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小 于的)
-prume 忽略某个目录
-exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)

如果想要获取etc目录下以host开头的文件列表:

1
2
3
4
5
6
7
8
[root@linuxprobe Desktop]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname

如果要在整个系统中搜索权限中包括 SUID 权限的所有文件,只需使用4000 即可:

1
# find / -perm -40000 -print

在整个系统文件中找出所有归属于linuxprobe用户的文件,并复制到/root/findresults目录

1
2
3
# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

// / 代表所有系统文件,cp是复制命令,{}代表查找到的文件

向下距离当前目录最大深度限制为3,搜索文本文件

1
find . -mindepth 3 - type f

第三章 管道符,重定向与环境变量

输入输出重定向

输入重定向是指把文件导入到命令中,输出重定向是把输出写入到指定文件中.

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

使用ls查看两个文件属性,其中第二个不存在,会输出错误信息:

1
2
3
4
5
[root@linuxprobe Desktop]# touch linuxprobe
[root@linuxprobe Desktop]# ls -l linuxprobe
-rw-r--r--. 1 root root 0 Nov 13 09:28 linuxprobe
[root@linuxprobe Desktop]# ls -l xxx
ls: cannot access xxx: No such file or directory

重定向时区别对待两种信息.

对于输入重定向来讲,用到的符号及其作用如表 3-1 所示。
输入重定向.png

对于输出重定向来讲,用到的符号及其作用如表 3-2 所示。
输出重定向.png

输出重定向中,标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2必须要写.

下例通过标准输出重定向将man bash命令的输出写入到文件readme.ext中,然后显示readme.txt文件中的内容:

1
2
# man bash > readme.txt
# cat readme.txt

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把 文件直接导入到命令中。接下来使用输入重定向把 readme.txt 文件导入给 wc -l命令,统计一下文件中的内容行数:

1
# wc -l <readme.txt

管道命令符

管道命令符的作 用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命 令的标准输入”。
|左边的命令的输出作为输入传入|右边的命令
执行格式为命令A|命令B
找出被限制登录用户的命令是 grep "/sbin/nologin" /etc/passwd统计文本行数的命令则是 wc,现在要做的就是把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信 息列表再交给 wc 命令作进一步的加工,因此只需要把管道符放到两条命令之间即可:

1
2
# grep  "/sbin/nologin" /etc/passwd | wc -l 
33

命令行的通配符

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

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

1
2
3
4
5
[root@linuxprobe ~]# 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@linuxprobe ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1

常用的转义字符

常用转义符:

  • 反斜杠\:使反斜杠后面的一个变量变为单纯的字符串
  • 单引号'':转译其中所有的变量为淡出的字符串
  • 双引号"":保留其中的变量属性,不做转义处理
  • 反引号`:把其中的命令执行后返回结果

重要的环境变量

变量是计算机系统用于保存可变值的数据类型。在 Linux 系统中,变量名称一般都是大 写的.
Linux 系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件 存放位置等。

Linux系统中重要的10个环境变量

变量名称 作用
HOME 用户的主目录
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录跳出
MAIL 右键保存路径
LANG 系统语言,语系名称
RANDOM 生成一个随机数字
PSI Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

自行创建变量例如设置一个名称为WORKDIR的变量,方便进入一个层次较为深的目录:

1
2
3
# mkdir /home/workdir
# WORKDIR=/home/workdir
# cd $WORKDIR

这样定义的变量只能在当前用户下使用,使用export可以将这个变量提升为全局变量:

1
2
$ cd $WORKDIR
$ echo $WORKDIR

第四章 Vim编辑器与Shell命令脚本

Vim文本编辑器

三种模式:

  1. 命令模式:控制光标移动,可对文本进行复制粘贴删除查找等工作
  2. 输入模式:正常的文本录入
  3. 末行模式:保存或退出文档,以及设置编辑环境
    Vim模式.png
    在每次运行 Vim 编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文 档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档 的保存或退出操作。在 Vim 中,无法直接从输入模式切换到末行模式

Vim 中命令行模式常用的命令

命令 作用
x 删除光标所在位置的“后面”一个字符
#x 删除光标所在位置后面的#个字符
X 删除光标所在位置前面的一个字符
#X 删除光标所在位置的前面的#个字符
s 删除光标所在的字符并开始插入
S 删除光标所在行并开始插入
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标开始的5行
yy 复制光标所在整行(到缓冲区)
5yy 复制从光标出开始的5行
yw 将光标所在之处到字尾的字符复制到缓冲区中
#yw 复制#个字到缓冲区
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位道德上一个字符串
r 替换光标所在处的字符
R 替换光标所到之处的字符,直到按下「ESC]键为止
u 撤销上一步的操作
ctrl+u 撤销上一步’撤销’的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面(其实是缓冲区)
c#w 改写光标后#个词
c#l 改写光标后#个字母
ctr l+g 列出光标所在行号
#G 移动光标至文章的第#行行首

末行模式主要用于保存或退出文件,以及设置 Vim 编辑器的工作环境,还可以让用户执 行外部的 Linux 命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中 输入一个冒号就可以了

末行模式中可用的命令

命令 作用
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
w filename 当前内容另存为filename
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two
:s/one/two/g 将当前光标所在行的所有 one 替换成 two
:%s/one/two/g 将全文中的所有 one 替换成 two
?字符串 在文本中从下至上搜索该字符串如果第一次找的关键字不是您想要的,可以一直按[n]会往后寻找到您要的关键字为止
/字符串 在文本中从上至下搜索该字符串如果第一次找的关键字不是您想要的,可以一直按[n]会往后寻找到您要的关键字为止

编写简单文档

  1. 使用命令vim [文件名],如果文件存在则打开它,如果不存在,则创建一个临时输入文件.
  2. 直接进入的是Vim命令模式,执行a i o 三个键就可以从命令模式切换到输入模式(insert按键也可以)
    1. a:在光标后面一位切换到输入模式
    2. i:在光标当前位置切换到输入模式
    3. o:在光标下面再创建一个空行,进入到编辑器的输入模式
  3. 进入输入模式后,可以随意输入文本内容,Vim 编辑器不会把您输入的文本内容当作命令而执行
  4. 编写完成后,esc退出输入模式,返回命令模式,然后输入:进入末行模式然后输入wq!强制保存退出
  5. 这个文件就已经创建且有内容了
  6. 使用cat命令查看保存的文档内容

配置主机名称

为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有 IP 地址外, 还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在 Linux 系统中,主机名大多保存在/etc/hostname 文件中.

  • 使用 Vim 编辑器修改“/etc/hostname”主机名称文件。
  • 把原始主机名称删除后追加“linuxprobe.com”。注意,使用 Vim 编辑器修改主
    机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
  • 保存并退出文档,然后使用 hostname 命令检查是否修改成功。

配置网卡信息

p99 略 实操配置失败

配置Yum仓库

,Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析 所需软件包及其依赖关系的技术,可以把 Yum想象成是一个硕大的软件仓库,里面保存有几乎所 有常用的工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。
略p99

编写简单的脚本

使用 Vim 编辑器把 Linux 命令按照顺序依次写入到一 个文件中,这就是一个简单的脚本了
例如,如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息,实现这 个功能的脚本应该类似于下面这样:

1
2
3
4
5
[root@linuxprobe ~]# vim example.sh 
#!/bin/bash //脚本声明(#!)告诉系统使用哪种Shell解释器来执行该脚本
#for Example By e1se //(#)脚本注释,用于介绍脚本等
pwd //脚本内容
ls -al //脚本内容

Shell 脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh 后缀加上
然后执行这个脚本:

1
2
3
4
5
6
7
8
9
10
11
[root@else Desktop]# bash example.sh
/root/Desktop
total 8892
drwxr-xr-x. 2 root root 4096 Nov 23 21:34 .
dr-xr-x---. 15 root root 4096 Nov 23 21:34 ..
-rw-r--r--. 1 root root 8764090 Nov 10 16:34 etc.tar.gz
-rw-r--r--. 1 root root 45 Nov 23 21:34 example.sh
-rw-r--r--. 1 root root 0 Nov 13 09:28 linuxprobe
-rw-r--r--. 1 root root 13 Nov 16 16:54 practice2.txt
-rw-r--r--. 1 root root 0 Nov 16 16:32 practice.txt
-rw-r--r--. 1 root root 320443 Nov 13 09:35 readme.txt

除了上面用bash解释器命令直接运行Shell脚本外,第二种运行方式是通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚 本文件增加执行权限即可(详见第 5 章)初次学习 Linux 系统的读者不用心急,等下一章学 完用户身份和权限后再来做这个实验也不迟:

1
2
3
4
5
6
7
8
9
[root@linuxprobe ~]# ./example.sh 
bash: ./Example.sh: Permission denied
[root@linuxprobe ~]# chmod u+x example.sh
[root@linuxprobe ~]# ./example.sh
/root/Desktop
total 8
drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
dr-xr-x---. 14 root root 4096 Jul 23 17:31 ..
-rwxr--r--. 1 root root 55 Jul 23 17:31 example.sh

接收用户的参数

为了 让 Shell 脚本程序更好地满足用户的一些实时需求,以便灵活完成工作,必须要让脚本程序能 够像之前执行命令时那样,接收用户输入的参数。
用于接收参数的变 量,变量之间可以使用空格间隔。例如$0 对应的是当前 Shell 脚本程序的名称,$#对应的是总共 有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、 $2、$3……则分别对应着第 N 个位置的参数值,如图

脚本参数.png

linux配置

网络配置

ping

Command:ping
Function:测试网络连通性
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping[选项]IP地址
-c指定发送次数
范例:ping 1.1.1.1

last

Command:last
Function:显示用户最近登录信息
单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
语法:last(选项)(参数)
-n〈显示列数〉或-〈显示列数〉:设置显示列数
-R:不显示登入系统的主机名称或IP地址;
-x:显示系统关机,重新开机,以及执行等级的改变等信息

ifconfig

Command:ifconfig
Function:
1、ifconfig输出网络接口配置、调优和debug的各种选项。
2、可以快捷地查看IP地址和其它网络接口的信息。
3、键入ifconfig查看所有启用的网络接口的状态,包括它们的名字。
4、可以指定网络接口的名字来只显示这一个接口的信息。
命合参数:
up 后动指定网络设备/网卡。
down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的
-a显示全部接口信息
-s显示摘要信息(类似于netstat-i)
add 给指定网卡配置IPv6地址
del删除指定网卡的IPV6地址
<硬件地址>配置网卡最大的传输单元
mtu<字节数>设置网卡的最大传输单元(bytes)
netmask<子网掩码>设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个+进制数。如果不打算捋网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码

实例2:后动关闭指定网卡
命令:

1
2
ifconfig eth0 up
ifconfig eth0 down

实例3:为网卡配置和删除IPV6地址
命令:

1
2
ifconfig eth0 add 33ffe:3240:800:1005:2/64
ifconfig eth0 del 33ffe:3240:800:1005:2/64

实例5:配置IP地址

1
2
3
|[root@localhost-]4ifconfig etho 192.168.120.56
[root@localhost-]4 ifconfig eth0 192.168.120.56 netmask 255.255.255.0
|[root@localhost~]4ifcontig etho 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

3 p13

实际使用

来源:https://www.jianshu.com/p/6b77a27762b4

配置网卡

使用Centos7 minimal(无图形化界面)
网卡是 eth-33
由于centos 内查看ip地址不再是ifconfig而是ip addr
我们使用ip addr查看.如果看不到eth33的ip
尝试修改为eht0

修改网卡名称

  1. 编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME和DEVICE项修改为eth0,ONBOOT=yes
  2. 重命名网卡配置文件ifcfg-ens33为ifcfg-eth0
    cd /etc/sysconfig/network-scripts/
    mv ifcfg-ens33 ifcfg-eth0
  3. 编辑/etc/default/grub并加入“net.ifnames=0 biosdevname=0 ”到GRUBCMDLINELINUX变量
    如:GRUB_CMDLINE_LINUX=”crashkernel=auto net.ifnames=0 biosdevname=0 rhgb quiet”
  4. 运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。
    5.重启系统reboot

安装.deb文件

以kali安装 nessus为例子
我的kali是debian7.x

直接进入deb文件所在目录,执行

1
dpkg -i Nessus-6.10.5-debian6_amd64.deb  //文件名用tab自动补全

等待安装完成.
这样就安装成功了
后续步骤是nessus特有的

启动nessus

1
/etc/init.d/nessusd start

查看启动状态

1
netstat -ntpl | grep nessus
如果文章有问题欢迎指出,或者你也可以联系我
本文作者:E1se
本文链接: 2018/08/08/虚拟机上的Linux学习/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
-------------本文结束-------------
0%