参考:https://blog.csdn.net/m0_46422300/article/details/104645072
# 一、基础知识
# 1.1 Linux 系统的文件结构
/bin # 二进制文件,系统常规命令 | |
/boot # 系统启动分区,系统启动时读取的文件 | |
/dev # 设备文件 | |
/etc # 大多数配置文件 | |
/home # 普通用户的家目录 | |
/lib # 32 位函数库 | |
/lib64 # 64 位库 | |
/media # 手动临时挂载点 | |
/mnt # 手动临时挂载点 | |
/opt # 第三方软件安装位置 | |
/proc # 进程信息及硬件信息 | |
/root # 临时设备的默认挂载点 | |
/sbin # 系统管理命令 | |
/srv # 数据 | |
/var # 数据 | |
/sys # 内核相关信息 | |
/tmp # 临时文件 | |
/usr # 用户相关设定 |
# 1.2 Linux 系统命令行的含义
示例: ember@ember-Victus-by-HP-Laptop:~$
- ember // 用户名,若为 root,则为超级用户
- @ // 分隔符
- ember-Victus-by-HP-Laptop // 主机名称
- ~ // 当前所在目录,默认用户目录为~,会随着目录切换而变化
- $ // 表示当前用户是普通用户,超级用户为 #,例如:(“root@ember-Victus-by-HP-Laptop:/home/ember#” ,表示使用超级用户访问 /home/ember 文件夹)
使用 sudo su 和 su name 可以切换普通用户和超级用户。同时,exit 命令也可以退出当前用户。
(base) ember@ember-Victus-by-HP-Laptop:~$ sudo su | |
[sudo] ember 的密码: | |
root@ember-Victus-by-HP-Laptop:/home/ember# su ember | |
(base) ember@ember-Victus-by-HP-Laptop:~$ exit | |
exit | |
root@ember-Victus-by-HP-Laptop:/home/ember# su ember |
# 1.3 命令的组成
命令 参数名 参数值 |
# 二、目录操作
# 2.1 切换目录(cd)
cd / //切换到根目录 | |
cd /bin //切换到根目录下的bin目录 | |
cd ../ //切换到上一级目录 或者使用命令:cd .. | |
cd ~ //切换到home目录 | |
cd - //切换到上次访问的目录 | |
cd xx(文件夹名) //切换到本目录下的名为xx的文件目录,如果目录不存在报错 | |
cd /xxx/xx/x //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全 |
# 2.2 查看目录(ls)
ls //查看当前目录下的所有目录和文件 | |
ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件) | |
ls -l //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样 | |
ls /bin //查看指定目录下的所有目录和文件 |
# 2.3 创建目录(mkdir)
mkdir tools //在当前目录下创建一个名为tools的目录 | |
mkdir /bin/tools //在指定目录下创建一个名为tools的目录 |
# 2.4 删除目录与文件
rm 文件名 //删除当前目录下的文件 | |
rm -f 文件名 //删除当前目录的的文件(不询问) | |
rm -r 文件夹名 //递归删除当前目录下的目录 | |
rm -rf 文件夹名 //递归删除当前目录下的目录(不询问) | |
rm -rf * //将当前目录下的所有目录和文件全部删除 |
# 2.5 移动目录(mv)
mv 当前目录名 新目录名 //修改目录名,同样适用于文件操作 | |
mv /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录剪切到 /opt目录下面 | |
mv -r /usr/tmp/tool /opt //递归剪切目录中所有文件和文件夹 |
# 2.6 拷贝目录(cp)
cp /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录复制到 /opt目录下面 | |
cp -r /usr/tmp/tool /opt //递归剪复制目录中所有文件和文件夹 |
# 2.7 搜索目录(find)
find /bin -name 'a*' //查找/bin目录下的所有以a开头的文件或者目录 |
# 2.8 查看当前目录的绝对路径(pwd)
pwd //显示当前位置路径 |
# 三、文件操作
# 3.1 新增文件(touch)
touch a.txt //在当前目录下创建名为a的txt文件(文件不存在),如果文件存在,将文件时间属性修改为当前系统时间 |
# 3.2 删除文件
rm 文件名 //删除当前目录下的文件 | |
rm -f 文件名 //删除当前目录的的文件(不询问) |
# 3.3 编辑文件(vi, vim)
vi 文件名 //打开需要编辑的文件 | |
--进入后,操作界面有三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode) | |
命令模式 | |
-刚进入文件就是命令模式,通过方向键控制光标位置, | |
-使用命令"dd"删除当前整行 | |
-使用命令"/字段"进行查找 | |
-按"i"在光标所在字符前开始插入 | |
-按"a"在光标所在字符后开始插入 | |
-按"o"在光标所在行的下面另起一新行插入 | |
-按":"进入底行模式 | |
插入模式 | |
-此时可以对文件内容进行编辑,左下角会显示 "-- 插入 --"" | |
-按"ESC"进入底行模式 | |
底行模式 | |
-退出编辑: :q | |
-强制退出: :q! | |
-保存并退出: :wq | |
## 操作步骤示例 ## | |
1.保存文件:按"ESC" -> 输入":" -> 输入"wq",回车 //保存并退出编辑 | |
2.取消操作:按"ESC" -> 输入":" -> 输入"q!",回车 //撤销本次修改并退出编辑 | |
## 补充 ## | |
vim +10 filename.txt //打开文件并跳到第10行 | |
vim -R /etc/passwd //以只读模式打开文件 |
# 3.4 查看文件内容(cat)
cat a.txt //查看文件最后一屏内容 | |
less a.txt //PgUp向上翻页,PgDn向下翻页,"q"退出查看 | |
more a.txt //显示百分比,回车查看下一行,空格查看下一页,"q"退出查看 | |
tail -100 a.txt //查看文件的后100行,"Ctrl+C"退出查看 |
# 四、用户(文件)权限
chmod +x a.txt //普通授权 | |
chmod 777 a.txt //8421法,1+2+4=7,"7"说明授予所有权限 |
说明:sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。需要输入自己账户密码。 | |
使用权限:在 /etc/sudoers 中有出现的使用者 | |
sudo -l //列出目前的权限 | |
$ sudo -u yao vi ~www/index.html //以 yao 用户身份编辑 home 目录下www目录中的 index.html 文件 |
# 五、打包与解压
# 5.1 基础知识
- 打包:将多个文件合并成一个文件,大小不变(如 .tar)。
- 压缩:将文件体积缩小,通常用于单个文件或打包文件(如 .gz、.bz2)。
- 打包和压缩常常结合使用,先打包再压缩,得到像 .tar.gz、.tar.bz2 这样的文件。
- Linux 中的很多压缩程序只能针对一个文件进行压缩。
.zip、.rar //windows系统中压缩文件的扩展名 | |
.tar //Linux中打包文件的扩展名 | |
.gz //Linux中压缩文件的扩展名 | |
.tar.gz //Linux中打包并压缩文件的扩展名 |
为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。
gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 - z 这个参数来调用 gzip。
# 5.2 打包文件
(1).tar:只打包,不压缩文件。 | |
tar xvf Name.tar //解包 | |
tar cvf Name.tar dirName //打包 | |
tar -rf Name.tar filename //将文件filename添加到打包文件Name.tar中 | |
(2).gz:只压缩,不打包文件 | |
gunzip Name.gz //解压(1) | |
gzip -d Name.gz //解压(2) | |
gzip Name //压缩 | |
(3).tar.gz:打包压缩文件 | |
tar zxvf Name.tar.gz //解压,解包 | |
tar zcvf Name.tar.gz dirName //打包,压缩 |
# 六、安装包管理工具
常见的软件封包类型:
封包类型 | 说明 |
---|---|
rpm 软件包 | 扩展名以 .rpm 结尾,使用户 redhat 系列 |
deb 软件包 | 扩展名以 .deb 结尾,适用于 Debian 系列 |
源代码软件包 | 以 .tar.gz / .tar.bz2 格式结尾的压缩包提供包含程序的原始代码文件 |
# 6.1 RPM 系列工具
RPM (Red Hat Package Manager) 系列工具主要用于 Red Hat 系统及其衍生版(如 CentOS、Fedora 等)。常见工具包括 yum 和 rpm。
RPM 系列包管理工具在大多数 Linux 发行版中都可以使用,包括但不限于 Red Hat, CentOS, Fedora 等。如果在某些 Linux 发行版中无法使用,需要通过相应的包管理工具进行安装。
# yum (Yellow dog Update Modifier)
yum 是基于 RPM 的软件包管理器,能够自动处理依赖关系,并从网络仓库下载和安装所需的软件包。它用于简化软件安装、更新和删除的过程。
# 安装 yum | |
apt-get install build-essential # 首先安装 build-essential 包 | |
sudo apt-get update # 更新软件包列表 | |
sudo apt-get install yum # 安装 yum |
yum check-update //列出所有可更新的软件清单命令 | |
yum update //更新所有软件命令 | |
yum install <package_name> //安装指定的软件命令 | |
yum update <package_name> //更新指定的软件命令 | |
yum list //列出所有可安裝的软件清单命令 | |
yum remove <package_name> //删除软件包命令 | |
yum search <keyword> //查找软件包命令 | |
yum clean packages: //清除缓存目录下的软件包 | |
yum clean headers: //清除缓存目录下的 headers | |
yum clean oldheaders: //清除缓存目录下旧的 headers |
# rpm (Redhat package manager)
rpm 是一个底层的包管理工具,主要用于直接处理 rpm 格式的软件包。它不会处理依赖关系,通常在特殊场景下使用(如离线安装软件)。
sudo apt-get install rpm # 安装 rpm |
rpm -ivh package_name.rpm # 安装一个包 | |
rpm -Uvh package_name.rpm # 升级一个包 | |
rpm -rpm -e package_name # 卸载一个包 | |
rpm -q package_name # 查询一个包是否已安装 | |
rpm -qa # 查询所有已安装的包 |
# yum 和 rpm 的区别
yum 和 rpm 都是 Linux 中用于软件包管理的工具,但它们的功能和使用场景有所不同。以下是它们的联系和区别:
(1)联系
-
包管理系统:两者都与 RPM(Red Hat Package Manager)包管理系统相关,主要用于 Red Hat 及其衍生的 Linux 发行版(如 CentOS、Fedora 等)。
-
软件包格式:yum 和 rpm 都使用 RPM 格式的软件包(.rpm 文件)。
-
共同目的:它们的主要目的是管理软件包的安装、更新和删除。
(2)区别
-
rpm:是底层的包管理工具,直接用于安装、卸载和查询 RPM 包。它不处理软件包的依赖关系,因此用户需要手动解决任何依赖问题。
-
yum:是一个高级的包管理器,基于 rpm,可以自动处理软件包的依赖关系。yum 可以从配置的远程仓库下载软件包,并自动安装所需的依赖项,是日常使用中更常用的工具。
(3)总结
- rpm 是底层工具,用于直接处理 RPM 包,适合手动管理。
- yum 是高级工具,能自动处理依赖关系,提供更简洁的包管理体验,适合日常使用。
# 6.2 DEB 系列工具
DEB 系列工具是基于 Debian 包管理系统的,主要用于 Debian 及其衍生版(如 Ubuntu、Mint 等)。常见工具包括 apt, apt-get, dpkg 等。
# apt-get
apt-get 是 apt 的前身,是基于 Debian 的包管理工具,功能和 apt 类似,但不如 apt 用户友好。它提供更多的高级选项,适合脚本自动化使用。
sudo apt-get update # 更新软件源列表 | |
sudo apt-cache search <keyword> # 搜索软件包 | |
sudo apt-file search <keyword> # 搜索软件包 | |
sudo apt-get install <package> # 安装软件包 | |
sudo apt-get remove <package> # 删除软件包(保留配置文件) | |
sudo apt-get remove --purge <package> # 删除软件包(删除配置文件) | |
sudo apt-get autoremove <package> # 自动删除依赖关系 | |
sudo apt-get autoremove --purge <package> # 自动删除依赖关系并删除配置文件 | |
sudo apt-get clean # 清理缓存 | |
sudo apt-get autoclean # 自动清理缓存 |
# apt (Advanced Package Tool)
apt 是 Ubuntu 和其他基于 Debian 系统中常用的包管理器,简化了软件包的安装、更新和删除过程,并处理依赖关系。相较于 apt-get,apt 提供了更好的用户界面和更多易用的功能。
sudo apt update #列出所有可更新的软件清单命令: | |
sudo apt upgrade #升级软件包: | |
apt list --upgradable #列出可更新的软件包及版本信息: | |
sudo apt full-upgrade #升级软件包,升级前先删除需要更新软件包: | |
sudo apt install <package_name> #安装指定的软件命令: | |
sudo apt install <package_1> <package_2> <package_3> #安装多个软件包: | |
sudo apt update <package_name> #更新指定的软件命令: | |
sudo apt show <package_name> #显示软件包具体信息,例如:版本号,安装大小,依赖关系等等: | |
sudo apt remove <package_name> #删除软件包命令: | |
sudo apt autoremove #清理不再使用的依赖和库文件: | |
sudo apt purge <package_name> #移除软件包及配置文件: | |
sudo apt search <keyword> #查找软件包命令 | |
apt list --installed #列出所有已安装的包: | |
apt list --all-versions #列出所有已安装的包的版本信息: |
# dpkg (Debian Package Manager)
dpkg 是 Ubuntu 和其他基于 Debian 系统的底层包管理工具,可以直接处理 .deb 软件包。类似于 rpm,dpkg 不会自动处理依赖关系。
sudo dpkg -i package_name.deb #安装一个.deb 文件 | |
sudo dpkg -r package_name #卸载一个软件包 | |
sudo dpkg -P package_name #完全删除一个软件包 | |
dpkg -l #列出已安装的包 | |
dpkg -L package_name #列出一个包提供的文件 | |
dpkg -S file_name #查找一个文件属于哪个包 |
# apt-get, apt, dpkg 的联系与区别
apt-get、apt 和 dpkg 是 Ubuntu 和其他 Debian 系统中用于软件包管理的工具,它们之间有着密切的联系,同时也有一些关键的区别。
(1)联系
-
包管理体系:它们都属于 Debian 包管理系统,用于处理 .deb 格式的软件包。
-
功能互补:这三者的功能可以相互补充,通常可以结合使用。例如,你可以使用 dpkg 安装一个下载的 .deb 包,然后使用 apt 或 apt-get 来解决任何依赖关系。
-
依赖关系:apt 和 apt-get 可以自动处理软件包的依赖关系,而 dpkg 则不具备这个能力。
(2)区别
-
apt-get:是一个较旧的工具,主要用于软件包的安装、更新和删除,提供更细致的控制和高级选项,适合脚本和自动化任务。
-
apt:是较新的命令行工具,提供了更友好的用户界面和输出格式,旨在简化常用的包管理操作。它集成了 apt-get 和 apt-cache 的功能,因此在许多情况下可以替代这两个工具。
-
dpkg:是底层的包管理工具,用于直接安装、删除和管理 .deb 包。它不处理依赖关系,需要手动解决。
(3)总结
- apt 是最推荐的日常使用工具,提供了用户友好的界面。
- apt-get 适合需要更多控制的场景,如自动化脚本。
- dpkg 是底层工具,用于直接管理 .deb 包,不处理依赖关系。
# 6.3 通用工具
wget:虽然不是包管理器,但 wget 是一个通用的命令行工具,主要用于从网络上下载文件。在下载软件包、更新文件时,它可以和包管理器一起使用。例如,在没有直接安装源的情况下,你可以用 wget 下载 .deb 或 .rpm 文件,然后再使用相应的包管理器进行安装。
wget <url> # 下载文件 |
# 6.4 在 Ubuntu 中的使用说明
在 Ubuntu 中,主要使用的包管理工具是 apt 和 dpkg:
-
apt:用于处理软件包的安装、更新和删除,一般来说用户主要使用 apt 来管理软件包。例如,安装软件包的基本命令是 sudo apt install <package_name>,更新系统的软件包使用 sudo apt update 和 sudo apt upgrade。
-
dpkg:当你手动下载 .deb 文件时,dpkg 用于安装这些文件。可以用 sudo dpkg -i <package_name>.deb 来安装软件包。如果遇到依赖问题,可以随后运行 sudo apt --fix-broken install 来修复。
总结来说,yum、rpm 是用于 Red Hat 系的包管理工具,而 apt、apt-get、dpkg 是用于 Debian 系的包管理工具。在 Ubuntu 中,常用 apt 来简化软件包管理。
# 八、网络相关
# 8.1 ping 命令
不管在 windows 平台,还是在 linux 平台,ping 都是非常常用的网络命令;ping 命令通过 ICMP(Internet 控制消息协议)工作;ping 可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
当使用 “ping” 命令时,您的设备会向主机设备发送请求并等待建立连接。 ping 命令输出包含有关数据包的信息以及每个数据包到达主机所花费的时间。终端继续打印响应,直到通信中断。
首先,检查 “ping” 命令的基本语法:
ping [options] hostname |
(base) ember@ember-Victus-by-HP-Laptop:/$ ping www.baidu.com | |
PING www.baidu.com(localhost (2409:8c00:6c21:104f:0:ff:b03f:3ae)) 56 data bytes | |
64 字节,来自 localhost (2409:8c00:6c21:104f:0:ff:b03f:3ae): icmp_seq=1 ttl=50 时间=27.6 毫秒 | |
64 字节,来自 localhost (2409:8c00:6c21:104f:0:ff:b03f:3ae): icmp_seq=2 ttl=50 时间=32.8 毫秒 | |
64 字节,来自 localhost (2409:8c00:6c21:104f:0:ff:b03f:3ae): icmp_seq=3 ttl=50 时间=29.4 毫秒 | |
64 字节,来自 localhost (2409:8c00:6c21:104f:0:ff:b03f:3ae): icmp_seq=4 ttl=50 时间=39.1 毫秒 |
上面的输出显示了各种信息:
-
icmp_seq:数据包的序列号。如果是第一个数据包,则 icmp_seq 编号将为 1。
-
ttl:ttl 代表 “Time to Live”,ttl 数字表示数据包在被丢弃之前到达目的地所需的跳数(路由器)。
-
时间:数据包到达目的地然后返回主机设备所需的时间。
要停止 ping 过程,请按 “Ctrl C”,该命令将显示发送 / 接收的数据包数量、丢失的数据包数量和时间。
如果没有收到 ping 回复,则表明您的设备和主机服务器之间没有网络连接。
# 8.2 如何检查本地网络状态
最快的方法是:
ping 0 |
# 九、进程相关
# 9.1 查看进程列表(ps)
ps -ef //查看所有正在运行的进程 |
# 9.2 结束进程(kill)
kill xxx //杀死该进程 | |
kill -9 xxx //强制杀死该进程 |
# 其他常用命令
# find
find . -name "*.c" //将目前目录及其子目录下所有延伸档名是 c 的文件列出来 | |
find . -type f //将目前目录其其下子目录中所有一般文件列出 | |
find . -ctime -20 //将目前目录及其子目录下所有最近 20 天内更新过的文件列出 | |
find /var/log -type f -mtime +7 -ok rm {} \; //查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们 | |
find . -type f -perm 644 -exec ls -l {} \; //查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件 | |
find / -type f -size 0 -exec ls -l {} \; //为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径 |
# whereis
whereis ls //将和ls文件相关的文件都查找出来 |
# which
说明:which指令会在环境变量$PATH设置的目录里查找符合条件的文件。 | |
which bash //查看指令"bash"的绝对路径 |
# grep
grep -i "the" demo_file //在文件中查找字符串(不区分大小写) | |
grep -A 3 -i "example" demo_text //输出成功匹配的行,以及该行之后的三行 | |
grep -r "ramesh" * //在一个文件夹中递归查询包含指定字符串的文件 |