Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • Linux系统目录结构
  • 树状目录结构图
  • 系统常用目录
  • LInux文件基本属性
  • 查看文件属性
  • 文件的属主和属组
  • 更改文件属性的命令
  • 处理文件常用命令
  • ls
  • cd
  • pwd
  • mkdir
  • rmdir
  • rm
  • cp
  • mv
  • 查看文件内容命令
  • cat
  • tac
  • more
  • less
  • head
  • tail
  • 时间日期类命令
  • date命令
  • cal命令
  • 压缩和解压命令
  • gzip/gunzip
  • zip/unzip
  • tar
  • 文件查找命令
  • find命令
  • locate命令
  • grep命令
  • 进程管理命令
  • ps命令
  • kill命令
  • top命令
  • pstree命令
  • 系统定时任务
  • VI/VIM编辑器
  • 简介
  • 模式转换
  • 一般模式
  • 编辑模式
  • 命令模式
  • 用户和用户组管理
  • 用户账号管理
  • 用户组管理
  • 存放用户信息的系统文件
  • 批量添加用户
  • 管道及重定向
  • 输入/输出流控制
  • 管道操作
  • 网络配置
  • 1.修改IP地址
  • 2.修改主机名
  • 3.修改hosts文件
  • 系统管理
  • 进程与服务
  • 系统服务管理方式
  • service(Centos6)
  • systemctl(Centos7)
  • chkconfig
  • 系统运行级别
  • 关机重启命令
  • Linux正则表达式
  • 普通正则
  • 扩展正则
  1. 基础学习
  2. Linux学习

linux基础

上一页Linux Shell编程下一页Python基础

最后更新于1年前

Linux系统目录结构

Linux 系统目录结构是一个由各种目录和文件组成的树形结构,每个目录都有特定的用途。在这篇文章中,我们将讨论 Linux 系统中最常见的目录,并解释它们的用途

登录系统后输入ls命令查看系统目录

image-20220915152636333

树状目录结构图

系统常用目录

目录名
描述

/bin

存放着最常用的命令,包括用户和系统管理员都会使用的命令。

/boot

存放着启动 Linux 系统所需要的核心文件,包括内核文件、引导文件和镜像文件等。

/dev

Device的缩写, 存放着 Linux 系统中所有的设备文件,如硬盘、CD-ROM等。

/etc

存放着所有的系统管理配置文件,包括用户账号、网络设置、系统服务等。

/home

用户的主目录, 每个用户都有自己的目录,一般是以用户账号命名的。

/lib

存放着系统最基本的动态连接共享库,是系统运行必须的。类似于 Windows 的 DLL 文件。

/media

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

/mnt

为了让用户临时挂载其他文件系统而设置的目录。如将光驱挂载在此目录下,就可以查看光驱里的内容。

/opt

optional(可选)的缩写,给额外安装软件使用的目录。

/proc

Processes(进程)的缩写, /proc是一种伪文件系统(即虚拟文件系统), 存储着当前内核运行状态的信息,这些信息可以通过文件来读取。

/root

root用户的主目录, 它和/home/root是同一个目录。

/sbin

System Binaries(系统二进制文件)的缩写, 存放着系统管理员使用的命令。

/tmp

临时文件目录, 系统可能会定期清理该目录中的文件。

/usr

User Programs(用户程序)的缩写, 存放着大多数用户程序和数据。

/var

Variable(可变)的缩写, 存放着经常更改的数据, 如系统日志、邮件等

LInux文件基本属性

查看文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位并拥有不同的权限。在 Linux 系统中,通常使用 chown 命令来修改文件或目录的所有者,chmod 命令则用于设置用户的权限。

  • chown (change owner) :用于修改文件或目录的所有者和组。

  • chmod (change mode) :用于修改文件或目录的权限,如读、写、执行权限

​

在Linux 中可使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组

如上图所示, Mail文件的第一个属性用d表示, 则代表此文件是一个目录文件, 在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等

  • 当为 d 则是目录

  • 当为 - 则是文件;

  • 若是 l 则表示为链接文档(link file);

  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

如下图所示, 每个文件的属性由左边第一部分的 10 个字符来确定, 从左至右用 0-9 这些数字来表示。

第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限, 第4-6位确定属组(所有者的同组用户)拥有该文件的权限, 第7-9位确定其他用户拥有该文件的权限。

文件的属主和属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。在 Linux 系统中,用户是按组分类的,一个用户可以属于一个或多个组。

文件所有者以外的用户可以分为文件所属组的同组用户和其他用户。这些用户对文件的访问权限可能不同,因此在 Linux 系统中,需要对文件的访问权限进行管理。

在如下实例中, mysql 文件是一个目录文件, 属主和属组都为 mysql, 属主有可读、可写、可执行的权限; 与属主同组的其他用户有可读和可执行的权限; 其他用户也有可读和可执行的权限。而对于root用户来说, 文件的权限对其不起作用

[root@www /]# ls -l
total 64
drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql
……

更改文件属性的命令

1.chgrp: 更改文件属组

命令语法如下所示:

chgrp [-R] 属组名 文件名

-R: 如果加上-R的参数,那么该目录下的所有文件的属组都会更改

2.chown: 更改文件属主, 也可同时修改文件属组

命令语法如下所示:

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

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

[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

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

[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

3.chmod: 更改文件权限

首先了解下文件的权限等级, Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

  • u表示文件所有者, g表示与文件拥有者属于同一个群体, o表示其他人, a表示这三者皆是

  • +表示添加权限、-表示取消权限、=表示设定唯一权限

  • r表示可读取, w表示可写入, x表示可执行

使用符号模式可以设置多个项目: who(用户类型)、operator(操作符)、permission(权限)

以下是各个项目的符号模式表:

who
用户类型
说明

u

user

文件所有者

g

group

文件所有者所在组

o

others

所有其他用户

a

all

所有用户, 相当于 ugo

Operator
说明

+

为指定的用户类型增加权限

-

去除指定用户类型的权限

=

设置指定用户权限的设置,即将用户类型的所有权限重新设置

permission
名字
说明

r

读

设置为可读权限

w

写

设置为可写权限

x

执行权限

设置为可执行权限

X

特殊执行权限

只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行

s

setuid/gid

当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限

t

粘贴位

设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

chmod命令可以使用八进制来指定权限

#
权限
rwx

7

读(4) + 写(2) + 执行(1)

rwx

6

读(4) + 写(2)

rw-

5

读(4) + 执行(1)

r-x

4

只读(4)

r--

3

写(2) + 执行(1)

-wx

2

只写(2)

-w-

1

只执行(1)

--x

0

无

--

chmod命令使用实例如下表格所示:

描述
命令

将file1.txt设为所有人都可读

chmod ugo+r file1.txt chmod a+r file1.txt

将file1.txt和file2.txt权限设为文件拥有者和用户组可写,其他用户不可写

chmod ug+w,o-w file1.txt file2.txt

将当前目录下的所有文件与子目录皆设为任何人可读取

chmod -R a+r *

将file文件设为任何人可读可写可执行

chmod 777 file chmod a=rwx file

使文件具有超级用户权限,

chmod 4755 filename

4.umask:更改文件默认权限

创建文件的默认权限为rw-rw-rw-, 创建目录的默认权限为rwxrwxrwx

使用umask命令即可查询umask值, umask值表示从默认权限了去掉一些权限,然后成为最终的默认权限

[root@localhost 桌面]# umask
0022

可以看到umask的值为0022,第一个0为特殊权限暂且不用理他,后面三个数字分别代表u(文件拥有者)、g(用户组用户)、o(其他用户)的权限变化。u为0,权限没发生改变;g为2,权限-2,失去w(写)权限;o为2,同理

新创建一个文件, 其默认权限为rw-rw-rw-, 由于umask值为0022, 即group和Other Users失去w权限, 最终文件的权限为rw-r--r--

[root@localhost 桌面]# touch test.txt
[root@localhost 桌面]# ls -l test.txt 
-rw-r--r--. 1 root root 0 10月 20 17:36 test.txt

新创建一个目录, 其默认权限为rwx-rwx-rwx, 由于umask值为0022, 即group和Other Users失去w权限, 最终文件的权限为rwxr-xr-x

[root@localhost 桌面]# mkdir test
[root@localhost 桌面]# ls -al test
总用量 0
drwxr-xr-x. 2 root  root   6 10月 20 17:42 .
drwxr-xr-x. 3 herry herry 34 10月 20 17:42 ..

还可使用umask命令修改文件默认权限

[root@localhost 桌面]# umask 027
[root@localhost 桌面]# touch test1.txt
[root@localhost 桌面]# ls -l test1.txt
-rw-r-----. 1 root root 0 10月 20 23:11 test1.txt

处理文件常用命令

ls

命令描述

ls命令是linux系统中用来列出文件和目录的常用命令,它可以显示文件和目录的名称、权限、大小、修改时间等信息

以下是ls命令的常用参数:

  • -a :列出全部的文件,连同隐藏文件

  • -d :仅列出文件目录,而不是列出目录内的文件数据

  • -l :长数据串列出,包含文件的属性与权限等等数据

使用实例

1.列出当前所有文件(包含隐藏文件)

ls -a

2.列出当前目录下的文件属性

ls -l

cd

命令描述

cd命令是change directory的缩写,用于改变当前工作目录

使用实例

1.使用绝对路径切换至test目录

cd /root/test

2.使用相对路径切换至test目录

cd ./test

3.返回到家目录,即root目录

cd ~

4.返回上级目录

cd ..

pwd

命令描述

pwd命令用于显示当前工作目录的绝对路径, 它是print working directory的缩写

下面是pwd命令的常用参数:

  • -p:显示出确实的路径,而非使用链接 (link) 路径

使用实例

1.列出当前所在目录

pwd

2.显示确实的路径, 而不显示使用链接的路径

pwd -P

为啥加了-P后显示的是"/var/spool/mail"呢?因为/var/mail 是链接档,链接到 /var/spool/mail

mkdir

命令描述

mkdir命令用于在Linux系统中创建新目录

下面是mkdir命令的常用参数:

  • -m :指定新创建目录的权限

  • -p :如果指定的路径不存在则一并创建

使用实例

1.创建新目录

mkdir test

2.创建多层目录

mkdir -P test1/test2/test3

3.创建指定权限的目录

mkdir -m 777 test2

rmdir

命令描述

rmdir用于删除空目录, 若目录不为空则报错, 以下是rmdir命令的常用参数

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

使用实例

1.删除一个空目录

rmdir test

2.删除多层空目录

rmdir -p test1/test2/test3

rm

命令描述

rm命令用于删除文件或目录,不管其是否为空

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

  • -i :互动模式,在删除前会询问使用者是否动作

  • -r :递归删除, 最常用删除整个目录

使用实例

1.删除某个目录且询问是否要删除

rm -i 223.txt

2.删除整个test目录

rm -r test

cp

命令描述

cp命令用于复制或移动文件和目录, 以下是cp命令的常用参数:

  • **-f:**强制复制,若目标文件已经存在且无法开启,则移除后再尝试复制。

  • **-i:**在覆盖时会先询问用户是否继续,防止误操作。

  • **-l:**创建硬链接,而非复制文件本身。

  • **-p:**复制文件的权限和时间戳,适用于备份。

  • **-r:**递归复制,用于目录的复制。

  • **-s:**复制为符号链接,也叫快捷方式。

  • **-u:**仅当目标文件较旧时才更新。

使用实例

1.将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc

[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

2.将root/test目录复制到/root/file目录中

cp -r /root/test/ /root/file

3.将/root/test/database.db备份名为database_backup.db

cp -p /root/test/database.db database_backup.db

mv

命令描述

mv命令用于移动文件和目录, 或修改名称, 以下是mv命令的常用参数:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

使用实例

1.更改test目录名称为test1

mv test test1

2.将当前目录的12.txt文件移动至上级目录

mv 12.txt ../

查看文件内容命令

cat

命令描述

cat命令是一种用于查看文件内容的命令,它可以将文件的内容直接输出到标准输出

以下是cat命令常用参数:

  • -A :显示所有字符,包括特殊字符

  • -b :显示行号,仅针对非空白行

  • -E :在每行末尾显示$字符

  • -n :显示行号,包括空白行

  • -T :将制表符显示为^I

  • -v :显示不可见字符

使用实例

1.查看12.txt文件的内容

cat 12.txt

2.把12.txt文件的内容加上行号输入至34.txt文件

cat -n 12.txt > 34.txt

3.清空12.txt文件

cat /dev/null > 12.txt

/dev/null是Linux系统中的一个特殊文件,写入/dev/null的数据都会被丢弃。这条命令将/dev/null的内容重定向输出到12.txt文件中,由于/dev/null文件内容为空,所以12.txt文件的内容会被清空

tac

命令描述

tac与cat命令刚好相反,文件内容从最后一行开始显示

使用实例

1.从末行开始显示34.txt的文件内容

tac 34.txt

more

命令描述

一页一页的显示文件内容, 只能往后翻

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

  • 空白键 (space): 向下翻一页

  • Enter: 向下翻一行

  • /字串: 代表在这个显示的内容当中, 向下搜寻"字符串"这个关键字

  • :f: 立刻显示出档名以及目前显示的行数

  • q: 离开more运行程序, 不再显示该文件内容

  • b:代表往回翻页

使用实例

1.一页一页翻动某个文件

[root@www ~]# more /etc/man_db.config 
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

less

命令描述

一页一页的翻动,与more命令相似,不同的是它能往前翻

  • 空白键 :向下翻动一页;

  • [pagedown]:向下翻动一页;

  • [pageup] :向上翻动一页;

  • /字串 :向下搜寻『字串』的功能;

  • ?字串 :向上搜寻『字串』的功能;

  • n:重复前一个搜寻 (与 / 或 ? 有关!)

  • q:离开 less 这个程序;

使用实例

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

[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
:   <== 这里可以等待你输入命令!

head

命令描述

显示文件内容的前几行

  • -n: 接数字, 代表显示几行的意思, 若不填写则默认显示前10行

使用实例

1.显示文件内容的前20行

head -n 20 /etc/man.config

tail

命令描述

显示文件内容后面几行

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

  • -f :tail命令的-f参数表示"follow", 意思是实时监控文件的末尾,并将新增加的内容输出到终端。这对于需要实时监控日志文件,或者监控其他变化的文件非常有用

使用实例

1.显示文件末尾的10行

tail file.txt

2.显示文件末尾的20行

tail -n 20 file.txt

3.实时显示文件末尾的内容(如日志文件)

tail -f file.txt

时间日期类命令

date命令

命令描述

date命令用于在Linux系统中显示或设置当前系统时间。它可以显示当前日期和时间,并允许用户格式化输出。它还可以用于将系统时间设置为指定的日期和时间。使用格式化字符串,可以自定义输出格式

以下是data命令的常用参数:

  • -d: 使用指定的日期字符串显示时间

  • -s:使用指定的日期字符串设置系统时间

以下是data命令的常用搭配:

常用命令
描述

date

显示当前时间

date +%Y

显示当前年份

date +%m

显示当前月份

date +%d

显示当前天数

date "+%Y-%m-%d %H:%M:%S"

显示年月日时分秒

显示当前时间

1.显当前时间信息

[root@henry /]# date
2023年 01月 17日 星期二 17:38:22 CST

2.显示当前年月日时分秒

[root@henry /]# date "+%Y-%m-%d %H:%M:%S"
2023-01-17 17:40:59

显示其他时间

1.显示前一天

[root@henry /]# date -d '-1 day'
2023年 01月 16日 星期一 17:45:54 CST

2.显示后一天

[root@henry /]# date -d '+1 day'
2023年 01月 18日 星期三 17:46:31 CST

3.显示下一个月时间

[root@henry /]# date -d '+1 month'
2023年 02月 17日 星期五 17:47:25 CST

设置当前系统时间

使用date命令中的-s参数来设置当前系统时间

root@hadoop101 ~]# date -s "2017-06-19 20:52:18"

若想恢复成正常的系统时间, 可使用ntpdate命令来同步时间, 例如下面这条命令用于同步中国的时间

ntpdate cn.pool.ntp.org

其中cn.pool.ntp.org是中国的ntp服务器, 若不能连接此服务器, 可以使用其他国内NTP服务器:

  • ntp1.aliyun.com

  • ntp2.aliyun.com

  • ntp3.aliyun.com

  • ntp.sjtu.edu.cn

  • ntp.tuna.tsinghua.edu.cn

  • ntp.cnnic.cn

cal命令

命令描述

cal 命令是一个在 Linux 系统中显示日历的命令。它可以显示指定月份或年份的日历,也可以显示当前月或当前年的日历。默认情况下,它显示当前月的日历

使用实例

1.查看当前月的日历:cal

2.查看2023年的日历:cal 2023

3.查看指定年份月份的日历:cal 7 2023

压缩和解压命令

gzip/gunzip

命令描述

  • gzip:压缩文件,将文件压缩为.gz文件

  • gunzip:解压.gz文件

使用此命令要注意以下几点:

  • 只能压缩文件,不能压缩目录

  • 不保留原先文件

  • 若有多个文件会产生多个压缩包, 也就是说只能压缩单个文件

使用实例

1.使用gzip命令压缩文件

[herry@henry test]$ ls
flag.txt
[herry@henry test]$ gzip flag.txt
[herry@henry test]$ ls
flag.txt.gz

2.使用gunzip命令解压.gz文件

[herry@henry test]$ gunzip flag.txt.gz 
[herry@henry test]$ ls
flag.txt

zip/unzip

命令描述

zip压缩命令在windows和linux都能使用,且能压缩多个文件和保留原始文件

  • **zip:**压缩文件,将文件压缩为.zip文件

  • **unzip:**解压.zip文件

使用实例

1.将flag1.txt和flag2.txt压缩成flag.zip文件

[herry@henry test]# zip flag.zip flag1.txt flag2.txt
  adding: flag1.txt (stored 0%)
  adding: flag2.txt (stored 0%)
[herry@henry test]# ls
flag1.txt  flag2.txt  flag.zip

2.解压flag.zip文件

[herry@henry test]# unzip flag.zip

3.解压flag.zip文件至指定目录

[root@henry test]# unzip flag.zip -d /opt

tar

命令描述

tar是Linux和Unix系统中常用的文件归档命令,它可以将多个文件或文件夹打包成一个单独的文件,并且还可以进行压缩

如下是tar命令的常用参数:

tar命令参数
描述

-c

压缩.tar 文件

-v

显示详细信息

-f

指定压缩后的文件名

-z

打包文件的同时进行压缩

-x

解压.tar文件

-C

解压文件到指定目录

使用实例

1.压缩多个文件

[root@henry test]# tar -zcvf flag.tar.gz flag1.txt flag2.txt 
flag1.txt
flag2.txt
[root@henry test]# ls
flag1.txt  flag2.txt  flag.tar.gz

2.解压文件至当前目录

[root@henry test]# tar -zxvf flag.tar.gz 
flag1.txt
flag2.txt

3.解压文件至指定目录

[root@henry test]# tar -zxvf flag.tar.gz -C /opt

文件查找命令

find命令

命令描述

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端

以下是find命令的使用参数:

find命令参数
描述

-name

按照指定的查询方式查找文件

-user

查找指定用户的所有文件

-size

按照指定的文件大小查找文件, 单位有b(快)、c(字节)、w(字)、k(千字节)、M(兆)、G(吉字节)

使用实例

1.查找/root目录下的.txt文件

find root/ -name "*.txt"

2.查找/opt目录下, 用户名称为henry的文件

find /opt -user henry

3.查找/home目录下文件大于100m的文件

find /home -size +100M

locate命令

命令描述

locate命令是Linux系统中常用的文件查找命令, 使用数据库来查找文件, 所以它的查询速度非常快。

由于locate指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb指令创建locate数据库。

另外需要注意的是,默认情况下,locate命令只能查找用户自己可见的文件,如果要查找所有文件,需要使用sudo命令或者是使用root用户来查找。

以下是locate命令常用的参数:

常用参数
描述

-c

显示查找到的文件数量

-i

忽略大小写

-r

递归搜索

使用实例

1.查找系统中所有文件名中包含"example"的文件

locate -i "example"

2.查找/path/to/folder文件夹中所有包含"example"的文件

locate -i -r "example" /path/to/folder

grep命令

命令描述

grep命令是Linux系统中常用的文本查找工具。它可以在文本文件或者是标准输入中查找指定的文本, 通常配合管道符"|"进行使用

以下是grep命令常用的参数:

常用参数
描述

-c

显示匹配行数

-i

忽略大小写

-r

递归查询

-n

显示行号

-v

查找不匹配的行

使用实例

1.查找/path/to/folder文件夹中所有文件中包含example的行

grep -r "example" /path/to/folder

2.匹配test.txt内容中包含'go'的字符串

grep 'go' test.txt

3.查找当前目录中文件名带"flag"的文件, 并显示行号

ls | grep -n "flag"

进程管理命令

ps命令

命令描述

ps 命令用于查看当前系统进程的状态。它能够列出当前正在运行的所有进程,并显示它们的进程 ID(PID)、父进程 ID(PPID)、运行状态、内存占用、执行的命令等信息。

以下是 ps 命令的使用参数:

ps 命令参数

描述

a

显示所有进程,包括其他用户的进程。

x

显示所有与终端无关的进程。

u

以用户为主的格式输出进程信息。

f

以进程树的形式输出进程信息。

e

显示所有进程,包括没有终端的进程。

l

以长格式输出进程信息。

所有进程信息字段如下所示:

  • USER: 进程所属的用户名

  • PID:进程 ID

  • PPID: 父进程ID

  • %CPU:进程占用 CPU 的百分比

  • %MEM:进程使用的内存占系统内存的百分比

  • VSZ:进程虚拟内存的大小(单位:KB)

  • RSS:进程使用的物理内存大小(单位:KB)

  • TTY:进程所属的终端

  • STAT:进程的状态(例如,运行、睡眠等)

  • START:进程启动时间

  • TIME:进程占用 CPU 的时间

  • COMMAND:进程所执行的命令

使用实例

1.列出所有正在运行的进程

ps aux

2.列出所有与当前终端无关的进程

ps -x

3.列出指定用户的进程信息, 若不加参数直接ps -u则默认列出当前用户的进程信息

ps -u 

4.以进程树的形式输出进程信息

ps -f

kill命令

命令描述

kill命令用于终止指定进程的执行。可以使用PID(进程ID)或作业号来指定进程。使用不同的信号可以控制终止进程的方式。

以下是kill命令的常用参数:

kill命令参数
描述

-9

表示强迫进程立即停止

-l

列出所有的信号名

以下是kill命令的常用信号:

信号
描述

SIGTERM

默认信号,请求进程正常终止

SIGKILL

强制终止进程,进程不会有机会进行清理和收尾工作

SIGSTOP

停止进程执行,但不终止进程

SIGCONT

恢复一个暂停的进程执行,但没有影响进程的运行状态

使用实例

1.终止进程id为1234的进程:

kill 1234

2.以强制方式终止进程id为5678的进程:

kill -9 5678

3.停止进程id为3456的进程:

kill -SIGSTOP 3456

4.恢复进程id为3456的进程执行:

kill -SIGCONT 3456

top命令

命令描述

top 命令是一种用于实时监控系统性能的命令行工具。它能够显示当前正在运行的进程,以及每个进程的 CPU 和内存占用情况,同时还能够提供系统的负载情况。

以下是top命令的常用参数:

top命令参数
描述

-d

指定刷新时间间隔,单位为秒

-p

显示指定进程ID的信息,多个进程ID用逗号分隔

-u

指定要显示哪些用户的进程信息,多个用户用逗号分隔

-c

显示完整的命令行,而不是截断的命令行

-o

用于指定在进程列表中根据哪个字段进行排序。

使用实例

1.查看系统中正在运行的进程,并按照 CPU 占用率排序

top -o %CPU

2.查看系统中正在运行的进程,并按照内存占用率排序

top -o %MEM

3.查看系统中正在运行的进程,并按照进程 ID 排序

top -o pid

4.查看系统负载情况,包括 CPU 使用率、内存占用率、swap 交换分区使用率等

top

5.查看 top 命令的帮助文档

top -h

pstree命令

命令描述

pstree命令是一个常用的Linux/Unix命令,它能以树形结构显示进程之间的关系,可以显示当前系统中所有进程的进程树

以下是pstree命令的常用参数:

pstree命令参数
描述

-a

显示进程的命令行参数

-c

显示进程之间的进程关系

-p

显示进程的进程号

-u

显示进程的拥有者

使用实例

1.显示当前系统中所有进程的进程树

pstree		

2.显示指定进程ID的进程树

pstree 1324

3.显示进程之间的关系

pstree -c

系统定时任务

VI/VIM编辑器

简介

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器

VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计

VIM 与 VI 编辑器完全兼容

模式转换

如下图所示,一般模式下输入i、a或者o可以切换至编辑模式,编辑模式按ESC即可退回一般模式;同理,一般模式输入:或者/可切换至命令模式, 命令模式按ESC即可退回一般模式

一般模式

使用vi或vim命令打开一个文档就直接进入一般模式了(默认模式),在此模式下可使用『上下左右』按键来移动光标

一般模式的主要操作有: 删除、复制、粘贴

一般模式下常用命令
描述

yy

复制光标当前一行

数字+yy

例如2+yy, 即从当前光标处复制2行

p

粘贴至当前光标处

u

撤销上一步操作

dd

删除光标当前行

数字+dd

删除光标后多少行

x

剪切一个字母

yw

复制一个词

dw

删除一个词

shift+6 (^)

移动至行头

shift+4 ($)

移动至行尾

数字+shift+g

移动至指定目标行, 例如按5+shift+g即移动至将光标移动至第5行行首

1+shift+g

移动至页首

shift+g

移动至页尾

​

编辑模式

在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的, 要等到你按下i, I, o, O, a, A等任何一个字母之后才会进入编辑模式

通常在Linux中,按下这些按键时,在画面的左下方会出现INSERT或REPLACE的字样, 此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下Esc这个按键即可退出编辑模式

切换编辑模式的按键
编辑起始位置

i

当前光标前

a

当前光标后

o

当前光标行的下一行

I

光标所在行的最前

A

光标所在行的最后

O

当前光标行的上一行

命令模式

在一般模式当中可以输入冒号:进入命令模式

命令模式常用命令
描述

:w

保存

:q

不保存退出

:wq

保存并退出

:!

强制执行, 通常使用q!强制退出

/要查找的词

按n键往下查找, 按N键往上查找

:noh

取消高亮显示

:set nu

显示行号

:set nonu

关闭行号

:%s /old /new /g

替换内容, /g表示替换匹配到的所有内容

用户和用户组管理

用户账号管理

用户账号的管理涉及添加、删除和修改用户账号信息。而这些操作实际上就是对/etc/passwd文件进行更新

useradd

命令描述

useradd命令用于添加新用户, 以下是useradd命令常用参数:

  • -c : 指定用户的一段注释性描述。

  • -d : 指定用户的主目录,如果此目录不存在,可以使用 -m 选项来创建主目录。

  • -g : 指定用户所属的用户组。

  • -G : 指定用户所属的附加组。

  • -s : 指定用户的登录 Shell。

  • -u : 指定用户的用户号

使用实例

1.创建一个用户sam, 其中-d和-m选项用来为用户sam生成一个主目录 /home/sam

/home为默认的用户主目录所在的父目录

useradd –d /home/sam -m sam

2.创建一个用户gem, 指定用户登录的shell是/bin/sh, 它属于group用户组,同时又属于adm和root用户组(这两个组是附加组)

useradd -s /bin/sh -g group –G adm,root gem

userdel

命令描述

userdel 命令用于在 Linux 系统中删除用户。它可以删除用户的账户和与其相关的文件,例如用户主目录和用户配置文件

删除用户账号就是要将/etc/passwd等系统文件中的关于该用户的记录删除,必要时还删除用户的主目录

一下是userdel命令的常用参数:

  • -r : 删除用户的同时删除用户主目录和其他文件

  • -f : 强制删除用户,不管该用户是否已登录

使用实例

1.删除用户sam以及其主目录

userdel -r sam

2.删除用户名为 tom 的用户,并强制删除其账户,即使该用户已登录

userdel -f tom

3.删除用户名为 kim 的用户,不删除其主目录和其他文件

userdel kim

usermod

命令描述

usermod 命令用于在 Linux 系统中修改用户信息。它可以修改用户名、用户组、用户密码、用户主目录等

以下是usermod命令的常用参数:

  • -l : 修改用户名

  • -g : 修改用户所属的用户组

  • -G : 修改用户所属的附加组

  • -d : 修改用户主目录

  • -s : 修改用户登录的 shell

  • -u : 修改用户的用户号

  • -L : 锁定/解锁用户

  • -U : 更新用户密码

使用实例

1.修改sam用户的登录Shell为/bin/sh, 主目录为/home/z, 用户组为developer

usermod -s /bin/sh -d /home/z –g developer sam

2.修改用户名为 gem 的用户的用户名为 newgem

usermod -l newgem gem

3.修改用户名为 jim 的用户,将其设置为附加组 adm 和 root

usermod -G adm,root jim

passwd

命令描述

passwd 命令用于在 Linux 系统中修改用户密码。使用这个命令可以更改当前用户或其他用户的密码, 请注意,在修改密码后,用户可能需要重新登录才能生效

常用的参数包括:

  • -d : 删除用户密码

  • -l : 锁定用户账户

  • -u : 解锁用户账户

使用实例

1.例如当前用户是sam, 使用如下命令修改自己的口令

$ passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

2.若当前用户是超级用户, 可以不输入旧密码就能修改任何用户的口令

[root]# passwd sam 
New password:******* 
Re-enter new password:*******

3.锁定sam用户的口令, 使其不能登录

[root]# passwd -l sam

用户组管理

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

groupadd

命令描述

groupadd 命令用于在 Linux 系统中创建新用户组

常用的参数包括:

  • -g: 指定新用户组的组标识号 (GID)

  • -r : 创建系统组(GID < 1000)

使用实例

1.创建一个名为 newgroup 的新用户组,并指定其组标识号为1000

groupadd -g 1000 newgroup

2.创建一个名为 sysgroup 的系统用户组

groupadd -r sysgroup

3.创建一个名为 staff 的新用户组,并自动分配组标识号

groupadd staff

groupdel

命令描述

groupdel 命令用于在 Linux 系统中删除已有的用户组

使用实例

删除一个名为 group1 的用户组

groupdel group1

groupmod

命令描述

groupmod 命令用于在 Linux 系统中修改已有的用户组. 使用这个命令可以修改用户组的名称、组标识号以及成员等信息

常用的参数包括:

  • -g : 指定新的组标识号(GID)

  • -n : 指定新的组名称

  • -a : 添加用户到组中

  • -d : 从组中删除用户

  • -G: 指定用户组成员的

使用实例

1.将名为 oldgroup 的用户组修改为 newgroup

groupmod -n newgroup oldgroup

2.将名为 oldgroup 的用户组的组标识号(GID)修改为 1000

groupmod -g 1000 oldgroup

3.将用户 tom 添加到名为 newgroup 的用户组中

groupmod -a -G newgroup tom

4.将用户 tom 从名为 newgroup 的用户组中删除

groupmod -d -G newgroup tom

newgrp

命令描述

newgrp 命令用于在 Linux 系统中切换用户组。使用这个命令可以让用户暂时地切换到另一个用户组中,并在操作完成后切换回原来的用户组

使用实例

如下命令将当前用户切换至root用户组, 前提条件是root用户组是该用户的主组或附加组

newgrp root

存放用户信息的系统文件

/etc/passwd

Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性

如下例子所示, /etc/passwd中一行记录对应着一个用户,每行记录又被冒号分隔为7个字段, 分别为用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

# cat /etc/passwd

root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh

系统中有一类用户被称为伪用户, 这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求

常见的伪用户如下表格所示:

伪用户
描述

bin

拥有可执行的用户命令文件

sys

拥有系统文件和配置文件

adm

拥有帐户文件和系统日志

uucp

UNIX-to-UNIX复制程序使用

lp

打印系统使用

nobody

用于NFS匿名访问

/etc/shadow

由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是**/etc/shadow**文件。

只有超级用户才能读取此文件,这就保证了用户密码的安全性

它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开, 字段描述如下所示:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

如下是/etc/shadow的文件内容:

# cat /etc/shadow

root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::

/etc/group

用户要访问属于附加组的文件时,必须首先使用newgrp命令切换至附加组

用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号":"隔开若干个字段,这些字段描述如下所示:

组名:口令:组标识号:组内用户列表

如下是/etc/group的文件内容:

root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam

批量添加用户

1.编辑用户文本文件

每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号

一个范例文件user.txt内容如下:

user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash

2.执行newuser命令创建用户

要使用root用户只需newuser命令

newusers < user.txt

3.执行pwunconv命令

pwunconv命令是一个命令行工具,通常用于将密码文件从旧版本的Unix使用的密码文件格式转换为当前版本的Unix使用的格式

pwunconv

4.编辑每个用户的密码对照文件

文件内容格式为:用户名:密码, 例如下面的passwd.txt:

user001:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456

5.执行chpasswd命令

chpasswd命令是一个命令行工具,它允许您批量更改一个或多个用户的密码。它从标准输入读取用户名和密码的列表,并更新系统密码文件中相应的密码

执行如下命令, chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏

chpasswd < passwd.txt

6.执行pwconv命令

pwconv命令是一个命令行工具,它用于将密码文件从系统原始的密码文件格式转换为shadow文件的格式

pwconv

管道及重定向

输入/输出流控制

在Linux系统中, 执行一个shell命令通常会自动打开三个标准文件, 分别是标准输入文件、标准输出文件和标准错误输出文件。进程将从标准输入文件得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件

如下表格所示, linux shell下有三种标准的文件描述符:

文件描述符
描述
操作符

0

标准输入(stdin)

< ,<<

1

标准输出(stdout)

>, >>, 1>或1>>

2

标准错误输出(stderr)

2> 或 2>>

输入重定向

输入重定向用于改变命令的输入源, 指输入可以不来自标准输入,而来自指定的文件

输入重定向的符号为<, 命令格式为命令<文件名

如下代码所示, 通过重定向输入将文件file的内容作为输入让cat命令执行

[herry@localhost ~]$ cat test.txt 
hello world
[herry@localhost ~]$ cat<test.txt 
hello world

虽然执行结果相同,但第一行代表是以键盘作为输入设备,而第二行代码是以test.txt文件作为输入设备。

输出重定向

在LINUX中,输出重定向是指将命令的输出重定向到一个文件或者设备上。这可以通过使用">"或">>"符号来实现

类型
操作符
描述

重定向标准输出

>

输出重定向将命令执行的结果输出至指定的文件中, 而不会显示在屏幕上

重定向标准输出

>>

将命令的执行结果追加输出至指定文件

重定向标准错误

2>

清空指定文件的内容, 并将标准错误信息输出至此文件

重定向标准错误

2>>

将标准错误信息追加输出至指定的文件

重定向标准输出和标准错误

&>

将标准输出、标准错误的内容全部输出至指定文件, 而不会显示在屏幕上 当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件 当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

将ls /etc的执行结果输出至test.txt文件

[root@localhost 桌面]# ls /root/ >test.txt
[root@localhost 桌面]# cat test.txt 
anaconda-ks.cfg
file
initial-setup-ks.cfg
test

将ls /etc的执行结果追加至test.txt文件

[root@localhost 桌面]# ls /root/ >>test.txt
[root@localhost 桌面]# cat test.txt 
anaconda-ks.cfg
file
initial-setup-ks.cfg
test
anaconda-ks.cfg
file
initial-setup-ks.cfg
test

将执行fuckcmd命令的错误信息输出至test.txt文件

[root@localhost 桌面]# fuckcmd 2>test.txt
[root@localhost 桌面]# cat test.txt 
bash: fuckcmd: 未找到命令...

将执行fuckcmd命令的错误信息追加输出至test.txt文件

[root@localhost 桌面]# fuckcmd 2>>test.txt
[root@localhost 桌面]# cat test.txt 
bash: fuckcmd: 未找到命令...
bash: fuckcmd: 未找到命令...

管道操作

管道可以把一系列的命令连接起来, 将第一个命令的输出作为第二个命令的输入, 而第二个命令的输出又会作为第三个命令的输入, 以此类推下去, 显示在屏幕上的内容是管道行最后一个命令的输出

管道命令由若干个指令组成, 每个指令用|隔开, 仅有在前一个指令执行正确后才会执行后面的指令, 管道命令的使用格式如下:

command1 | command2 | command3

cut

cut命令可将字符串按指定分隔符分割成多个部分,其中-f参数是用来指定输出哪些区块,默认是输出所有区块。

  • -d:后接分割字符,默认是制表符(tab),可以指定分割字符。

  • -f:后接表示输出第几个区块或者区块范围,多个区块可以用逗号分隔

例如,将/etc/passwd文件中所有用户名输出:

cut -f 1 -d ":" /etc/passwd

使用实例

1.查询PATH变量的第三部分内容

[root@localhost 桌面]# echo $PATH | cut -d: -f 3
/usr/bin

2.查询系统中有多少个用户使用bash

[root@localhost 桌面]# cat /etc/passwd | grep /bin/bash | wc -l
2

wc命令是Linux中的一个文本统计工具,用于统计文本中的字符数、单词数和行数, 其中-l参数用于统计行数

网络配置

1.修改IP地址

使用ifconfig命令

例如要将eth0接口的IP地址更改为192.168.1.100,你可以使用以下命令

ifconfig eth0 192.168.1.100

如果你想为IP地址设置子网掩码,可以使用“netmask”参数。例如,要将eth0接口的子网掩码设置为255.255.255.0,你可以使用以下命令:

ifconfig eth0 192.168.1.100 netmask 255.255.255.0

注意:如果你的系统使用DHCP自动获取IP地址,则可能无法使用ifconfig命令修改IP地址。在这种情况下,你可能需要使用其他工具(例如dhclient)来配置网络接口

通过修改配置文件

使用vim命令修改IP的配置文件: vim /etc/sysconfig/network-scripts/ifcfg-ens33, 要修改和添加的字段有三个, 分别是BOOTPROTO、IPADDR、GATEWAY

BROWSER_ONLY=no
BOOTPROTO=static  #指定网络接口的启动协议,一般此项默认值为DHCP,即表示动态分配IP,若要修改ip,则需将此项修改成static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=848f0bcf-9a03-401d-975e-6cf3fcbb39fe
DEVICE=ens33
ONBOOT=yes #系统启动的时候网络接口是否生效(yes/no)

# 设置IP地址
IPADDR=192.168.47.129

# 设置网关地址
GATEWAY=192.168.47.2

编辑完配置文件后执行: service network restart 重启网络

2.修改主机名

通过修改配置文件

查看当前主机名称

[root@192 network-scripts]# hostname
localhost.localdomain

通过编辑/etc/hostname文件来修改主机名称, 修改完后需重启才能生效

使用hostnamectl命令

若想修改完hostnamectl立即生效而不需要重启, 可以使用hostnamectl命令

[root@192 network-scripts]# hostnamectl set-hostname Henry

3.修改hosts文件

Linux 系统的 hosts 文件是一个简单的文本文件,它用于将主机名与 IP 地址相关联。在您的计算机上,您可以使用 hosts 文件来将某些网站的名称映射到特定的 IP 地址,而无需使用域名服务器(DNS)

为了修改 hosts 文件,您需要使用特殊权限,因为它是一个系统文件

使用vim修改hosts文件: vim /etc/hosts, 然后添加如下内容

然后就可以直接对主机名test进行ping测试

系统管理

进程与服务

  • 进程:计算机中, 一个正在执行的程序或命令, 被叫做“进程”(process)

  • 服务:启动之后一直存在、常驻内存的进程,一般被称作“服务”(service)

在Linux系统中,守护进程和系统服务有一定的相似之处,但也有一些区别。

守护进程(daemon)是一种在后台运行的进程,通常用于执行某些系统任务或提供服务。它们通常不会和用户交互,并且在用户终端中不会显示输出。

系统服务(system service)是指运行在系统中的某种程序,用于提供特定的功能或服务。这些服务可以是守护进程,也可以是其他类型的进程。

因此,守护进程和系统服务是有区别的,但守护进程是系统服务的一种类型。通常情况下,系统服务都是守护进程,但并不是所有的守护进程都是系统服务

系统服务管理方式

在linux系统中, 有两种不同的系统服务管理方式, 它们分别是/etc/init.d和/usr/lib/systemd/system, 它们的区别如下:

  • 系统支持:/etc/init.d目录主要用于传统的SysV风格的Linux发行版,而/usr/lib/systemd/system目录则用于systemd系统服务管理器。systemd是目前比较流行的系统服务管理器,它支持更多的功能和特性。

  • 服务定义方式:/etc/init.d目录中的服务通常是由脚本定义的,而/usr/lib/systemd/system目录中的服务则使用systemd服务定义文件(即".service"文件)定义。systemd服务定义文件包含了服务的启动参数、依赖关系、超时设置等信息。

  • 命令行工具:/etc/init.d目录中的服务通常使用"/etc/init.d/服务名"命令来管理,而/usr/lib/systemd/system目录中的服务则使用"systemctl"命令来管理

service(Centos6)

使用语法

service 服务名 start|stop|restart|status

查看服务

ls /etc/init.d

使用实例

1.查看网络服务状态

service network status

2.停止网络服务

service network stop

3.启动网络服务

service network start

4.重启网络服务

service network restart

systemctl(Centos7)

基本语法

systemctl start|stop|restart|status 服务名

查看服务

ls /usr/lib/systemd/system

使用实例

1.查看防火墙服务状态

systemctl status firewalld

2.启动防火墙服务

systemctl start firewalld

3.停止防火墙服务

systemctl stop firewalld

4.重启防火墙服务

systemctl restart firewalld

设置服务开机自启

基本语法

systemctl list-unit-files  #查看服务开机自启状态
systemctl disable service_name  #关闭指定服务开启自启动
systemctl enable service_name  #开启指定服务开启自启动

使用实例

开启或关闭防护墙服务的开机自启动

systemctl disable firewalld.service #关闭防火墙开机自启动
systemctl enable firewalld.service #开启防火墙开机自启动

chkconfig

基本语法

  • 查看所有服务自启配置:chkconfig

  • 关闭指定服务的自启动:chkconfig 服务名 off

  • 开启指定服务的自启动:chkconfig 服务吗 on

  • 查看指定服务的自启动状态:chkconfig 服务名 --list

使用实例

1.开启或关闭network服务的自启动

chkconfig network on  #开启
chkconfig network off #关闭

2.开启或关闭network服务指定级别的自动启动

chkconfig --level 指定级别 network on
chkconfig --level 指定级别 network off

系统运行级别

级别等级

在linux系统中有7种运行级别, 而常用的级别是3和5

  • **运行级别0:**运行级别0系统停机状态, 系统默认运行级别不能设为0, 否则无法正常启动

  • **运行级别1:**单用户工作状态, 需要root权限, 用于系统维护, 禁止远程登录, 只能实地操作

  • **运行级别2:**多用户工作状态, 没有NFS, 不支持网络

  • **运行级别3:**完全的多用户工作状态, 有NFS, 登录后进入控制台命令模式

  • **运行级别4:**系统一般不使用, 是一个特殊的级别

  • **运行级别5:**登陆后进入图形GUI界面

  • **运行级别6:**系统关机并重启, 默认运行级别不能为6, 否则系统无法正常启动

NFS (Network File System) 是一种网络文件系统协议,它允许用户在不同的计算机之间共享文件。在 Linux 中,NFS 可以让用户将一台计算机上的文件共享给其他计算机访问

在Centos7中, 运行级别被简化成两种:

  • multi-user.target:等价于原运行级别3, 多用户有网, 无图形界面

  • **graphical.target:**等价于原运行级别5, 多用户有网, 有图形界面

查看当前运行级别

systemctl get-default

修改当前运行级别

systemctl set-default {TARGET}.target  #此处TARGET取multi-user或graphical

例如, 使用如下命令, 将系统的默认运行级别设置为multi-user.target, systemctl set-default multi-user.target

systemctl set-default multi-user.target

关机重启命令

常用命令

命令
描述

sync

将数据由内存同步到硬盘中

halt

停机, 关闭系统, 但不断电

poweroff

关机, 断电

rebot

重启, 等同于shutdown -r now

shutdown

后面可接参数指定关机时间, 默认一分钟后关机

使用实例

1.计算机将在2分钟后关机, 并在屏幕中显示指定内容, 其中-h参数表示指定多少分钟后关机, -c参数表示取消上一条shutdown命令

[root@henry /]# shutdown -h 2 "HelloWorld"
Shutdown scheduled for 二 2023-01-17 16:55:55 CST, use 'shutdown -c' to cancel.

Broadcast message from root@henry (Tue 2023-01-17 16:53:55 CST):

HelloWorld
The system is going down for power-off at Tue 2023-01-17 16:55:55 CST!

[root@henry /]# shutdown -c

Broadcast message from root@henry (Tue 2023-01-17 16:54:05 CST):

The system shutdown has been cancelled at Tue 2023-01-17 16:55:05 CST!

2.立即关机, 等同于poweroff

[root@henry /]# shutdown -h now

3.系统重启, 等同于reboot

[root@henry /]# shutdown -r now

sync命令的作用

Linux 系统采用了预读迟写(Read-ahead and Delayed Write)操作方式来提高磁盘读写效率。当用户保存文件时,Linux 核心会将数据先保存在缓存中,等缓存满了或者系统有其他需要时再将数据写入磁盘。

这种方式可以极大提高磁盘写入数据的效率,因为缓存中写入数据的速度要快于磁盘。但是,这种方式也存在安全隐患,如果系统掉电或者其他严重问题出现,那么缓存中的数据可能会丢失。

使用 sync 指令可以立即将缓存中的数据写入磁盘,以确保数据的安全性

Linux正则表达式

普通正则

元字符

元字符
匹配描述

.

匹配除了换行符以外的任意单个字符

*

前导字符出现0次或连续多次

.*

任意长度字符

^

行首(以…开头)

$

行尾(以…结尾)

^$

空行

[]

匹配括号里任意单个字符或一组单个字符

[^]

匹配不包含括号里任一单个字符或一组单个字符

^[]

匹配以括号里任意单个字符或一组单个字符开头

^[^]

匹配非括号里任意单个字符或一组单个字符开头

<

取单词的头

>

取单词的尾

< >

精确匹配

实例演示

创建test.txt文件用于正则匹配操作, 文件内容如下:

ggle
gogle
google
gooogle
goooooogle
gooooooogle
taobao.com
taotaobaobao.com

jingdong.com
dingdingdongdong.com
10.1.1.1
Adfjd8789JHfdsdf/
a87fdjfkdLKJK
7kdjfd989KJK;
bSKJjkksdjf878.
cidufKJHJ6576,

hello world
helloworld yourself

1.匹配包含'go'的字符串: grep 'go' test.txt

2.匹配以'g'开头的字符串: grep '^g' test.txt

3.匹配以'g'开头,后接一个任意字符的字符串:grep '^g.' test.txt

4.匹配以'g'开头,后接多个任意字符的字符串: grep '^g.*' test.txt

5.匹配所有字符: grep '.*' test.txt

6.匹配以'gle'结尾的字符串: grep 'gle$' test.txt

​

7.匹配以'gle'结尾的所有字符串: grep '.*gle$' test.txt

**8.匹配以字符'a','b','c'开头的字符串: grep '^[abc]' test.txt **

9.匹配非字符'a','b','c'开头的字符串: grep '^[^abc]' test.txt

10.匹配含有字符'a','b','c'的字符串: grep '[abc]' test.txt

​

扩展正则

扩展元字符

扩展元字符(需用grep -E或egrep)

功能

+

匹配一个或多个前导字符

?

匹配零个或一个前导字符

|

或

()

将字符组合成一个整体

{n}

前导字符重复n次

{n,}

前导字符重复至少n次

{n,m}

前导字符重复n到m次

扩展元字符(需用grep -P)

功能

\d

匹配数字, 等价于[0-9]

\w

匹配字母数字下划线, 等价于[a-zA-Z0-9_]

\s

匹配空格、制表符、换页符, 等价于[\t\r\n]

实例演示

1.grep -E 'o+gle' test.txt

2. grep -E 'o?gle' test.txt

**3.匹配前导字符‘o’至少出现两次的字符串: grep -E 'go{2,}' test.txt **

4.匹配前导字符'tao'至少出现两次的字符串: grep -E '(tao){2,}' test.txt

5.匹配包含'hello'或'jingdong'的字符串:grep -E '(hello|jingdong)' test.txt

6.匹配IP格式的字符串: grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}' test.txt 或 grep -P '(\d){1,3}\.(\d){1,3}\.(\d){1,3}.(\d){1,3}' test.txt

此处要注意对特殊字符的转义, 例如这里就对.使用了转义符号

img
img
363003_1227493859FdXT
image-20220915173136145
image-20221008145907089
image-20221008150113924
image-20221008150630833
image-20221008150806858
image-20221008151416025
image-20221008151540005
image-20221008153300460
image-20221008153519395
image-20221008162530415
image-20221008162747780
image-20221008164112791
image-20221008164502172
image-20221008164817122
image-20230117220249864
image-20230117220555896
image-20230117220648878
image-20230222144936390
image-20230222145055218
image-20230222145605614
image-20230222145706954
image-20221124160318144
image-20221221112707000
image-20221221161919854
image-20221221163842975
image-20221221164016142
image-20230109234319340
image-20230115104048526
image-20221018232926698
image-20221018233400385
image-20221020102121356
image-20221020102435071
image-20221020102645393
image-20221020102939310
image-20221020103415245
image-20221020103755646
image-20221020104042127
image-20221020104625050
image-20221020141052127
image-20221020141520613
image-20221020141809380
image-20221020142042456
image-20221020142345370
image-20221020144411057