Linux笔记
Linux文件系统
一切皆文件
就连硬件设备也是作为文件出现
Linux目录结构
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 | 启动vim编辑器打开文件 |
vim编辑器模式
通过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 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
DHCP: 动态主机控制协议
之后重启网络服务
1 | service network restart |
修改ip地址后可能会遇到的问题
物理机能ping通虚拟机,但是虚拟机ping不通物理机,一般 都是因为物理机的防火墙问题,把防火墙关闭就行
虚拟机能Ping通物理机,但是虚拟机Ping不通外网,一般都是因为DNS的设置有问题
虚拟机Ping www. baidu. com 显示域名未知等信息,一般查看GATEWAY和DNS设置是否正确
如果以上全部设置完还是不行,需要关闭network服务
➢systemctl stop network 关闭
➢systemctl disable network 禁用
关闭后执行
systemctl restart NetworkManager
网络便会重新连接如果检查发现systemctl status network 有问题需要检查ifcfg-ens33
配置主机名
1 | 查询当前主机名 |
修改主机名
1 | 到这里修改主机名配置文件 |
修改hosts映射文件
1 | 到这里修改hosts |
修改windows的hosts文件,到C:\Windows\System32\drivers\etc
目录下找到hosts文件
将
1 | 192.168.31.100 linux100 |
直接添加到hosts文件中,不需要前面加#
另存到其地方,然后替换掉原文件
之后用cmd ping linux100时,可以直接
1 | ping linux100 |
远程登录
通过ssh进行远程登录
1 | ssh root@linux100 |
其他远程登录工具: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 | ls /usr/lib/systemd/ |
系统运行级别
Linux运行级别(CentOS 6)
运行级别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 | 直接输入回车即可 |
在第一个选项里配置各个服务的开机自启,空格键选中
在命令行中:
1 | systemctl list-unit-files |
修改:
1 | systemctl disable|enable 服务名 # 禁止/启动 |
关闭防火墙
1 | systemctl stop firewalld # 关闭防火墙 |
关机重启
基本语法
sync
:将数据由内存同步到硬盘中halt
:停机,关闭系统,但不断电,内存里的数据可能还在poweriff
:关机,断电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 | man -f 内置命令 |
help 获得shell内置命令的帮助信息
一部分基础功能的系统命令是直接内嵌在shell 中的,系统加载启动之后会随着shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in) 命令”;相应的其它命令被称为“外部命令”。
help只能获取内置命令的帮助信息
1 | help 命令 |
可以这样来获取一个命令的类型
1 | type 命令 |
其他获取帮助方式
1 | 命令 --help |
优点是有翻译,缺点是翻译的不全
shell常用快捷键
快捷键 | 功能 |
---|---|
ctrl+c | 停止进程 |
ctrl+l | 清屏,相当于clear,彻底清屏是reset |
tab | 自动补全 |
↑ | ↓ | 执行过的命令 |
文件目录类
pwd
: 显示当前工作目录的绝对路径ls
:列出目录内容cd
:切换目录mkdir
:创建一个新的目录rmdir
:删除一个空的目录touch
:创建空文件cp
:复制文件或目录rm
:删除文件或目录mv
:移动文件与目录或重命名cat
:查看文件内容(看小文件,一般是一页能显示完的)more
:文件内容分屏查看器(看一页显示不完的大文件)
其它
echo
1 | echo [选项] [输出内容] |
选项: -e
:支持反斜杠控制的字符转换
1 | echo -e "hello\nword" |
> 输出重定向和 >> 追加
1 | ls -l > 文件 # 列表的内容写入文件中(覆盖写) |
监控文件变化
显示文件前十行内容
1 | head 文件名 |
显示文件后十行内容
1 | tail 文件 |
软链接
又称符号链接,类似于windows的快捷方式,有自己的数据块,主要存放了链接其它文件的路径
基本语法
1 | ln -s[源文件或目录][软连接名] # 给源文件创建一个软链接 |
history
显示历史命令输入
1 | history |
1 | history 10 # 显示最近10条命令 |
1 | history -c # 删除历史记录 |
时间日期
显示当前时间
1 | date # 显示当前时间 年 月 日 周 时 分 秒 时区 |
显示非当前时间
1 | date -d '1 days ago' # 显示1天前的当前时间 |
设置系统时间
1 | date -s "2027-06-19 20:00:00" # 设置的可是系统时间啊啊啊啊 |
1 | 以硬件时间为基准,修改系统时间 |
cal 查看日历
1 | cal |
用户管理命令
需要在root用户下操作
1 | 添加新用户 可到home文件夹下查看用户 |
用户权限设置
首先需要修改sudoers文件
1 | 修改sudoer文件 |
在下面这个地方添加一个需要授权root权限的用户给
1 | # Allow root to run any commands anywhere |
1 | sudo 设置普通用户具有Root权限 |
用户组
1 | 查看所有组 |
还有一个特殊的组,组名为wheel
,该组下的用户同样被授权了root权限,可以使用sudo
文件权限
第一位,表示文件类型
-
表示该文件是一个普通文件,可以使用vim直接打开d
表示该文件是一个文件夹l
:表示是一个链接 linkc
: 字符类型设备文件(鼠标键盘)b
: 块类型设备文件(硬盘)
后面九位,三位划分,三组权限
- 第1-3位确定属主(该文件的所有者)拥有该文件的权限。–User
- 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,–Group
- 第7-9位确定其他用户拥有该文件的权限 –Other
rwx分别表示的含义
r
read 表示可读,文件夹表示可以查看内容w
write 表示可写,但不可删除,文件夹表示可以修改删除添加其中的文件,以及操作该文件夹x
execute 表示可以被系统执行,文件夹表示可以进入该目录
修改文件权限
1 | chmod [{ugoa}{+-=}{rwx}] 文件或目录 |
u g o a 分别代表属主权限、属组权限、其他用户权限、所有权限
+ 增加权限 - 删除权限 = 权赋值
1 | chmod u=rw 文件1 # 给文件1的属主权限设置为rw |
第二种方法
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 | find /home -name "*.txt" |
locate快速定位文件路径
由于 locate 指令基于数据库进行查询, 所以第一次运行前, 必须使用 updatedb 指令创建 locate 数据库。
查询文件夹
1 | updatedb |
grep过滤查找及”|“管道符
1 | grep 选项 查找内容 源文件 |
选项:-n 显示匹配行以及行号
1 | 如,查找test.txt中boot出现的行 |
管道过滤符,将|
前的命令得到结果,作为|
后命令的参数
1 | 查找当前目录下某文件在第几行 |
压缩解压
gzip
1 | 压缩 |
zip
1 | 压缩 |
zip选项 | 功能 |
---|---|
-r | 压缩目录 |
unzip选项 | 功能 |
---|---|
-d<目录> | 指定解压后文件的存放目录 |
1 | touch bailongma.txt |
tar 打包
打包目录,压缩后的 文件格式.tar.gz
1 | tar [选项] XXX.tar.gz 将要打包进去的内容 |
选项 | 功能 |
---|---|
-c | 产生.tar 打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar 文件 |
-C | 解压到指定目录 |
1 | (1) 压缩多个文件 |
磁盘管理
查看文件和目录占用的磁盘空间
1 | 查看文件和目录占用的磁盘空间 |
选项 | 功能 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
-a | 不仅查看子目录大小, 还要包括文件 |
-c | 显示所有的文件和子目录大小后, 显示总和 |
-s | 只显示总和 |
–max-depth=n | 指定统计子目录的深度为第 n 层 |
1 | du -sh |
查看磁盘空间使用情况
1 | df: disk free 空余磁盘 列出文件系统的整体磁盘使用量, 检查文件系统的磁盘空间占用情况 |
选项 | 功能 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 |
查看设备挂载情况
1 | lsblk |
选项 | 功能 |
---|---|
-f | 查看详细的设备挂载情况, 显示文件系统信息 |
mount/unmount 挂载/卸载
1 | mount [-t vfstype] [-o options] device dir #(功能描述: 挂载设备) |
参数 | 功能 |
---|---|
-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 | mkdir /mnt/cdrom/ #建立挂载点 |
设置开机自动挂载
1 | vim /etc/fstab |
fdisk 分区
1 | 查看当前磁盘分区情况 |
第一步:添加新硬盘,如果是虚拟机,在虚拟机设置里添加新硬盘即可
添加完后,重启Linux
1 | lsblk -f # 显示设备挂载情况,这里可以看到,多了一个sdb,但是后面什么都没有 |
第二步:硬盘分区
1 | fdisk /dev/sdb # 分区命令,对设备sdb进行分区 |
分区后,我们目前还无法使用该分区,因为我们并未指定分区的文件系统类型
1 | lsblk -f |
第三步,设置文件系统类型
1 | mkfs -t xfs /dev/sdb1 # make file system, -t:指定格式,xfs 文件系统类型, /dev/sdb1 要格式化的分区 |
第四步,添加挂载点
1 | mount /dev/sdb1 /home/tony # 将新分区挂载到/home/tony下,该目录下的文件物理地址均在新硬盘中 |
第五步,实现开机自动挂载
1 | vim /etc/fstab |
磁盘限额
1 | 开启磁盘空间限制 |
1 | 自检测并创建用户(组)磁盘配额文件 |
1 | 编辑用户或群组的磁盘配额 |
1 | 先挂载分区 |
修改用户的硬盘限额为100M
进程管理
查看当前系统进程
ps : process status 进程状态
1 | ps # 查看当前系统进程 |
选项 | 功能 |
---|---|
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 | kill [选项]进程号 # 通过进程号杀死进程 |
选项 | 功能 |
---|---|
-9 | 表示强迫进程立即停止 |
top实时监控系统进程状态
1 | top [选项] |
选项 | 功能 |
---|---|
-d 秒数 | 指定 top 命令每隔几秒更新。 默认是 3 秒在 top 命令的交互模式当 中可以执行的命令 |
-i | 使 top 不显示任何闲置或者僵死进程。 |
-p | 通过指定监控进程 ID 来仅仅监控某个进程的状态。 |
操作说明
操作 | 功能 |
---|---|
P | 以 CPU 使用率排序, 默认就是此项 |
M | 以内存的使用率排序 |
N | 以 PID 排序 |
q | 退出 top |
netstat 显示网络状态和端口占用信息
1 | netstat -anp | grep 进程号 #(功能描述: 查看该进程网络信息) |
选项 | 功能 |
---|---|
-a | 显示所有正在监听(listen) 和未监听的套接字(socket) |
-n | 拒绝显示别名, 能显示数字的全部转化成数字 |
-l | 仅列出在监听的服务状态 |
-p | 表示显示哪个进程在调用 |
系统定时任务
1 | 重启 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 | 查询所安装的所有rmp软件包 |
卸载
1 | 卸载命令 |
选项 | 功能 |
---|---|
-e | 卸载软件包 |
–nodeps | 卸载软件时, 不检查依赖。 这样的话, 那些使用该软件包的软件在此之后可能就不能正常工作了。 |
安装
1 | rpm -ivh RPM 包全名 |
选项 | 功能 |
---|---|
-i | install, 安装 |
-v | –verbose, 显示详细信息 |
-h | –hash, 进度条 |
–nodeps | 安装前不检查依赖 |
1 | 安装firefox软件 |
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 | 1) 安装 wget, wget 用来从指定的 URL 下载文件 |
使用gcc编译
使用一个经典的hello world来说明如何使用gcc进行编译:
编辑c源文件
使用vim编辑hello.c:
细心的小伙伴会发现,在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
:
执行指令后可以看到hello.c
源文件进行了预处理,查看hello.i
,第一行#include <stdio.h>
被替换为stdio.h
文件中的内容,其它内容没有变,也没有生成别的文件。
编译预处理的文件,生成汇编文件
使用gcc -S 预处理后的文件
对预处理后的文件进行编译,并生成汇编文件hello.s
,-S
参数表示只进行编译而不进行汇编,只生成汇编文件,所以使用命令:gcc -S hello.i -o hello.s
汇编生成的汇编文件,生成目标文件
使用参数-c
将汇编代码进行汇编编译,生成二进制目标文件,使用命令gcc -c hello.s -o hello.o
:
链接所有的文件及库文件,生成可执行程序
注意上一步中生成的二进制目标文件只是单个源文件对应的目标文件,不是可执行程序,这个文件中还使用了标准库stdio,所以还需要将库依赖文件进行链接,生成可执行程序(默认文件名a.out),使用命令gcc hello.o -o hello
:
执行可执行程序(注意main参数)
因为之前编写程序的时候我们是将 main函数传入的第一个字符串参数打印,所以在执行的时候要传入参数,使用命令./hello hello,world
:
来简单总结一下上面的这些步骤及gcc参数的含义:
参数 | 描述 |
---|---|
-E | 对源文件进行预处理 |
-S | 对预处理文件生成汇编文件 |
-c | 对汇编文件进行汇编编译,生成目标文件 |
-o | 指定输出文件名 |
- 标题: Linux笔记
- 作者: 日之朝矣
- 创建于 : 2023-01-02 20:35:15
- 更新于 : 2024-08-18 09:25:27
- 链接: https://blog.rzzy.fun/2023/01/02/linux-notes/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。