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 |
|
采用crontab进行定时任务设置,基本语法为crontab [option]
,可选选项有:
- -e:编辑crontab定时任务
- -l:查询crontab任务
- -r:删除当前用户所有的crontab任务
使用-e之后会进入crontab编辑页面,会打开vim进行任务编辑,一个例子如下,表示每隔一分钟,向/root/test.txt
文件中添加hello
1 |
|
软件包管理
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 | 清理缓存 |