Linux基础
Linux基础
ccLinux目录结构
- /boot:启动目录,内核存放地
- /etc:配置文件存放地
- /tmp:程序产生的临时文件
- /home:存放普通用户的目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
- /lib:库文件,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
- /bin:可执行文件和常用的Linux命令
- /sbin:系统管理员的命令和工具
- /usr:应用程序和文件的安装池,类似于Windows中的program files目录
- /mnt:挂接其他文件系统
- /root:root账户的home目录
- /dev:存放Linux系统下的设备文件
- /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个mysql数据库则就可以放到这个目录下。默认是空的。
- /var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/ :根目录
~ :用户目录,也叫作home目录,相当于 /home/user/
vi/vim编辑器
vi与vim的区别
vim 是 vi 的升级版本,除了兼容 vi 的所有指令,vim 还具有一些新的特性,主要体现在:
多级撤销
在 vi 里,按 u 只能撤销上次命令,而在 vim 里可以无限制的撤销。多平台
vi 只能运行于 unix 中,而 vim 可以运行于 unix、windows、mac 等多操作平台。语法加亮
vim 可以用不同的颜色加亮显示代码。
模式的基本切换
命令 | 作用(模式切换) |
---|---|
vim file_name | 生成新文件或者查看、编辑文件(进入普通模式) |
『 : / ?』 | (由普通模式进入命令模式) |
『i, I, o, O, a, A』 | (进入编辑模式) |
ESC键 | (回到普通模式) |
普通模式操作
语法 | 功能描述 |
---|---|
yy | 复制光标行 |
y 数字 y | 复制一段(从第几行到第几行) |
p | 在目标行粘贴 |
u | 撤销 |
dd | 删除当前行 |
d 数字 d | 删除光标(含)后多少行 |
x | 剪切一个字母,相当于del |
X | 剪切一个字母,相当于Backspace |
yw | 复制一个词 |
dw | 删除一个词 |
shift + ^ | 移动到行头 |
shift + $ | 移动到行尾 |
1 + shift + g | 移动到页头 |
shift + g | 移动到页尾 |
数字 + shift + g | 移动到目标行 |
编辑模式操作
语法 | 功能描述(编辑位置) |
---|---|
i | 当前光标前 |
I | 光标所在行最前 |
a | 当前光标后 |
A | 光标所在行最后 |
o | 当前光标行的下一行 |
O | 当前光标行的上一行 |
命令模式操作
命令 | 功能 |
---|---|
:w | 保存 |
:q | 退出 |
:! | 强制执行 |
/要查找的词 | n 查找下一个,N 往上查找 |
:noh | 取消高亮显示 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
:set paste | 设置粘贴模式 |
:%s/old/new/g | 替换内容 /g 替换匹配到的所有内容 |
:wq 保存并退出;
:wq! 保存并强制退出;
网络配置
IP地址
1 | 查看ip地址 |
特殊ip地址
127.0.0.1,这个IP地址用于指代本机
0.0.0.0,特殊IP地址
- 可以用于指代本机
- 可以在端口绑定中用来确定绑定关系
- 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问
配置主机名
修改主机名
1 | 查看主机名 |
修改 hosts 映射文件
在配置文件添加主机名和IP的映射关系,可通过主机名替代IP进行访问
1 | Linux 中修改映射文件 |
在VMware中配置固定IP(修改IP)
配置IP地址网关和网段
在系统中修改固定IP
1
2
3
4
5
6
7vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR="192.168.10.103"
NETMASK="255.255.255.0"
GATEWAY="192.168.10.2"
DNS1="192.168.10.2"systemctl restart network 重启网卡
修改IP后可能遇到的问题:
(1)物理机能 ping 通虚拟机,但是虚拟机 ping 不通物理机,一般都是因为物理机的
防火墙问题,把防火墙关闭就行
(2)虚拟机能 Ping 通物理机,但是虚拟机 Ping 不通外网,一般都是因为 DNS 的设置有
问题
(3)虚拟机 Ping www.baidu.com 显示域名未知等信息,一般查看 GATEWAY 和 DNS 设
置是否正确
(4)如果以上全部设置完还是不行,需要关闭 NetworkManager 服务
1
2 systemctl stop NetworkManager # 关闭
systemctl disable NetworkManager # 禁用(5)如果检查发现 systemctl status network 有问题 需要检查 ifcfg-ens33
系统管理
进程与服务
计算机中,一个正在执行的程序或命令,被叫做 进程(process)。
启动之后一直存在、常驻内存的进程,一般被称作 服务(service)
服务管理
查看服务的方法:在 /etc/init.d/ 目录下
1 | CentOS 6 |
设置后台服务的自启配置
1 | CentOS 6 |
系统运行级别
在CentOS 6 中:
1 | 查看默认级别 |
Linux系统有7种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5: X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
在CentOS 7 中:
运行级别简化为
- multi-user.target 等价于原运行级别3(多用户文本模式)
- graphical.target 等价于原运行级别5 (多用户图形模式)
1 | 查看当前运行级别 |
关闭防火墙
1 | 查看防火墙状态 |
关机重启
1 | 将数据由内存同步到硬盘中 |
为什么要使用 sync 命令?
Linux中采取了 “预读迟写” 的方式来提高磁盘的读写效率,当用户保存文件时,不一定会将数据立刻写入物理磁盘,而是将数据保存在缓存区中,等缓存区满时再写入磁盘,这种方式带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。
使用 sync 指令可以立即将缓冲区的数据写入磁盘。
帮助和查找命令
man 和 help
1 | 获得帮助信息 |
如何区分是否为内置命令?
type 命令
常见的内置命令有 cd 、exit 等
显示信息 | 功能 |
---|---|
NAME | 命令的名称和单行描述 |
SYNOPSIS | 怎样使用命令 |
DESCRIPTION | 命令功能的深入讨论 |
EXAMPLES | 怎样使用命令的例子 |
SEE ALSO | 相关主题(通常是手册页) |
which
1 | 查看命令的程序文件存放在哪 |
常用快捷键
快捷键 | 功能 |
---|---|
ctrl + c | 停止进程 |
ctrl + d | 退出或登出 |
ctrl + l | 清屏,等同于clear,彻底清屏是 reset |
tab 键 | 提示,补全 |
上下键 | 查找执行过的命令 |
history | 查看历史输入过的命令 |
!命令前缀 | 自动执行上一次匹配前缀的命令 |
ctrl + r | 输入内容去匹配历史命令,回车直接执行,左右键得到此命令 |
有关光标移动快捷键
快捷键 | 功能 |
---|---|
ctrl + a | 跳转到命令开头 |
ctrl + e | 跳转到命令结尾 |
ctrl + 键盘左键 | 向左跳一个单词 |
ctrl + 键盘右键 | 向右跳一个单词 |
文件目录操作
1 | 显示当前工作目录的绝对路径 print working directory |
ls 命令选项 | 功能 |
---|---|
-a | 全部的文件,连同隐藏文件/文件夹( 开头为 . 的文件) 一起列出来 |
-l | 以列表形式展示内容,包含文件的属性与权限等等数据,等同于 ll 命令 |
-h | 表示以易于阅读的形式,列出文件大小,如K、M、G |
cd 命令参数 | 功能 |
---|---|
cd 绝对路径/相对路径 | 切换目录 |
cd ~ 或 cd | 切换到用户文件夹下 |
cd - | 回到上一次所在目录 |
cd .. | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
mkdir 命令选项 | 功能 |
---|---|
-p | 创建多层目录 |
cp 命令选项 | 功能 |
---|---|
-r | 递归复制整个目录 |
-f | 强制覆盖不提示 |
rm 命令选项 | 功能 |
---|---|
-r | 递归删除目录中所有内容(包括目录) |
-f | 强制删除不提示 |
-v | 显示指令的详细执行过程 |
rm 命令支持通配符 *,用来做模糊匹配
test*,表示匹配任何以test开头的内容
*test,表示匹配任何以test结尾的内容
*test *,表示匹配任何包含test的内容
cat 命令选项 | 功能 |
---|---|
-n | 显示所有行的行号,包括空行 |
more 命令快捷键操作 | 功能 |
---|---|
空格(space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 退出,不再显示该文件内容 |
ctrl + f | 向下滚动一屏 |
ctrl + b | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less 命令快捷键操作 | 功能 |
---|---|
空白键(space) | 向下翻动一页 |
pagedown | 向下翻动一页 |
pageup | 向上翻动一页 |
/字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找; |
?字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找; |
q | 退出 less |
echo 命令选项 | 功能 |
---|---|
-e | 支持反斜线控制的字符转换 |
常见的控制字符以及作用:
\\ 输出 \ 本身
\n 换行符
\t 制表符,也就是 tab 键
时间日期操作
1 | 显示当前时间 |
使用ntp程序校准系统时间
1
2
3
4
5
6
7
8 安装 ntp
yum -y install ntp
启动并设置开机自启
systemctl start ntpd
systemctl enable ntpd
手动校准
ntpdate -u ntp.aliyun.com
用户与用户组管理
用户管理
1 | useradd 用户名 # 添加新用户 |
可以使用sudo命令,为普通的命令授权,临时以root身份执行,前提是要为普通用户配置sudo认证
如何为普通用户配置sudo认证?
1
2 # 修改配置文件
vi /etc/sudoers然后找到下面一行(91行),在 root 下面添加
1
2
3 ## Allow root to run any commands anywhere
root ALL=(ALL) ALL
要添加的用户名 ALL=(ALL) ALL也可以配置成不需要输密码登录
1
2
3 ## Allow root to run any commands anywhere
root ALL=(ALL) ALL
要添加的用户名 ALL=(ALL) NOPASSWD:ALL修改完毕,用户帐号登录,然后用命令 sudo ,即可获得 root 权限进行操作。
切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:ctrl + d
用户组管理
1 | groupadd 组名 # 新增组 |
getent 命令
- 查看当前系统中有哪些用户:getent passwd
- 查看当前系统有哪些用户组:getent group
文件权限
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
普通用户的权限,一般在其HOME目录内是不受限的。
一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。
文件属性
作用到文件:
- r 可读
- w 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
- x 可执行
作用到目录:
- r 可读
- w 可修改,目录内创建+删除+重命名目录
- x 可执行,可进入该目录
修改权限控制
chmod 修改权限
只有文件、文件夹的所属用户或root用户可以修改
1 | chmod [{ugoa}{+-=}{rwx}] 文件或目录 # |
chown 修改所有者
修改文件、文件夹的所属用户和用户组
普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行
1 | -R 递归操作 |
chgrp 改变所属组
1 | chgrp [最终用户组] [文件或目录] |
文件的搜索查找
find
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
1 | find [搜索范围] [选项] |
选项 | 描述 |
---|---|
-name | 按指定名查找文件 |
-user | 查找属于指定用户的所有文件 |
-size | 按照指定的文件大小查找文件(bcwKMG) |
find 命令也支持通配符 * 进行模糊搜索
locate
利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件
1 | updatedb |
由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
grep 以及管道符
管道符 | ,将管道符左边命令的结果,作为右边命令的输入
1 | 通过关键字过滤文件行 |
wc
1 | 统计文件的行数、单词数量等 |
选项 | 功能 |
---|---|
-c | 统计bytes数量 |
-m | 统计字符数量 |
-l | 统计行数 |
-w | 统计单词数量 |
磁盘管理
查看文件和目录占用的磁盘空间
du, 完整名称 disk usage, 磁盘占用情况
1 | 显示目录下每个子目录的磁盘使用情况 |
选项 | 功能 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
-a | 不仅查看子目录大小,还要包括文件 |
-c | 显示所有的文件和子目录大小后,显示总和 |
-s | 只显示总和 |
–max-depth=n | 指定统计子目录的深度为第 n 层 |
查看磁盘空间使用情况
df, 完整名称 disk free, 空余磁盘
1 | 列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况 |
选项 | 功能 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
查看设备挂载情况
1 | lsblk |
选项 | 功能 |
---|---|
-f | 查看详细的设备挂载情况,显示文件系统信息 |
挂载/卸载
对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根
目录、一个独立且唯一的文件结构。
Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理
方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,
要载入的那个分区将使它的存储空间在这个目录下获得。
1 | 挂载设备(必须要有光盘或者已经连接镜像文件) |
fdisk 分区
该命令必须在 root 用户下才能使用
1 | 查看磁盘分区详情 |
进程管理
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地
址空间,并占用一定的系统资源。
查看当前的系统进程状态
ps, 全称 process status, 进程状态
1 | 查看进程信息 |
选项 | 功能 |
---|---|
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:启动进程所用的命令和参数
如果想查看进程的 CPU 占用率和内存占用率,可以使用 aux;
如果想查看进程的父进程 ID 可以使用 ef;
终止进程
1 | 通过进程号杀死进程 |
选项 | 功能 |
---|---|
-9 | 强迫进程立即停止 |
查看进程树
1 | pstree [选项] |
选项 | 功能 |
---|---|
-p | 显示进程的 PID |
-u | 显示进程的所属用户 |
实时监控系统进程状态
top命令,查看CPU、内存使用情况,类似Windows的任务管理器
1 | 默认每5秒刷新一次 |
选项 | 功能 |
---|---|
-p | 只显示某个进程的信息 |
-d | 设置刷新时间,默认是5s |
-c | 显示产生进程的完整命令 |
-n | 指定刷新次数 |
-b | 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如top -b -n 3 > /tmp/top.tmp |
-i | 不显示任何闲置(idle)或无用(zombie)的进程 |
-u | 查找特定用户启动的进程 |
命令内容详解
显示网络状态和端口占用信息
端口的分类
公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口
注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用
1 | 查看该进程网络信息 |
选项 | 功能 |
---|---|
-a | 显示所有正在监听(listen)和未监听的套接字(socket) |
-n | 拒绝显示别名,能显示数字的全部转化成数字 |
-l | 仅列出在监听的服务状态 |
-p | 表示显示哪个进程在调用 |
系统定时任务
1 | 定时任务设置 |
选项 | 功能 |
---|---|
-e | 编辑 crontab 定时任务 |
-l | 查询 crontab 任务 |
-r | 删除当前用户所有的 crontab 任务 |
特殊符号
特定时间执行命令
环境变量
环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
1 | 查看Linux系统中环境变量 |
自行设置环境变量
临时设置,语法:export 变量名=变量值
永久生效
针对当前用户生效,配置在当前用户的: ~/.bashrc文件中
针对所有用户生效,配置在系统的: /etc/profile文件中
并通过语法:source 配置文件,进行立刻生效,或重新登录FinalShell生效
自定义环境变量PATH
临时修改PATH:export PATH=$PATH:/home/itheima/自定义文件夹
永久修改:将export PATH=$PATH:/home/itheima/myenv,填入用户环境变量文件或系统环境变量文件中去
软件包管理
RPM
RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe,是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。
PRM包的名称格式:
Apache-1.3.23-11.i386.rpm
pache 软件名称
1.3.23-11 软件的版本号,主版本和此版本
i386 软件所运行的硬件平台,Intel 32位处理器的统称
rpm 文件扩展名,代表RPM包
1 | 查询指定程序包是否安装 |
如何进入 Packages 文件夹下:
使用 lsblk 命令 查看磁盘挂载情况,然后进入光驱目录下(sr0),Packages文件夹就在该目录下。
YUM 仓库配置
YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
常用命令
1 | yum [-y] [参数] # -y 对所有的提问都回答 yes |
参数 | 功能 |
---|---|
install | 安装 rpm软件包 |
reinstall | 重新安装软件包 |
update | 更新 rpm软件包 |
check-update | 检查是否有可用的更新 rpm软件包 |
remove | 卸载指定的 rpm软件包 |
search | 搜索 |
list [installed] | 列出所有可用的软件包及其版本信息(或者只列出已安装的) |
clean | 清除 yum 过期的缓存 |
deplist | 显示指定 rpm软件包的依赖关系 |
Ubuntu系统使用的是 apt包管理器
其它下载工具
wget是非交互式的文件下载器,可以在命令行内下载网络文件
1
2 wget [-b] url # -b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
tail -f wget-log # 通过tail命令可以监控后台下载进度curl可以发送http网络请求,可用于:下载文件、获取信息等
1 curl [-o] url # -o,用于下载文件,当url是下载链接时,可以使用此选项保存文件
修改网络 YUM源
修改为国内的镜像网站
安装 wget,wget用于从指定的 URL 下载文件
1
yum install wget
在/etc/yum.repos.d/目录下,备份默认的 repos 文件
1
cp CentOS-Base.repo CentOS-Base.repo.backup
下载网易163 或者是 aliyun 的 repos 文件
1
2
3
4aliyun
wget http://mirrors.aliyun.com/repo/Centos-7.repo
网易 163
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo使用下载好的 repos 文件替换默认的 repos 文件
1
mv CentOS-7.repo CentOS-Base.repo # 以 aliyun 为例
清理旧缓存数据,缓存新数据
1
2yum clean all
yum makecache # 把服务器的包信息下载到本地电脑缓存起来测试
上传下载与压缩
上传下载
与虚拟机的数据交换
1 | 安装 |
压缩与解压缩
tar 打包
1 | tar [选项] XXX.tar.gz 将要打包进去的内容 # 打包目录,压缩后的文件格式.tar.gz |
tar命令选项 | 功能 |
---|---|
-c | 创建压缩文件 |
-v | 显示压缩、解压过程,用于查看进度 |
-x | 解压模式 |
-f | 指定压缩后的文件名,-f选项必须在所有选项中位置处于最后一个 |
-z | 打包同时压缩 |
-C | 解压到指定目录 |
-z 选项如果使用的话,一般处于选项位第一个
-f 选项,必须在选项位最后一个
-C 选项单独使用,和解压所需的其它参数分开
gzip/gunzip 压缩
1 | gzip 文件 # 压缩文件,只能将文件压缩为*.gz 文件 |
- 只能压缩文件不能压缩目录
- 不保留原来的文件
- 同时多个文件会产生多个压缩包
zip/uzip 压缩
1 | zip [选项] XXX.zip 将要压缩的内容 # 压缩文件和目录 |
zip选项 | 功能 |
---|---|
-r | 压缩目录 |
unzip选项 | 功能 |
---|---|
-d<目录> | 指定解压后文件的存放目录 |
zip 压缩命令在windows/linux都通用,可以压缩目录且保留源文件