Linux笔记

日之朝矣
提示
该页面的图片均使用github存储,可能会出现加载不出来的情况!

Linux文件系统

一切皆文件

就连硬件设备也是作为文件出现

Linux目录结构

image-20220504182112581

Linux目录作用

  • /bin : binary 目录,即可执行文件的目录
  • /sbin: System Binary: 超级管理员可用的可执行文件目录
  • /lib: Library 库目录,系统和应用需要的一些库文件
  • /lib: Library 64位目录,64位系统的库文件
  • /usr: user目录,用户级别所有的应用程序和所需要的文件与数据
  • /boot:引导启动所需要的各种文件
  • /dev: device 设备管理目录
  • /etc: 系统管理所需要的配置文件与子目录
  • /home : 每一个用户对应所有的目录(普通用户)
  • /root: root用户的用户目录
  • /opt: optional 可选目录,给第三方软件包专门留下的位置
  • /media: 识别可移动媒体设备
  • /mnt: mount(挂载)目录,将外部设备挂载到这里
  • /proc: process 进程目录
  • /run:运行目录,当前系统运行信息
  • /srv: service 系统服务
  • /sys: system 系统硬件信息相关文件
  • /tmp: temporary 临时目录,临时存放
  • /var :可变目录,经常需要修改的东西,一般是各种log,日志

VI / VIM编辑器

文本编辑器

1
2
# 启动vim编辑器打开文件
$ vim 文件名

image-20220505104943282

vim编辑器模式

image-20220505091322383

通过vim 文件进入文件后默认是一般模式,能够使用的主要操作:删除复制粘贴

之后按 i 、a 、o 任意一个进入编辑模式,可以对文本进行编辑,注意,编辑后需要退出编辑模式,进入命令模式使用:write保存编辑的内容

回退改变可以在一般模式按u便会撤回修改,但是并没有保存,仍然需要到命令模式进行一次保存,才能还原更改

语法

一般模式下

语法功能描述
yy复制光标当前一行
y 数字 y复制光标及以下一共 n(数字)行
p粘贴到光标行之下
数字 p将将复制的内容粘贴 数字 次
dd删除光标行
数字 dd删除光标及以下一共 数字行
y$复制光标位置到该行结束的内容
y^复制该行开头到光标位置的内容
d$删除光标位置到该行结束的内容
d^删除该行开头到光标位置的内容
yw复制光标当前所处位置到该单词末尾,会顺便帮你把单词后的空格也复制
dw删除光标当前所处位置到该单词末尾,会顺便帮你把单词后的空格也删掉
x剪切光标所在位置的单个字符
X剪切光标之前的单个字符
r更改当前光标的单个字符
R依次替换光标后的每个字符
^移动光标到行首
$移动光标到行尾
w移动光标到下一个单词(词头位置)
e移动光标到当前词尾
数字N G移动到目标行
gg移动到文件开头
G移动到文件结尾
L移动到当前页页尾开头
H移动到当前页也首开头
u撤销上一步操作,但不会保存,需要手动保存

编辑模式

进入编辑模式

语法功能描述
i直接进入编辑模式
a进入编辑模式,光标后移一位
o进入编辑模式,光标下移一行(建立新行)
cc 或 C删除当前行并进入编辑模式
I进入编辑模式,光标回到当前行首
A进入编辑模式,光标跳到当前行尾
O进入编辑模式,光标上移一行(建立新行)

退出编辑模式

esc

命令模式下

:set nu显示所有行号

:set nonu隐藏所有行号

基本语法

命令功能
:w保存
:q退出
:wq保存并退出
:q!不保存强制退出
/要查找的词按n 查找下一个,按N往上查找
:noh取消高亮显示
:set nu显示行号
:set nonu关闭行号
:s/old/new替换当前行匹配到的第一个 old 为 new
:s/old/new/g替换当前行匹配到的所有 old为new
:%s/old/new替换文档中每一行匹配到的第一个old为new
:%s/old/new/g替换文档中匹配到的所有old为new

网络配置和系统管理操作

查看网络IP和网关

ifconfig(Interface Config)

1
$ ifconfig

VMware提供了三种网络连接模式:

  • 桥接模式:

    虚拟机直接连接外部物理网络的模式,主机起到了网桥的作用。这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。

  • NAT 模式:

    虚拟机和主机构建一个专用网络,并通过虚拟网络地址转换(NAT)设备对IP进行转唤。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。

  • 仅主机模式:

    虚拟机只与主机共享一个专用网络,与外部网络无法通信。

修改静态ip

ip如果是动态分配的话,每次连接时都需要知道现在的ip到底是多少,十分麻烦,但是如果我们直接静态分配给它一个ip,之后就只用连接静态ip就好了

在CentOS中可以直接在图形化界面设置里的网络IPv4里修改静态ip

这里使用控制台修改

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# ens33是安装Linux时,显示的网络名称

# 修改 BOOTPROTO="dhcp" 的 dhcp 改成 static
# 添加如下内容,其中,31这部分要看给虚拟机NAT分配的子网第三段是多少,100正好和Linux的名字linux100对应上,算是好记吧
# 粘贴的快捷键是ctrl+shift+v

#IP地址
IPADDR=192.168.31.100
#网关
GATEWAY=192.168.31.2
#域名解析器
DNS1=192.168.31.2

DHCP: 动态主机控制协议

之后重启网络服务

1
service network restart

修改ip地址后可能会遇到的问题

  1. 物理机能ping通虚拟机,但是虚拟机ping不通物理机,一般 都是因为物理机的防火墙问题,把防火墙关闭就行

  2. 虚拟机能Ping通物理机,但是虚拟机Ping不通外网,一般都是因为DNS的设置有问题

  3. 虚拟机Ping www. baidu. com 显示域名未知等信息,一般查看GATEWAY和DNS设置是否正确

  4. 如果以上全部设置完还是不行,需要关闭network服务

    ➢systemctl stop network 关闭

    ➢systemctl disable network 禁用

    关闭后执行systemctl restart NetworkManager网络便会重新连接

  5. 如果检查发现systemctl status network 有问题需要检查ifcfg-ens33

配置主机名

1
2
# 查询当前主机名
hostname

修改主机名

1
2
3
4
5
6
# 到这里修改主机名配置文件
vim /etc/hostname

# 之后重启主机便会更改
# 如果不想重启,可以用下面的命令修改实时生效
hostnamectl set-hostname 新主机名

修改hosts映射文件

1
2
3
4
5
6
# 到这里修改hosts
vim /etc/hosts

# 添加如下
192.168.31.100 linux100
192.168.31.101 linux101

修改windows的hosts文件,到C:\Windows\System32\drivers\etc目录下找到hosts文件

1
2
192.168.31.100 linux100
192.168.31.101 linux101

直接添加到hosts文件中,不需要前面加#

另存到其地方,然后替换掉原文件

之后用cmd ping linux100时,可以直接

1
ping linux100

远程登录

通过ssh进行远程登录

1
2
3
4
5
6
7
8
ssh root@linux100

# 第一次登录会出现如下提示
# The authenticity of host 'linux100(192.168.31.100)' can't be established.
# ECDSA key fingerprint is XXXXXXXXXXXXXXXXXXXXXX
# Are you sure you want to continue connecting (yes/no/[figerprint])?
# 这时打出yes,然后输入密码(输入过程中密码一个字符都不会显示)就能登录进去了
# 之后就相当于进入了Linux的终端界面,操作也一致

其他远程登录工具:Xshell,SSH Secure Shell 等

系统管理

Linux中的进程和服务

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

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

service服务管理

基本语法(CentOS 6 版本)

1
service 服务名 start|stop|restart|status

systemctl(CentOS 7 版本)

基本语法

1
systemctl start|stop|restart|status 服务名

查看服务

/usr/lib/systemd/system

1
2
3
ls /usr/lib/systemd/

ls /usr/lib/systemd/system #查看系统服务

系统运行级别

Linux运行级别(CentOS 6)

image-20220506202301170

运行级别1和6用不了

运行级别1相当于安全模式

运行级别3就是最小Linux完全体启动(无图形化界面)

运行级别5就是图形化Linux启动

CentOS 7 的运行级别简化为

.target:一组服务的集合

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

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

查看当前运行级别

1
systemctl get-default

修改当前运行级别

1
systemctl set-default TARGET.target # 这里TARGET取multi-user或者graphical

图形界面直接切入命令界面

切入

ctrl + alt + f2

1
init 3 # 通过命令行切入,只能通过命令行切回

切回

ctrl + alt + f1

1
init 5

管理服务开机自启

1
2
# 直接输入回车即可
setup

image-20220506201214193

在第一个选项里配置各个服务的开机自启,空格键选中

在命令行中:

1
systemctl list-unit-files

修改:

1
systemctl disable|enable 服务名 # 禁止/启动

关闭防火墙

1
2
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁止开机自启

关机重启

基本语法

  1. sync:将数据由内存同步到硬盘中
  2. halt:停机,关闭系统,但不断电,内存里的数据可能还在
  3. poweriff:关机,断电
  4. reboot:重启,相当于 shutdown -r now

Linux是 预读,延迟写入

具体描述:例如,用vim修改一个文档,:w保存后,并不是立刻将内容写进硬盘中,而是将内容先放到缓冲区,待缓冲区满后,一次性将缓冲区中的内容写入硬盘。

因此,如果在vim 保存文件后,立刻关机,将会导致数据丢失,所以要在关机前进行同步操作,即sync

不过,Linux关机前会自动执行sync操作,所以不必担心。

shutdown关机

1
# shutdown [选项] 时间
选项功能
-H相当于–halt,停机
-r-r=reboot 重启
参数功能
now立刻关机
时间等待多久后关机(单位:分钟),也可使用如15:30定时关机

常用基本命令

帮助命令

man 获得帮助信息

基本语法:

1
man[命令配置文件] # 获得帮助信息

==非常好用!还有中文翻译==

获取内置命令方式

1
2
3
4
5
man -f 内置命令
# 例如
man -f cd
# 三个选项
man 1p cd # 1p是三个选项中的一个

help 获得shell内置命令的帮助信息

一部分基础功能的系统命令是直接内嵌在shell 中的,系统加载启动之后会随着shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in) 命令”;相应的其它命令被称为“外部命令”。

help只能获取内置命令的帮助信息

1
help 命令

可以这样来获取一个命令的类型

1
2
3
4
type 命令
#
type cd
# cd是shell内嵌

其他获取帮助方式

1
命令 --help

优点是有翻译,缺点是翻译的不全

shell常用快捷键

快捷键功能
ctrl+c停止进程
ctrl+l清屏,相当于clear,彻底清屏是reset
tab自动补全
↑ | ↓执行过的命令

文件目录类

  • pwd: 显示当前工作目录的绝对路径
  • ls:列出目录内容
  • cd:切换目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录
  • touch:创建空文件
  • cp:复制文件或目录
  • rm:删除文件或目录
  • mv:移动文件与目录或重命名
  • cat:查看文件内容(看小文件,一般是一页能显示完的)
  • more:文件内容分屏查看器(看一页显示不完的大文件)

其它

echo

1
2
3
4
5
6
# echo [选项] [输出内容]

echo hello word
# hello word
echo "hello word"
# hello word

选项: -e:支持反斜杠控制的字符转换

1
2
3
echo -e "hello\nword"
# hello
# word

> 输出重定向和 >> 追加

1
2
3
4
5
6
ls -l > 文件 # 列表的内容写入文件中(覆盖写)
ls -al >> 文件 # 列表的内容追加到文件的末尾
cat 文件1 > 文件2 # 将文件1的内容覆盖到文件2
echo "内容" >> 文件


监控文件变化

显示文件前十行内容

1
2
head 文件名
head -n 20 文件名 # 查看文件20行内容

显示文件后十行内容

1
2
3
tail 文件
tail -n 5 文件 # 查看文件后5行内容
tail -f 文件 # 实时追踪该文档的所有更新

软链接

又称符号链接,类似于windows的快捷方式,有自己的数据块,主要存放了链接其它文件的路径

基本语法

1
ln -s[源文件或目录][软连接名] # 给源文件创建一个软链接

history

显示历史命令输入

1
history
1
history 10 # 显示最近10条命令
1
history -c # 删除历史记录

时间日期

显示当前时间

1
2
3
4
5
date # 显示当前时间 年 月 日 周 时 分 秒 时区
date +%Y # 显示当前年份
date +%m # 显示当前月份
date +%d # 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒

显示非当前时间

1
2
date -d '1 days ago' # 显示1天前的当前时间
date -d '-1 days ago' # 显示一天后的当前时间

设置系统时间

1
date -s "2027-06-19 20:00:00" # 设置的可是系统时间啊啊啊啊
1
2
# 以硬件时间为基准,修改系统时间
hwclock -s

cal 查看日历

1
2
3
cal
# 它真的打印出了一张本月的日历!!
cal -3 # 打印前一个月,本月,下个月的日历

用户管理命令

需要在root用户下操作

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
26
27
28
29
30
# 添加新用户 可到home文件夹下查看用户
useradd 用户名
# 添加新用户,但自定义用户文件夹名
useradd -d /home/dave david
# 添加新用户,并默认添加到指定组
useradd -g 组名 用户名

# 修改用户密码
passwd 要修改密码的用户名

# 查询是否有该用户
id 用户名

# 列出所有用户
less /etc/pwd # 之后用 G 来跳转到最后查看创建的用户

# 切换用户
su 用户名

# 查看当前用户
whoami # 当前会话使用身份
who am i # 最外层用户

# 删除用户
userdel tony # 删除用户后,home文件夹下仍有改用户的目录
userdel -r tony # 连带着用户目录一起删掉

# 修改用户
usermod -g 用户组 用户名
usermod -g meifa tony

用户权限设置

首先需要修改sudoers文件

1
2
# 修改sudoer文件
vim /etc/sudoers

在下面这个地方添加一个需要授权root权限的用户给

1
2
3
4
5
## Allow root to run any commands anywhere 
root ALL=(ALL) ALL
tony ALL=(ALL) ALL

# 该文件为只读文件,只能通过root用户的:wq!强制修改保存
1
2
3
4
# sudo 设置普通用户具有Root权限
$ sudo 命令操作
#
$ sudo ls

用户组

1
2
3
4
5
6
7
8
9
10
11
12
# 查看所有组
cat /etc/group
# 添加组
groupadd 组名
# 将用户添加到组内
usermod -g 组名 用户名
# 将用户从组内删除
sudo gpasswd -d 用户名 组名
# 修改组名
groupmod -n 新组名 原组名
# 删除组
groupdel 组名

还有一个特殊的组,组名为wheel,该组下的用户同样被授权了root权限,可以使用sudo

文件权限

第一位,表示文件类型

  • - 表示该文件是一个普通文件,可以使用vim直接打开
  • d表示该文件是一个文件夹
  • l:表示是一个链接 link
  • c: 字符类型设备文件(鼠标键盘)
  • b: 块类型设备文件(硬盘)

后面九位,三位划分,三组权限

image-20220515093008368

  1. 第1-3位确定属主(该文件的所有者)拥有该文件的权限。–User
  2. 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,–Group
  3. 第7-9位确定其他用户拥有该文件的权限 –Other

rwx分别表示的含义

  • r read 表示可读,文件夹表示可以查看内容
  • w write 表示可写,但不可删除,文件夹表示可以修改删除添加其中的文件,以及操作该文件夹
  • x execute 表示可以被系统执行,文件夹表示可以进入该目录

修改文件权限

1
chmod [{ugoa}{+-=}{rwx}] 文件或目录

u g o a 分别代表属主权限、属组权限、其他用户权限、所有权限

+ 增加权限 - 删除权限 = 权赋值

1
2
chmod u=rw 文件1 # 给文件1的属主权限设置为rw
chmod g-x 文件1 # 删除文件1的属组执行权限

第二种方法

chmod 421 文件或目录u仅开启r权限,g仅开启w权限,o仅开启x权限

chmod -R 777 目录开启文件夹及文件夹下所有文件的所有权限

rwx=4+2+1=7

  • x=1
  • w=2
  • wx=3
  • r=4
  • rx=5
  • rw=6
  • rwx=7

更改文件所有者

1
chown 选项 最终用户 文件或目录

选项: -R 递归操作

更改文件所属组

1
chgrp 最终用户组 文件或目录

搜索查找

find查找文件或目录

1
find [搜索范围] [选项]
选项功能
-name<查询方式>按照指定的文件名查找模式查找文件
-user<用户名>查找属于指定用户名所有文件
-size<文件大小>按照指定文件大小查找文件,b块(512字节),c字节,w字(2字节),k,M,G
1
2
3
find /home -name "*.txt"
find /test -user tony
find /home -size +204800 #在home目录下查找大于200M的文件(+n大于 -n小于 n等于)

locate快速定位文件路径

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

查询文件夹

1
2
3
updatedb
# 查找tmp文件夹
locate tmp

grep过滤查找及”|“管道符

1
grep 选项 查找内容 源文件

选项:-n 显示匹配行以及行号

1
2
# 如,查找test.txt中boot出现的行
grep -n boot test.txt

管道过滤符,将|前的命令得到结果,作为|后命令的参数

1
2
# 查找当前目录下某文件在第几行
ls | grep -n test

压缩解压

gzip

1
2
3
4
# 压缩
gzip 文件 # 只能压缩文件,不能压缩目录,不保留原来文件,多个文件会产生多个压缩包
# 解压
gunzip 文件.gz

zip

1
2
3
4
# 压缩
zip [选项] xxx.zip 将要压缩的内容 # 可压缩目录并保留源文件
# 解压
unzip [选项] xxx.zip
zip选项功能
-r压缩目录
unzip选项功能
-d<目录>指定解压后文件的存放目录
1
2
3
4
5
6
touch bailongma.txt
zip mypackage.zip houge.txt bailongma.txt
# adding: houge.txt (stored 0%)
# adding: bailongma.txt (stored 0%)
ls
# houge.txt bailongma.txt mypackage.zip

tar 打包

打包目录,压缩后的 文件格式.tar.gz

1
tar [选项] XXX.tar.gz 将要打包进去的内容
选项功能
-c产生.tar 打包文件
-v显示详细信息
-f指定压缩后的文件名
-z打包同时压缩
-x解包.tar 文件
-C解压到指定目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#(1) 压缩多个文件
tar -zcvf houma.tar.gz houge.txt bailongma.txt
houge.txt
bailongma.txt
ls
# houma.tar.gz houge.txt bailongma.txt

#(2) 压缩目录
tar -zcvf xiyou.tar.gz xiyou/
xiyou/
xiyou/mingjie/
xiyou/dssz/
xiyou/dssz/houge.txt

# (3) 解压到当前目录
tar -zxvf houma.tar.gz

#(4) 解压到指定目录
tar -zxvf xiyou.tar.gz -C /opt
ll /opt/

磁盘管理

查看文件和目录占用的磁盘空间

1
2
# 查看文件和目录占用的磁盘空间
du [选项] [目录/文件] # du: disk usage
选项功能
-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-a不仅查看子目录大小, 还要包括文件
-c显示所有的文件和子目录大小后, 显示总和
-s只显示总和
–max-depth=n指定统计子目录的深度为第 n 层
1
2
du -sh
# 5.1M .

查看磁盘空间使用情况

1
2
# df: disk free 空余磁盘 列出文件系统的整体磁盘使用量, 检查文件系统的磁盘空间占用情况
df 选项
选项功能
-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示

查看设备挂载情况

1
lsblk
选项功能
-f查看详细的设备挂载情况, 显示文件系统信息

mount/unmount 挂载/卸载

1
2
mount [-t vfstype] [-o options] device dir #(功能描述: 挂载设备)
umount 设备文件名或挂载点 #(功能描述: 卸载设备)
参数功能
-t vfstype指定文件系统的类型, 通常不必指定。 mount 会自动选择正确的类 型。
常用类型有:
光盘或光盘镜像: iso9660
DOS fat16 文件系统: msdos
Windows 9x fat32 文件系统: vfat
Windows NT ntfs 文件系统: ntfs
Mount Windows 文件网络共享: smbfs
UNIX(LINUX) 文件网络共享: nfs
-o options主要用来描述设备或档案的挂接方式。
常用的参数有:
loop: 用来把一个文件当成硬盘分区挂接上系统
ro: 采用只读方式挂接设备 rw: 采用读写方式挂接设备
iocharset: 指定访问文件系统所用字符集
device要挂接(mount)的设备
dir设备在系统上的挂接点(mount point)
1
2
3
4
5
6
mkdir /mnt/cdrom/ #建立挂载点
mount /dev/cdrom /mnt/cdrom/ # 挂载到 挂载点 : /mnt/cdrom 中
ll /mnt/cdrom/

# 卸载光盘镜像文件
umount /mnt/cdrom

设置开机自动挂载

1
vim /etc/fstab

image-20220515114739938

fdisk 分区

1
2
# 查看当前磁盘分区情况
fdisk -l

第一步:添加新硬盘,如果是虚拟机,在虚拟机设置里添加新硬盘即可

添加完后,重启Linux

1
2
lsblk -f # 显示设备挂载情况,这里可以看到,多了一个sdb,但是后面什么都没有
fdisk -l # 查看当前磁盘分区情况,里面只有sda的信息,也就是第一块硬盘的分区信息

第二步:硬盘分区

1
2
3
4
5
6
7
8
9
10
11
fdisk /dev/sdb # 分区命令,对设备sdb进行分区
# 1.按 m 获取帮助
# 2.按n: 添加一个新分区
# 3.按p,添加一个主分区,主分区最多4个,扩展分区12个
# 4.之后分区号默认
# 5.起始扇区默认
# 6.终止分区自己算一下
# 7.到这里分区便结束了,如果需要添加更多分区,重复2-6

# q: 不保存退出
# w: 保存分区信息并退出

分区后,我们目前还无法使用该分区,因为我们并未指定分区的文件系统类型

1
2
lsblk -f
# 可以看到sdb1后面的FSTYPE LABEL UUID什么的都没有

第三步,设置文件系统类型

1
mkfs -t xfs /dev/sdb1 # make file system, -t:指定格式,xfs 文件系统类型, /dev/sdb1 要格式化的分区

第四步,添加挂载点

1
mount /dev/sdb1 /home/tony # 将新分区挂载到/home/tony下,该目录下的文件物理地址均在新硬盘中

第五步,实现开机自动挂载

1
2
3
vim /etc/fstab

# 在最后面添加一行,分别为 分区地址 挂载地址 分区格式 default 0 0

image-20221109145830578

磁盘限额

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 开启磁盘空间限制
quotaon
# 执行quotaon指令可开启用户和群组的空间限制,各分区的文件系统根目录必须有quota.user和quota.group配置文件。
# 格式: quotaon [-aguv][文件系统..]
# -a 开启在/ect/fstab文件里,有加入quota设置的分区的空间限制。
# -g 开启群组的磁盘空间限制。
# -u 开启用户的磁盘空间限制。
# -v 显示指令指令执行过程。

# 关闭磁盘空间限制
quotaoff
#执行quotaoff指令可关闭用户和群组的磁盘空间限制
#格式: quotaoff [-aguv][文件系统..]
# -a 关闭在/etc/fstab文件里,有加入quota设置的分区的空间限制
# -g 关闭群组的磁盘空间限制。
# -u 关闭用户的磁盘空间限制。
# -v 显示指令执行过程
1
2
3
4
5
6
7
# 自检测并创建用户(组)磁盘配额文件
$ quotacheck
# -a 扫描/etc/mtab 文件中所有挂载的文件系统
# -c 忽略现有的配置文件
# -u 计算每个用户占用的空间,创建quota.user
# -g 计算每个用户组占用的空间,创建quota.group
# -v 互动模式
1
2
3
4
5
6
# 编辑用户或群组的磁盘配额
edquota [-p <源用户名>][-ug][用户或群组名称...]
# -u 设置用户的磁盘配额,这是预设参数
# -g 设置群组的磁盘配额
# -p <源用户名称> 将源用户的磁盘配额设置套用至其他用户或群组
# -t 设置宽限期限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 先挂载分区
# 临时挂载
mount -o remount,usrquota /web
# 启动自动挂载,修改/etc/fstab
/dev/sdb1 /web ext3 defaults,usrquota 0 0
# 创建配额文件
quotacheck -cvua
# 开启磁盘配额功能
quotaon /web
# 为用户进行限制
edquota 用户名
# blocks - 限制空间大小
# inodes - 限制文件数目
# soft 不出错,但提醒超出
# hard - 硬限制,不可超出

image-20221109161011262修改用户的硬盘限额为100M

进程管理

查看当前系统进程

ps : process status 进程状态

1
2
3
ps # 查看当前系统进程
ps aux | grep XXX # 查看系统中的所有进程
ps -ef | grep XXX # 查看子父进程之间的关系
选项功能
a列出带有终端的所有用户的进程
x列出当前用户的所有进程, 包括没有终端的进程
u面向用户友好的显示风格
-e列出所有进程
-u列出某个用户关联的所有进程
-f显示完整格式的进程列表

ps aux 显示信息说明
USER: 该进程是由哪个用户产生的
PID: 进程的 ID 号
%CPU: 该进程占用 CPU 资源的百分比, 占用越高, 进程越耗费资源;
%MEM: 该进程占用物理内存的百分比, 占用越高, 进程越耗费资源;
VSZ: 该进程占用虚拟内存的大小, 单位 KB;
RSS: 该进程占用实际物理内存的大小, 单位 KB;
TTY: 该进程是在哪个终端中运行的。 对于 CentOS 来说, tty1 是图形化终端,
tty2-tty6 是本地的字符界面终端。 pts/0-255 代表虚拟终端。
STAT: 进程状态。 常见的状态有: R: 运行状态、 S: 睡眠状态、 T: 暂停状态、
Z: 僵尸状态、 s: 包含子进程、 l: 多线程、 +: 前台显示
START: 该进程的启动时间 TIME: 该进程占用 CPU 的运算时间, 注意不是系统时间
COMMAND: 产生此进程的命令名

ps -ef 显示信息说明
UID: 用户 ID
PID: 进程 ID
PPID: 父进程 ID
C: CPU 用于计算执行优先级的因子。 数值越大, 表明进程是 CPU 密集型运算,
执行优先级会降低; 数值越小, 表明进程是 I/O 密集型运算, 执行优先级会提高
STIME: 进程启动的时间
TTY: 完整的终端名称
TIME: CPU 时间
CMD: 启动进程所用的命令和参数

pstree 查看进程树

1
pstree [选项]
选项功能
-p显示进程的 PID
-u显示进程的所属用户

终止进程

1
2
kill [选项]进程号 # 通过进程号杀死进程
killall 进程名称 # 通过进程名称杀死进程,也支持通配符
选项功能
-9表示强迫进程立即停止

top实时监控系统进程状态

1
top [选项]
选项功能
-d 秒数指定 top 命令每隔几秒更新。 默认是 3 秒在 top 命令的交互模式当 中可以执行的命令
-i使 top 不显示任何闲置或者僵死进程。
-p通过指定监控进程 ID 来仅仅监控某个进程的状态。

操作说明

操作功能
P以 CPU 使用率排序, 默认就是此项
M以内存的使用率排序
N以 PID 排序
q退出 top

netstat 显示网络状态和端口占用信息

1
2
netstat -anp | grep 进程号 #(功能描述: 查看该进程网络信息)
netstat –nlp | grep 端口号 #(功能描述: 查看网络端口号占用情况)
选项功能
-a显示所有正在监听(listen) 和未监听的套接字(socket)
-n拒绝显示别名, 能显示数字的全部转化成数字
-l仅列出在监听的服务状态
-p表示显示哪个进程在调用

系统定时任务

1
2
# 重启 crond 服务
systemctrl restart crond
1
crontab[选项]
选项功能
-e编辑 crontab 定时任务
-l查询 crontab 任务
-r删除当前用户所有的 crontab 任务
1
crontab -e

(1) 进入 crontab 编辑界面。 会打开 vim 编辑你的工作。
* * * * * 执行的任务

项目含义范围
第一个“*”一小时当中的第几分钟0-59
第二个“*”一天当中的第几小时0-23
第三个“*”一个月当中的第几天1-31
第四个“*”一年当中的第几月1-12
第五个“*”一周当中的星期几0-7 ( 0 和 7 都 代 表 星 期 日)

(2) 特殊符号

特殊符号含义
*代表任何时间。 比如第一个“ *” 就代表一小时中每分钟 都执行一次的意思。
代表不连续的时间。 比如“ 0 8,12,16 * * * 命令”, 就代表 在每天的 8 点 0 分, 12 点 0 分, 16 点 0 分都执行一次命令
-代表连续的时间范围。 比如“0 5 * * 1-6 命令”, 代表在 周一到周六的凌晨 5 点 0 分执行命令
*/n代表每隔多久执行一次。 比如“*/10 * * * * 命令”, 代 表每隔 10 分钟就执行一遍命令

(3) 特定时间执行命令
表 7-44

时间含义
45 22 * * * 命令每天 22 点 45 分执行命令
0 17 * * 1 命令每周 1 的 17 点 0 分执行命令
0 5 1,15 * * 命令每月 1 号和 15 号的凌晨 5 点 0 分执行命令
40 4 * * 1-5 命令每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 * * * 命令每天的凌晨 4 点, 每隔 10 分钟执行一次命令
0 0 1,15 * 1 命令每月 1 号和 15 号, 每周 1 的 0 点 0 分都会执行命令。 注 意: 星期几和几号最好不要同时出现, 因为他们定义的都 是天。 非常容易让管理员混乱

(1) 每隔 1 分钟, 向/root/hello.txt 文件中添加一个 hello,word

1
*/1 * * * * echo "hello,word" >> /root/hello.txt  

软件包管理

RPM

RedHat Package Manager

RPM包的名称格式为

Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
- “1.3.23-11”软件的版本号, 主版本和此版本
- “i386”是软件所运行的硬件平台, Intel 32位处理器的统称
- “rpm”文件扩展名, 代表RPM包

1
2
3
4
# 查询所安装的所有rmp软件包
rpm -qa
# 因为太多,一般需要用管道过滤
rpm -qa | grep firefox # 火狐安装包

卸载

1
2
3
4
5
# 卸载命令
rmp -e RPM软件包
rpm -e --nodeps 软件包
# 如:卸载Firefox
rpm -e firefox
选项功能
-e卸载软件包
–nodeps卸载软件时, 不检查依赖。 这样的话, 那些使用该软件包的软件在此之后可能就不能正常工作了。

安装

1
rpm -ivh RPM 包全名
选项功能
-iinstall, 安装
-v–verbose, 显示详细信息
-h–hash, 进度条
–nodeps安装前不检查依赖
1
2
3
4
# 安装firefox软件
pwd
# /run/media/root/CentOS 7 x86_64/Packages
rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm

YUM

Yellow dog Updater, Modified

基于 RPM 包管理, 能够从指定的服务器自动下载 RPM 包并且安装, 可以自动处理依赖性关系, 并且一次安装所有依赖的软件包, 无须繁琐地一次次下载、 安装

1
yum [选项] [参数]
选项功能
-y对所有提问都回答“yes”
参数功能
install安装 rpm 软件包
update更新 rpm 软件包
check-update检查是否有可用的更新 rpm 软件包
remove删除指定的 rpm 软件包
list显示软件包信息
clean清理 yum 过期的缓存
deplist显示 yum 软件包的所有依赖关系

采用 yum 方式安装 firefox

1
yum -y install firefox

修改YUM源

YUM 源会自动根据当前地区选择最快的镜像站,一般无需更改,如果非要更改,可参考以下内容

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
26
27
# 1) 安装 wget, wget 用来从指定的 URL 下载文件
yum install wget

# 2) 在/etc/yum.repos.d/目录下, 备份默认的 repos 文件
pwd
#/etc/yum.repos.d
cp CentOS-Base.repo CentOS-Base
#.repo.backup

#3) 下载网易 163 或者是 aliyun 的 repos 文件,任选其一
wget
http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云
wget
http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易 163

# 4) 使用下载好的 repos 文件替换默认的 repos 文件
# 例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
mv CentOS7-Base-163.repo CentOS-Base.repo

# 5) 清理旧缓存数据, 缓存新数据
yum clean all
yum makecache
# yum makecache 就是把服务器的包信息下载到本地电脑缓存起来

# 6) 测试
yum list | grep firefox
yum -y install firefox

使用gcc编译

使用一个经典的hello world来说明如何使用gcc进行编译:

编辑c源文件

使用vim编辑hello.c:

img

细心的小伙伴会发现,在windows下main函数里都是int main(void),然而这里却变成了int main(int argc, char *argv[]),首先根据C语言的语法,括号里的是main函数的参数,但因为windows下是使用图形化界面的,所以main函数一般是void,表示参数为空,但是Linux下都是使用命令行的,在执行可执行程序的时候可以给main函数传入参数,所以为了接收参数,写为这样的形式。

  • 第一个参数argc表示传入main函数的参数,这个值往往是不确定的,所以这个值在执行的时候不需要用户指定,由系统自动给定;
  • 第二个参数argv是一个字符串指针,是实际用户传入的参数。

特别注意的是:文件名本身也是一个参数!!!

预处理

使用gcc -E 源文件对源文件进行预处理,-E参数表示gcc在预处理之后停止编译,为了方便查看预处理的文件,使用-o 生成的文件名指明生成的文件名,所以使用命令:gcc -E hello.c -o hello.i

img执行指令后可以看到hello.c源文件进行了预处理,查看hello.i,第一行#include <stdio.h>被替换为stdio.h文件中的内容,其它内容没有变,也没有生成别的文件。

编译预处理的文件,生成汇编文件

使用gcc -S 预处理后的文件对预处理后的文件进行编译,并生成汇编文件hello.s-S参数表示只进行编译而不进行汇编,只生成汇编文件,所以使用命令:gcc -S hello.i -o hello.s

img

汇编生成的汇编文件,生成目标文件

使用参数-c将汇编代码进行汇编编译,生成二进制目标文件,使用命令gcc -c hello.s -o hello.o

img

链接所有的文件及库文件,生成可执行程序

注意上一步中生成的二进制目标文件只是单个源文件对应的目标文件,不是可执行程序,这个文件中还使用了标准库stdio,所以还需要将库依赖文件进行链接,生成可执行程序(默认文件名a.out),使用命令gcc hello.o -o hello

img

执行可执行程序(注意main参数)

因为之前编写程序的时候我们是将 main函数传入的第一个字符串参数打印,所以在执行的时候要传入参数,使用命令./hello hello,world

img

来简单总结一下上面的这些步骤及gcc参数的含义:

参数描述
-E对源文件进行预处理
-S对预处理文件生成汇编文件
-c对汇编文件进行汇编编译,生成目标文件
-o指定输出文件名
  • 标题: Linux笔记
  • 作者: 日之朝矣
  • 创建于 : 2023-01-02 20:35:15
  • 更新于 : 2023-10-10 08:35:51
  • 链接: https://rzzy.fun/2023/01/02/linux-notes/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
Linux笔记