Linux基础学习笔记

基础概述

Linux发行版

Linux发行版:主要分为由商业公司维护的收费版本和开源社区维护的免费版本:

文件与目录结构

Linux中一切皆文件,从根目录开始构成了一棵树,下面介绍了根目录下的文件夹的作用:(目录结构和物理的底层存储没有绝对的关系,是一种逻辑结构。具体的物理存放与挂载位置有关)

  • /bin:bin -> usr/bin。Binary的缩写,目录中存放了系统中经常使用的命令
  • /sbin:sbin -> usr/bin。s指的是Super User,其中存放了系统管理员使用的系统管理程序
  • /home:存放普通用户的家目录
  • /root:该目录为root用户的家目录
  • /lib:lib -> usr/lib。系统开机时所需要的最基本的动态链接共享库,类似于Windows中的dll文件。几乎所有的应用程序都需要用到这些共享库
  • /lost+found:一般情况下是空文件夹。当系统非法关机之后,这里就存放了一些文件
  • /etc:其中存放了所有的系统管理所需要的配置文件和子目录
  • /usr:非常重要的目录,用户的很多应用程序和文件都存放在该目录下。类似Windows中的program files目录
  • /boot:存放了启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /proc:一个虚拟的目录,是系统内存的映射。可以通过直接访问这个目录来获取系统信息
  • /srv:service的缩写,其中存放了一些服务启动之后需要提取的数据
  • /sys:系统文件目录
  • /tmp:存放临时文件
  • /dev:类似于Windows的设备管理器,将所有的硬件以文件的形式存储
  • /media:挂载一些移动媒体
  • /mnt:让用户临时挂载其他的文件系统
  • /opt:给主机额外安装软件所存放的目录。用户额外安装的软件一般建议存放在该目录下
  • /var:该目录中存放不断扩充的东西,一般将经常被修改的目录放在该目录下,如各种日志文件等

Vi/Vim编辑器

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

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

Vim编辑器主要分为三种模式,一般模式,编辑模式以及命令模式。

一般模式

使用Vim打开文件则进入一般模式,这是默认的模式。在一般模式中,通常完成的是内容的删除、复制、粘贴等操作。

语法 功能描述
yy 复制光标所在的当前行(只是复制,还没有粘贴)
y+数字+y 复制一段(从当前行开始复制xx行)
p 在当前行进行粘贴
数字+p 从当前行开始复制xx次
u 撤销上一步操作
dd 删除当前行
d+数字+d 删除一段(从当前行开始删除xx行)
y+$ 复制从光标位置开始到该行结尾的所有内容
y+^ 复制从该行开头到光标位置的所有内容
yw 复制一个词
dw 删除一个词
gg 移动到文件头部
G 移动到文件末尾
数字+G 移动到对应行

编辑模式

在一般模式中无法编辑文件内容,需要按键一些按钮才能进入编辑模式,按键以及对应的含义如下:

按键 功能
i 当前光标前
a 当前光标后
o 当前光标行的下一行
I 光标所在行的行首
A 光标所在行的行尾
O 当前光标行的上一行

一般情况下使用i即可,退出编辑模式则使用Esc

命令模式

在一般模式中,输入: / ?三个中的任意一个按键,可以进入命令模式。在命令模式中,可以完成一些命令的输入,常用的命令如下:

命令 功能
:w 保存
: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

常用Shell命令

帮助命令

  • man <命令或配置文件> :获得帮助信息
  • help 命令:获取shell内置命令的帮助信息
    • 一部分基础功能的系统命令是直接内嵌在shell中的,系统加载启动之后会随着shell一起加载,常驻在系统内存中,这部分命令被称为内置命令;相应的其他命令被称为外部命令
    • 可以使用type 命令来判断命令的类型
  • 命令 --help:获取命令的帮助信息

文件目录操作

命令 作用
cd 进入目录
cd - :回到上一步所在的目录(反复横跳)
-P:进入软链接对应的真实目录
pwd 显示当前的绝对路径
ls 查看文件目录列表
- F:查看目录中的内容
-a:查看隐藏文件
-l:查看详情列表
-lh:增强文件大小的易读性
tree 查看文件和目录的树形结构
mkdir 创建目录
-p:创建多层目录
rmdir 删除空目录
rm 删除文件或目录
-r:递归删除
-f:强制执行删除
-v:显示指令的详细执行过程
cp 复制文件或目录
-r:递归复制整个文件夹
mv 移动文件与目录,或者重命名
echo 输出内容到控制台
-e:支持反斜线控制的字符转换
> 输出重定向,覆盖写
>> 输出重定向,追加写
ln 软链接
ln -s [原文件或目录] [软链接名称],给原文件创建一个软链接
删除软链接:rm -rf 软链接名(注意不是rm -rf 软链接名/,这样会删除真实内容)
history 查看已经执行过的历史命令

文件查看和处理

命令 作用
touch 创建空文件
cat 查看文件内容,-n表示显示行号
more 基于Vi编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容
less 比more指令更加强大,根据显示需要加载内容,对于大型文件具有较高的效率
head 显示文件头部内容,-n表示显示的行数,默认为10
tail 显示文件尾部内容
-n:显示的行数,默认为10
-f:实时追踪该文档的所有更新

系统信息和性能

命令 作用
uname 查看信息
-a:查看内核/OS/CPU信息
-r:查看内核版本
-m:查看处理器架构
arch 查看处理器架构
hostname 查看计算机名称(/etc/hostname
uptime 查看系统运行时间、用户数、负载
env 查看系统的环境变量
iostat 查看IO读写和CPU使用情况
sar -u 1 10 查询cpu使用情况(1秒一次,共10次)
sar -d 1 10 查询磁盘性能(1秒一次,共10次)

用户管理

命令 作用
useradd [user_name] 添加新用户
useradd -g group_name user_name:添加新用户到某个组
passwd 修改用户密码
passwd:修改当前用户的密码
passwd user_name:修改用户的密码
id user_name 查看用户是否存在
su 切换用户 switch user
su user_name:切换用户,只能获得用户的执行权限,不能获得环境变量
su - user_name:完整地切换到另一个用户环境,可以获得该用户的环境变量和执行权限
userdel [user_name] 删除用户
-r:删除用户的同时,删除与用户相关的所有文件
who 查看登陆用户的信息
whoami和who am i的输出不同
sudo 设置普通用户具有root权限
usermod -g group_name user_name 修改用户的所在组

普通用户能够使用sudo的前提是添加到了sudoers文件中:

修改/etc/sudoers,添加对应的普通用户

1
2
3
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
myuser ALL=(ALL) ALL

或者可以配置成采用sudo命令时,不需要输入密码:

1
2
3
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
myuser ALL=(ALL) NOPASSWD:ALL

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。在Linux下,创建用户时,会创建一个和它同名的用户组。用户组的管理涉及用户组的添加、删除和修改,实际上都是对/etc/group文件的更新

命令 作用
groups user_name 查看用户所在的组
groupadd group_name 创建用户组
groupdel group_name 删除用户组
groupmod -n new_group old_group 重命名组的名称

文件权限

Linux中,不同的用户处于不同的地位,拥有不同的权限。不同的用户访问同一文件的权限有不同的规定,主要分为文件所属者的权限,文件所属组的权限,其他用户的权限。使用ll命令查看文件的详细信息和权限:

  • 如果没有权限,则使用-表示
  • 类型字段可能是:
    • -:文件
    • d:目录
    • l:链接文档
  • 对于文件
    • r:可读,表示可以读取和查看
    • w:可写,表示可以修改,但是不代表可以删除该文件。能够删除一个文件的前提是对该文件所在的目录有写权限
    • x:可执行,表示可以系统执行
  • 对于目录
    • r:可读,可以读取,ls查看目录内容
    • w:可写,可以修改,可以在目录内创建,删除和重命名
    • x:可执行,可以进入该目录
命令 作用
chmod 修改权限
chmod [{ugoa}{+-=}{rwx}] 文件/文件夹:变更权限
eg: chomd ugo+rwx dir1,表示给所有者u,所有组g和其他用户o添加rwx权限
chmod [mode=xxx] 文件/文件夹:三个数字分别表示ugo的权限
r=4 w=2 x=1(实际是二进制编码)
eg: chmod -R 777 dir1:递归指定权限
chown 修改所有者
chown user_name 文件/目录
-R:递归操作
chgrp 修改所属组
chgrp group_name 文件/目录

搜索查找

命令 作用
find [搜索起点] [选项] 查找文件或者目录
-name:按照文件名或查找模式查找
-user:按照所有者进行查找
-size:按照指定的文件大小查找(+n大于 -n小于 n等于)
eg: find /home -size +10M
locate 快速定位文件路径,由于locate指令基于数据库进行查询,所以应该在第一次运行前,使用updatedb指令创建locate数据库
whereis [关键词] 显示某二进制文件/可执行文件的路径
which [关键词] 查找系统目录下的某二进制文件
| 管道符,将前一个命令的处理结果输出传递给后面的命令
grep [选项] [查找内容] [源文件] 过滤查找,-n表示显示匹配行以及行号

压缩解压

命令 作用6
gzip [文件] 压缩文件,将文件压缩为.gz文件
需要注意:
只能压缩文件不能压缩目录;
不保留原来的文件;
同时压缩多个文件会产生多个压缩包
gunzip [文件.gz] 解压缩文件
zip [选项] [xxx.zip] [需要压缩的内容] 压缩文件或者目录,可以压缩多个文件和目录
-r:压缩目录
unzip [选项] xxx.zip 解压
-d:指定解压后文件的存放目录
tar [选项] xxx.tar.gz 将要打包的内容 打包目录
-c:产生.tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解压.tar文件
-C:解压到指定目录
tar -cvf xxx.tar file 创建非压缩的tar包
tar -cvf xxx.tar file1 file2 dir1 将多个文件和目录进行打包
tar -xcf xxx.tar 解压tar包
tar -cvfz xxx.tar.gz dir 创建gzip压缩包
tar -zxvf xxx.tar.gz 解压gzip压缩包

磁盘分区

命令 作用
du [目录/文件] disk usage 查看文件或者目录的大小
-h:显示成更加易读的格式
-a:不仅查看子目录的大小,还需要包括文件
-c:显示所有文件和子目录大小后,再显示总和
-s:只显示文件大小总和
--max-depth=n:指定子目录的深度
df [选项] disk free:查看磁盘的使用情况
-h:显示成易读的格式,查看磁盘使用情况以及挂载点
lsblk 查看设备的挂载情况
-f:查看详细的设备挂载情况,显示文件系统信息
mount [-t vfstype] [-o options] device dir 挂载设备
-t:指定文件系统的类型,通常不必指定
-o:描述设备或档案的挂载方式,常用的参数有
loop:把一个文件当成硬盘分区挂载上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用的字符集
umount 设备文件名或者挂载点 卸载设备
fdisk -l 查看磁盘的分区详情
fdisk 硬盘设备名 对新增硬盘进行分区操作
swapon -s 查看磁盘使用情况以及挂载点

进程线程

命令 作用
ps process status 进程状态
举例:
ps aux | grep xxx:查看系统中所有的进程
ps -ef | grep xxx:可以查看父子进程之间的关系
参数说明:
a:列出带有终端的所有用户的进程
x:列出当前用户的所有进程,包括没有终端的进程
u:用户友好的显示风格
-e:列出所有进程
-u:列出某个用户相关的所有进程
-f:显示完整格式的进程列表
kill -s name 根据名称杀死进程
-9:表示强迫进程立即停止
kill -s pid 根据进程号杀死进程
killall name 杀死所有相关的进程
pstree 查看进程树
top 实时监控系统进程状态
netstat 显示网络状态和端口占用信息
-a:显示所有正在监听和未监听的socket
-n:拒绝显示别名,能显示数字的全部转化为数字
-l:仅列出在监听的服务状态
-p:表示显示哪个进程在调用
netstat -anp | grep 进程号 查看该进程网络信息
netstat -nlp | grep 端口号 查看网络端口号的占用情况
  • ps aux显示信息
    • USER:产生进程的用户
    • PID:进程的ID号
    • %CPU:该进程占用CPU资源的百分比
    • %MEM:该进程占用物理内存的百分比
    • VSZ:该进程占用虚拟内存的大小,单位为KB
    • RSS:该进程占用实际物理内存的大小,单位为KB
    • TTY:该进程是在哪个终端中运行的。
      • 对于CentOS来说,tty1为图形化终端,tty2-tty6是本地的字符界面终端
      • pts/0-255代表虚拟终端
    • STAT:进程状态
    • START:该进程的启动时间
    • TIME:该进程占用CPU的运算时间
    • COMMAND:产生此进程的命令名
  • ps -ef显示信息
    • UID:用户ID
    • PID:进程ID
    • PPID:父进程ID
    • C:CPU用于计算执行优先级的因子,数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是IO密集型运算,执行优先级会提高
    • STIME:进程启动的时间
    • TTY:完整的终端名称
    • CMD:启动进程所用的命令和参数

系统管理

  • 进程(process):计算机中一个正在执行的程序和命令
  • 服务(service):启动之后常驻内存的进程

系统管理相关的常用命令

命令 作用
chkconfig --list 列出系统服务
service <服务名> status 查看某个服务
service <服务名> start 启动某个服务
service <服务名> stop 终止某个服务
service <服务名> restart 重启某个服务
systemctl status <服务名> 查看某个服务
systemctl start <服务名> 启动某个服务
systemctl stop <服务名> 终止某个服务
systemctl restart <服务名> 重启某个服务
systemctl enable <服务名> 开启服务自启动
systemctl disable <服务名> 关闭服务自启动

关机重启命令

命令 作用
sync 将数据由内存同步到硬盘中
halt 停机,关闭系统但是不断电
poweroff 关机,断电
reboot 重启
shutdown -h now 现在关机
shutdown -h 10 10分钟后关机
shutdown -h 12:34 预定时间在12:34关机
shutdown -r now 现在重启
shutdown -r 10 10分钟后重启
shutdown -h 12:34 预定时间在12:34重启
shutdown -c 取消预定关机操作

系统定时任务

使用crontab完成系统定时任务,对应的后台服务为crond服务,可以使用系统管理命令重启查看

1
systemctl restart crond

采用crontab进行定时任务设置,基本语法为crontab [option],可选选项有:

  • -e:编辑crontab定时任务
  • -l:查询crontab任务
  • -r:删除当前用户所有的crontab任务

使用-e之后会进入crontab编辑页面,会打开vim进行任务编辑,一个例子如下,表示每隔一分钟,向/root/test.txt文件中添加hello

1
*/1 * * * * /bin/echo "hello" >> /root/test.txt

软件包管理

RPM

RPM(RedHat Package Manager),是RedHat的软件包管理工具。软件的安装包为.rpm后缀的文件

命令 作用
rpm -qa 查看已经安装的rpm包
rpm -q package_name 查询某个rpm包
rmp -e xxx 卸载软件包
rpm -ivh xxx.rpm 安装rpm包
-i:安装
-v:显示详细信息
-h:显示进度条
--nodeps:安装前不检查依赖

YUM

YUM(全称为Yellow dog Updater,Modified),是一个在Fedora,RedHat和CentOS中的Shell前端软件包管理器。它基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,并且可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。

主要命令格式为yum [选项] [参数]

选项可选有-y,表示对所有的提问都回答”yes“

命令 作用
yum repolist enabled 显示可用的源仓库
yum search package_name 搜索软件包
yum install package_name 下载并安装软件包
yun install --downloadonly package_name 只下载不安装
yum list 显示所有程序包
yum list installed 查看当前系统已安装包
yum list updates 查看可以更新的包列表
yum check-update 查看可升级的软件包
yum update 更新所有软件包
yum update package_name 升级指定软件包
yum deplist package_name 列出软件包依赖关系
yum remove package_name 删除软件包
yum clean all 清除缓存
yum clean packages 清除缓存的软件包
yum clean headers 清除缓存的header

APT

命令 作用
apt-cache search package_name 搜索对应的程序包
apt-cache show package_name 获取包的概览信息
apt-get install package_name 安装/升级软件包
apt-get purge package_name 卸载软件(包括配置)
apt-get remove package_name 卸载软件(不包括配置)
apt-get update 更新包索引信息
apt-get upgrade 更新已安装软件包
apt-get clean 清理缓存

Linux基础学习笔记
http://example.com/2022/06/28/Linux基础学习笔记/
作者
EverNorif
发布于
2022年6月28日
许可协议