Linux基础
Linux目录结构
Linux的目录结构是一个树形结构
Windows系统可以有很多盘符,但Linux没有盘符这个概念,只有一个根目录/,所有文件都在根目录下面
路径描述方式
在Linux系统中,路径之间的层级关系使用/表示,windows系统中使用\表示
/usr/local/hello.txt
# 注意,开头的/表示根目录,后续的/表示层级关系课后练习
# 在根目录下有一个文件夹test,文件夹内有一个文件hello.txt
/test/hello.txt
# 在根目录下有一个文件hello.txt
/hello.txt
# 在根目录下有一个文件夹hello,在hello文件夹内还有一个文件夹world,world文件夹内有一个文件test.txt
/hello/world/test.txt当前工作目录
当前登录用户的HOME目录为当前工作目录。
Linux命令基础
什么是命令、命令行
命令行:即Linux终端(Terminal)。是一种 命令提示符界面,以纯字符的形式操作系统,可以使用各种字符化命令对系统发出操作指令
命令:即Linux程序。一个命令就是一个Linux的程序,命令没有图形化界面,可以在命令行(终端)中提供字符化的反馈。
Linux命令基础格式
command [-options] [parameter]
# command:命令本身
# -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
# parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等
# 语法中的[]代表可选的意思
# 示例
ls -l /home/hello
# ls是命令本身,-l是选项,/home/hello是参数,意思是以列表的形式显示/home/hello中的内容
cp -r test1 test2
# cp本身是命令,-r是选项,test1和test2是参数,意思是复制文件夹test1成为test2相对路径和绝对路径
绝对路径以根目录为起点,路径描述以/开头
相对路径以当前目录为起点,路径描述无需/开头
特殊路径符:.表示当前目录、..表示上一级目录、~表示HOME目录
Linux命令
ls命令
ls [-a -l -h] [linux路径]
# -a表示all,即列出全部文件
# -l表示以列表的形式展示内容并展示更多信息
# -h表示以易于阅读的形式列出文件大小cd切换工作目录
cd [linux路径]
# cd命令无需选项,只有参数,表示要切换到哪个路径下面
# cd命令直接执行,不写参数,表示回到用户的HOME目录pwd查看当前工作目录
pwd
# pwd命令,无参数,无选项,直接输入pwd即可mkdir创建目录命令
mkdir [-p] linux路径
# 参数必填,表示linux路径,即要创建文件夹的路径,相对路径或绝对路径都可
# -p选项可选,表示自动创建不存在的父目录,适用于连续创建多层级的目录
# 注意:创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME目录外操作,涉及到权限问题,HOME外无法创建成功touch创建文件
touch linux路径
# touch命令无选项,参数必填,表示要创建的文件的路径,相对、绝对等都可以cat查看文件
cat linux路径
# cat命令无选项,参数必填,表示被查看的文件的路径more查看文件
不同:cat命令将内容全部展现出来,more支持翻页,如果内容过多可以一页一页的查看
more linux路径
# 没有选项,参数必填
# 在查看的过程中,使用空格进行翻页,使用q退出查看cp复制文件
cp [-r] 参数1 参数2
# -r参数可选,用于复制文件夹使用,表示递归
# 参数1填写linux路径 表示被复制的文件或文件夹
# 参数2填写linux路径 表示要复制去的地方mv移动文件
mv 参数1 参数2
# 参数1 linux路径 表示要被移动的文件或文件夹
# 参数2 linux路径 表示要移动去的地方 如果目标不存在则进行改名 确保目标存在rm删除文件
rm [-r -f] 参数1 参数2 ... 参数N
# -r选项用于删除文件夹
# -f表示强制删除
# 参数1等等表示要删除的文件夹或者文件 按照空格隔开rm支持通配符*来做模糊匹配
test*表示匹配任何以test开头的内容
*test表示匹配任何以test结尾的内容
*test*表示匹配任何包含test的内容
rm是一个非常危险的命令,特别是处于root用户的时候,请谨慎使用
which查找命令文件
which 要查找的命令
# 无选项,参数必填,填入想要查找到的命令运行后得到该命令所在的位置find查找文件
# 按文件名查找文件
find 起始路径 -name "被查找文件名"
# 按文件名在指定起始路径中查找文件
# find命令也可以使用通配符*进行模糊查找
# 按文件大小查找文件
find 起始路径 -size +|-n[kMG]
# +、-代表大于、小于
# n代表大小数字
# k代表kb、M代表MB、G代表GB
# 示例
# 查找小于10kb的文件
find / -size -10k
# 查找大于100MB的文件
find / -size +100M
# 查找大于1G的文件
find / -size +1Ggrep过滤
grep [-n] 关键字 文件路径
# 选项-n 表示在结果中显示匹配的行号
# 参数关键字必填,表示过滤的关键字,带有空格或者其他特殊符号建议使用""将关键字包起来
# 参数文件路径必填,表示要过滤内容的文件路径,可作为内容输入端口
# grep命令可以从文件中通过关键字过滤行wc数量统计
wc [-c -m -l -w] 文件路径
# 选项-c统计bytes数量
# 选项-m统计字符数量
# 选项-l统计行数
# 选项-w统计单词数量
# 参数文件路径必填|管道符
管道符的含义是将管道符左边命令的结果作为右边命令的输入
echo输出
echo "输出内容"
# 参数必填,表示输出的内容,复杂内容可用""包起来>和>>重定向符
>表示将左侧命令的结果,覆盖写入符号右侧指定的文件中
>>表示将左侧命令的结果,追加写入符号右侧指定的文件中
tail查看
使用tail命令可以查看文件尾部内容,跟踪文件最新更改
tail [-f -num] 文件路径
# 参数必填,表示被追踪的文件路径
# 选项-f表示持续跟踪
# 选项-num表示查看尾部多少行,默认10行vi编辑器
vi是命令行下编辑文本文件的绝佳选择
vim是vi的加强版本
vi 文件路径
vim 文件路径
# 如果文件路径表示文件不存在,那么此命令用于编辑新文件
# 如果文件路径表示文件存在,那么此命令用于编辑已有文件vi的三种工作模式
命令模式(Command mode)
命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模式下,不能自由进行文本编辑
输入模式(Insert mode)
也就是所谓的编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑
底线命令模式(Last line mode)
以
:开始,通常用于文件的保存、退出等等
命令模式快捷键
linux用户
root用户
在linux系统中,拥有最大权限的用户名为root(超级管理员)
root用户拥有最大的系统操作权限,而普通用户在许多地方的权限都是受限的
普通用户的权限,一般在
HOME目录是不受限的,一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限
su切换用户
su [-] 用户名
# 选项-表示是否在切换用户后加载环境变量,建议带上
# 参数表示要切换到的用户,也可以省略,省略后表示切换到root用户
# 切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键ctrl+d使用普通用户切换到其他用户时需要输入密码
使用root用户切换到其他用户是不需要输入密码,可以直接切换
sudo临时授权
当我们得知root密码时,可以通过su命令切换到root以获得最大权限,但是我们不建议长期使用root用户,避免带来系统破坏
我们可以使用sudo命令为普通的命令授权,临时以root命令执行
sudo 其他命令
# 在其他命令前带上sudo命令,即可为这一条命令临时赋予root权限
# 但不是所有用户都有权利使用sudo命令,我们需要为普通用户配置sudo认证为普通用户配置sudo认证
切换到
root用户,执行visudo命令,会自动通过vi编辑器打开/etc/sudoers在文件的最后添加
用户名 ALL=(ALL) NOPASSWORD:ALLNOPASSWORD表示使用sudo命令时无需输入密码切换回普通用户即可
用户、用户组
linux系统中可以配置多个用户、用户组,且用户可以加入到多个用户组中
linux系统中关于权限的管控有两个级别:针对用户的权限控制和针对用户组的权限控制。比如针对某文件,可以控制用户的权限,也可以控制用户组的权限
用户组管理
groupadd 用户组名 # 创建用户组
groupdel 用户组名 # 删除用户组用户管理
# 创建用户
useradd [-g -d] 用户名
# 选项-g表示指定用户的组,不指定则默认创建同名组并加入,-g指定的组需要已存在,如已存在同名组,则必须使用-g
# 选项-d表示指定用户的HOME路径,不指定则默认在/home/用户名
# 删除用户
userdel [-r] 用户名
# 选项-r表示删除用户的HOME目录,不使用-r删除时保留HOME目录
# 查看用户所在组
id 用户名
# 参数用户名表示被查看的用户,如果不提供则查看自身
# 修改用户所属组
usermod -aG 用户组 用户名
# 参数必填,将指定的用户添加到指定的用户组中
# 查看用户
getent passed
# 可以查看系统中有哪些用户
# 结果中共有7份信息,分别为:
# 用户名:密码(x):用户ID:组ID:描述信息:HOME目录:执行终端(默认bash)
# 查看用户组
getent group
# 可以查看系统中有哪些用户组
# 结果中共有3份信息,分别为:
# 组名称:组认证(X):组ID权限控制
rwx
r表示读权限
w表示写权限
x表示执行权限
针对文件、文件夹的不同,rwx的含义有细微的差别
r针对文件可以查看文件内容,针对文件夹可以查看文件夹内容(例如ls)w针对文件表示可以修改此文件,针对文件夹表示可以在文件夹内进行创建、删除、改名等操作x针对文件表示可以将文件作为程序执行,针对文件夹表示可以更改工作目录到此文件夹,例如cd
权限的数字序号
权限可以用3位数字来表示,第一位表示用户权限,第二位表示用户组权限,第三位表示其他用户权限
数字的细节如下:r记为4,w记为2,x记为1
chmod修改权限
我们可以使用chmod命令修改文件、文件夹的权限信息
注意:只有文件、文件夹的所属用户或
root用户可以修改
chmod [-R] 权限 文件或文件夹
# 选项-R表示对文件夹内的全部内容应用同样的操作
chmod u=rwx,g=rx,o=x a.txt
# 将文件权限修改为rwxr-x--x
# 其中u代表user所属用户权限,g代表group所属用户组权限,o代表other其他用户权限chown修改权限
使用chown命令可以修改文件、文件夹所属的用户和用户组
普通用户无法修改所属为其他用户或用户组,所以此命令只适用于root用户执行
chown [-R] [用户][:][用户组] 文件或文件夹
# 选项-R表示对文件夹内的所有内容应用相同规则
# 用户选项修改所属用户
# 用户组选项修改所属用户组
# :用于分隔用户和用户组
chown root a.txt # 将a.txt的所属用户修改为root
chown :root a.txt # 将a.txt的所属用户组修改为rootlinux实用
实用小技巧
强制停止:
Ctrl + c退出或登出:
Ctrl + d查看历史命令:
history历史命令搜索:
Ctrl + r光标跳到命令开头:
Ctrl + a光标跳到命令结尾:
Ctrl + e光标向左跳一个单词:
Ctrl + 左箭头光标向右跳一个单词:
Ctrl + 右箭头清屏:
Ctrl + l或clear命令
软件安装
yum
yum是RPM包软件管理器,用于自动化安装配置linux软件,并可以自动解决依赖问题
yum [-y] [install | remove | search] 软件名称
# 选项-y表示自动确认,无需手动确认安装或卸载过程
# install:安装 remove:卸载 search:搜索
yum命令需要root权限,且需要联网
apt命令-扩展
apt [-y] [install | remove | search] 软件名称
# 使用方法与yum一致systemctl命令
linux中很多软件均支持使用systemctl命令控制:启动、停止、开机自启等
能够被systemctl命令控制的软件一般也称之为服务
systemctl start | stop | status | enable | disable 服务名系统的内置服务较多,比如:
NetworkManager主网络服务network副网络服务firewalld防火墙服务sshdssh服务
软链接
在系统中创建软连接可以将文件、文件夹链接到其他位置,类似于快捷方式
ln -s 参数1 参数2
# -s表示创建软链接
# 参数1表示被链接的文件或文件夹
# 参数2表示要链接去的目的地日期、时区
date查看时间
date [-d] [+格式化字符串]
# -d按照给定的字符串显示日期,一般用于日期计算
# 格式化字符串:通过特定的字符串标记来控制显示的日期格式
# 示例
date -d "+1 year +2 day" +"%Y-%m-%d %H:%M:%S"修改linux时区
使用root权限,执行如下命令,将linux时区东八区时区
rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeIP地址和主机名
IP地址
每一台联网的电脑都会有一个IP地址用于和其他电脑进行通讯
IP地址使用ifconfig命令查看本机ip地址
主机名
每一台电脑除了对外联络地址(ip地址)之外,也可以有一个名字,称之为主机名
hostname # 查看主机名
hostnamectl set-hostname 主机名 # 修改主机名虚拟机配置固定IP
当前我们虚拟机的Linux系统,其IP地址都是通过DHCP获取的
DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能会导致IP地址频繁变更
在
VMware中配置网络输入命令
sudo ^Cm /etc/sysconfig/network-scripts/ifcfg-ens33将文件中的
BOOTPROTO="DHCP"设置为BOOTPROTO="static"向文件尾部追加以下内容:
IPADDR="IP地址" NETMASK="子网掩码" GATEWAY="网关" DNS1="DNS服务器"重启网络服务
systemctl restart network
网络传输
ping命令
可以通过ping命令检查指定的网络服务器是否是可联通的状态
ping [-c num] ip或主机名
# 选项-c表示检查的次数,不使用则无限次持续检查
# 参数ip或主机名表示被检查的服务器的IP地址或主机名wget命令
wget是非交互式的下载器,可以在命令行内下载网络文件
wget [-b] url
# 选项-b表示后台下载,会将日志写入到当前工作目录的wget-log文件中
# 参数url表示下载链接curl命令
curl可以发送http网络请求,可用于下载文件、获取信息等
curl [-O] url
# 选项-O表示用于下载文件,当url式下载链接时,可以使用此选项保存文件
# 参数url表示要发起请求的网络地址端口
端口是设备与外界通讯交流的出入口,可以分为物理端口和虚拟端口两类
sudo yum -y install nmap # 安装nmap
nmap ip地址 # 对指定IP地址所开放的端口进行嗅探
netstat -anp | grep 端口号 #查看端口占用情况端口的划分:
公认端口:1~1023,用于系统内置或常用知名软件绑定
注册端口:1024~49151,用于松散绑定使用(用户自定义)
动态端口:49152~65535,用户临时使用(多用于出口)
进程管理
程序运行在操作系统中,是被操作系统所管理的,为管理运行的程序,每一个程序运行时,便被操作系统注册为系统中的一个进程。并会为每一个进程都分配一个独有的:进程ID(进程号)
查看进程
ps [-e -f]
# 选项-e显示出所有进程
# 选项-f以完全格式化的形式展示信息关闭进程
kill [-9] 进程ID
# 选项-9表示强制关闭进程,不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制主机状态监控
查看系统资源占用
可以通过top命令查看CPU、内存使用情况,类似于Windows的任务管理器。默认每5秒刷新一次,按q或使用Ctrl + c退出
top命令内容详解
top [-p] [-d] [-c] [-n] [-b] [-i] [-u]
# 选项-p表示只显示某个进程的信息
# 选项-d表示设置刷新时间,默认5s
# 选项-c表示显示产生进程的完整命令,默认是进程名
# 选项-n表示指定刷新次数
# 选项-b表示以非交互式全屏模式运行
# 选项-i表示不显示任何闲置或无用进程
# 选项-u表示查找特定用户启动的进程第一行
top:命令名称08:24:44:当前系统时间ip 57 min:启动了57分钟3 users:三个用户登录load:1、5、15分钟负载第二行
Tasks:236个进程1 running:1个子进程在运行235 sleeping:235个进程睡眠0 stopped:0个停止进程0 zombie:0个僵尸进程第三行
%Cpu(s):CPU使用率us:用户CPU使用率sy:系统CPU使用率ni:高优先级进程占用CPU时间百分比id:空闲CPU率wa:IO等待CPU占用率hi:CPU硬件中断率si:CPU软件中断率st:强制等待CPU占用率第四、五行
Kid Mem:物理内存Kib Swap:虚拟内存(交换空间)total:总量free:空闲used:使用buff/cache:buff和cache占用PID:进程idUSER:进程所属用户PR:进程优先级,越小越高NI:负值表示高优先级,正值表示低优先级VIRT:进程使用的虚拟内存 单位kbRES:进程使用的物理内存 单位kbSHR:进程使用的共享内存 单位kbS:进程状态(S:休眠 R:运行 Z:僵死状态 N:负数优先级 I:空闲状态)%CPU:进程占用CPU率%MEM:进程占用内存率TIME+:进程使用CPU时间总计,单位10毫秒COMMAND:进程的命令或名称或程序文件路径
磁盘使用信息监控
df [-h]
# 选项-h表示以更加人性化的单位显示
iostat [-x] [num] [num2]
# 选项-x表示显示更多信息
# 选项num表示刷新间隔
# 选项num2表示刷新次数网络状态监控
sar [-n] [DEV] [num1] [num2]
# 选项-n表示查看网络 DEV表示查看网络接口
# 选项num1表示刷新间隔 num2表示查看次数环境变量
环境变量是操作系统中在运行的时候记录一些关键性信息,用于辅助系统运行。环境变量是一种KV型结构
PATH
我们无论工作目录是什么,都能执行/usr/bin/cc这个程序,这个就是借助环境变量中PATH这个项目的值实现的
$符号
在linux系统中,$符号被用于取变量的值
自行设置环境变量
临时设置:export 变量名 = 变量值
永久生效:针对当前用户生效配置在当前用户的~/.bashrc文件中,针对所有用户生效配置在系统的/etc/profile文件中
上传、下载
sudo yum -y install lrzsz
# 下载
sz 文件名压缩、解压
压缩
linux常用的两种压缩格式为:
.tar,称之为tarball归档文件,即简单的将文件组装到一个.tar文件内,并没有太多文件体积的减少,仅仅是简单的封装.gz,也常见为.tar,.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩或的体积
tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数n
# -c 创建压缩文件,用于压缩模式
# -v 显示压缩、解压过程,用于查看进度
# -x 解压模式
# -f 要创建的文件或要解压的文件,-f选项必须在所有选项中位置处于最后一个
# -z gzip模式,不使用-z就是普通的tarball模式
# -C 选择解压的目的地,用于解压模式
# 常用组合
tar -cvf test.tar 1.txt 2.txt 3.txt
# 将1.txt 2.txt 3.txt压缩到test.tar文件内
tar -zcvf test.tar.gz
-z选项如果使用的话,一般处于选项位第一个
-f选项,必须在选项位的最后一个