Linux基础入门
2023-03-31 17:36:07 25 举报
AI智能生成
Linux学习笔记
作者其他创作
大纲/内容
文件和目录管理
常见的命令
文件及目录操作
切换目录 【cd 命令】
扩展
路径
相对路径
绝对路径
在 Linux和Unix系统中一切由根开始
cd /
表示根(目录)
cd ~
表示家(目录)
cd .
表示当前(目录)
cd ..
表示当前(目录)上一层
cd -
表示上一次进入的目录
查看目录 【ls 命令】
扩展
可见
正常的/直接能看到得
隐藏
配置
.ssh .bashrc .bash_profile 防止误删除 防止篡改
隐藏文件
ls -l
以详细信息的方式显示目录的可见内容
ls -a
想查看所有文件(可见和隐藏) all 所有
ls -al 或 ls -la
想查看所有文件(可见和隐藏) all 所有 list 一般用于查看隐藏文件
创建目录(一个或多个) 【mkdir 命令】
扩展
标识符
1、目录 文件 函数名 变量名称 合法的标识符
合法的标识符
1、只能是字母或下划线开头
2、尽量不要出现中文(支持中文)
3、简单 易用 可读性高 高效 PRO
mkdir -p
逐层得去创建目录
mkdir -p day01/images
输出信息 【echo 命令】
输出重定向
>
覆盖得方式写入
>>
追加得方式写入
显示当前目录 【pwd 命令】
创建链接文件 【ln 命令】
创建空文件 【touch 命令】
文件名.扩展名
复制文件 【cp 命令】
例子
复制文件或目录
cp a.txt aa.txt
复制一个目录下面得所有内容
cp -r day04 day05
移动或重命名【mv 命令】
【作用】
1、当前目录下操作 重命名
2.相同/不同 移动文件或目录
删除文件【rm 命令】
删除空目录 【rmdir 命令】
树形结构显示目录【tree 命令】
需要安装tree包
yum install tree
文本内容
打印文件到命令行(查看文件)
cat 命令
【作用】查看文件内容 从文件的第一行开始显示
高级用法
cat>a.txt<<EOF
tac 命令
【作用】 查看文件内容 从文件的最后一行开始显示
分页显示文本内容
more 命令
【作用】分页查看文件内容 从一页开始
less 命令
【作用】分页查看文件内容 从最后一页开始
显示文件头、尾内容
head 命令
【作用】从文件的头部内容开始查看
tail 命令
【作用】从文件的尾部内容开始查看
tail -n
从文件的尾部内容开始查看 查多少行
tail -f
实时查看
例子
tail -n 200 -f xxx.log
在文本文件中查找某个字符串
grep 命令
统计文本中行数、字数、字符数
wc 命令
查看文件内容 带行号显示
nl 命令
文件及目录查找
file 命令
【作用】 可以查看一个文件的文件类型是什么
【实例】a.txt 以后写脚本的时候用的到
which 命令
【作用】
1、显示命令的全路径
2、我们可以使用该命令查找命令所在的目录(pwd)路径
3、用于配置在全局的变量或环境变量的时候使用 例如: /etc/profile $PATH
4、默认是在$PATH 系统PATH 环境变量记载了路径的配置文件信息
【实例】which rm
【参数】
-a
将遍历所有的PATH路径,输出所有的匹配项
whereis 命令
【作用】显示命令以及相关文件的全路径
【参数】
-b 定位指定的命令的可执行文件
-s 定义源码文件
-m man帮助文件(文档)的路径
【例子】
locate 命令
【作用】快速的定位文件的路径
Linux 系统中mlocate.db
保存文件名以及对应的路径信息
查询的是数据库,不是去递归磁盘目录
能够快速的得到结果
【安装】
查看是否安装locate
yum list |grep locate
安装 mlocate
yum install -y mlocate.x86_64
更新数据库
updatedb
【参数】
-c 不显示内容只显示行数
-i 匹配的时候忽略大小写
-r 支持正则
【特性】
非实时搜索
1、依赖是程序实现构建的这个索引
2、文件系统上查找符合条件的文件
3、/var/lib/mlocate/mlocate.db
4、updatedb命令更新索引数据库
手动更新方案
5、搜索速度很快,但是如果文件经常发生变化,就不适用了
6、搜索出来的文件以绝对路径显示
7、默认基于模糊查询
【总结】
locate 【参数】 内容
find 命令
【作用】
查找目录下的文件
同时可以调用其他的命令执行相应的操作
还可以结合通配符等一些使用
Shell中有三剑客 结合使用
通过管道符一起使用
【特性】
实时搜索
1、通过指定的路径完成文件的查找
2、搜索的速度很慢,逐合用于查找非系统文件,就是实时查找
3、设置搜索用户具备读取和执行权限的目录
4、默认是精确查询
【参数】
-name
按照文件名的方式进行查找文件,这里高级用法 结合通配符 * ? [] 等特殊的字符
-type
指定文件的类型
- 普通文件
l 链接文件
d 目录
b 块设备
c 字符设备
s 套接字
p 管道
-perm
按照文件的权限查找
!
反向查找
-maxdepth
指定查找的深度 3
-size
按照文件大小的方式查找文件
M
G
c
k
-empty
空文件
-empty type -d
空目录
-atime
按照指定的访问时间来查找 单位是 天
-ctime
按照指定的状态改变时间来查找 单位是 天
-mtime
按照指定的更改时间来查找 单位是 天
-inum
-link
-user
属主
-uid
属主UID为xxx
-nouser
没有属主
-group
属组
-gid
属组gid
【进阶】
条件运算符
与 或 非
-a
-o
-not
!
排除目录
处理动作
EXPRESSION
【生产案例】
1、查找两天内被访问的文件 当前目录下
find . atime -2
2、查找五天内被修改的文件,当前目录下
find . atime -5
3、查找五天内被修改的文件 /var/log
find /var/log -mtime -5
4、查找五天内被修改的文件 /var/log,指定扩展名为 *.log
find /var/log -mtime -5 -name '*.log'
5、查找五天内被修改的文件 /var/log ,指定权限是 644
find /var/log -mtime -5 -perm 644
6、查找当前目录下所有子目录
find . -type d
7、查找当前目录下所有的子目录,指定查找的层数
find . -type d -maxdepth 3
8、查找当前目录下所有类型的文件
find . !-type d
9、查找当前目录下查找大小200M
find . size +200M
vi/vim文本编辑
作用: 创建并编辑文件
【安装】
yum install -y vim
vim 文本编辑器
模式转换
命令模式(默认模式)
编辑模式(插入模式)
底行模式(命令行模式)
文本查找
底行模式
命令行模式
要搜索的内容
/keyword
文本替换
语法
s/old/new
只替换光标所在行,从第一个字符开始查找关键字第一次出现的位置
s/old/new/g
只替换光标所在行,从第一个字符开始查找关键字所有出现的位置
%s/old/new/g
替换整个文档中关键字的内容
基本操作
进入编辑模式 插入 i
退出编辑模式 sec
保存:后面输入 w
退出:后面输入 q
不保存退出:后面输入 q!
显示行号 set number
查找关键字 /xxx 按 n跳到下一个 ,shift+n 上一个
复制光标所在行,并粘贴 yyp
h j k l 对应上下左右移动
系统目录结构
是一个倒着的树形结构
一切由根(/)开始
yum install -y tree
用树形结构显示目录的内容
tree -L 1 或 tree -L 2
用树形结构显示目录的内容
tree -L 1 或 tree -L 2
/
/bin
/sbin
/root
/home
/boot
/dev
/proc
/media
/lib
/lib64
/sys
/var
/tmp
/usr
/opt
/etc
配置文件
/run
等
重要的目录和文件
/etc/sysconfig/network-scripts
网卡配置文件的目录
/etc/sysconfig/network-scripts/ifcfg-ens33
修改网络后需要重新启动网络
systemctl restart network
systemctl restart network
/etc/fstab
fs
file system
tab
table
/etc/hostname
修改主机名
hostnamectl set-hostname xxxx
/etc/hosts
查看本地DNS域名解析
/etc/resolv.conf
DNS 信息
/etc/profile
配置环境变量
/etc/shells
/etc/bashrc
Bash全局变量
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
/etc/redhat-release
查看内核版本信息
/etc/init.d
内核调优,存放系统管理的命名和初始化 进程
/etc/inittab
运行级别
/etc/sudoers
root用户权限
/etc/shadow
保存加密后的密码
/etc/yum.repos.d
yum 软件仓库源
/usr/local
/opt
C:\Program Files
/etc/passwd
账号信息的文件
/etc/group
设定用户组合相关信息
/usr/src
/etc/sysctl.conf
内核配置文件
内核转发
内核随机端口范围
/usr/log
格式
日志文件
文件类型
作用
例子
messages
文本文件
系统级日志文件
secure
文本文件
安全日志文件
dmesg
文本文件
硬件信息加载情况日志文件
cron
文本文件
定时任务日志文件
wtmp
二进制文件
记录登陆者信息的文件
lastlog
进制文件
记录用户近期登陆的情况
/proc
概念: Linux 系统中重要的一个文件,内核信息和进程方面的信息
目录
/proc/cpuinfo
/proc/meminfo
/proc/loadavg
/proc/mounts
/var
/var/www/html
/bin
存储用户命令
/sbin
存放系统命令
/home
用户的家目录/主目录
/root
root用户家目录
/boot
启动信息
/temp
临时目录
定时任务的目录
crontab
概念: 定时任务/计划任务
crontab 目录
cron.d
cron.daily
cron.hourly
cron.monthly
cron.weekly
字符集、特殊符号、通配符
字符集
查看字符集
echo $LANG
$LANG
$
取出变量的值
LANG
合法的标识符/变量名/全大写(系统变量)
设置字符集
export LANG=zn_CH.UTF-8
CentOS 系统如何修改字符集
C6
修改配置文件: /etc/sysconfig/i18
C7
方式一:修改配置文件:/etc/locale.conf
方式二: localectl set-locale LANG=en_US.YTF-8
生效:source /etc/locale.conf
【企业级生产案例】
终端乱码问题
分析
Windows 下 XShell
Linux/Unix
特殊符号
表示位置
/
Linux/Unix 根目录
~
Linux/Unix 用户主目录
.
Linux/Unix 所在当前目录
..
Linux/Unix 所在当前目录上一层目录
-
Linux/Unix 根目录
引号相关
' '
单引号
所见即所得
字符串常量
'Hello World'
echo '被引起来的内容'
结果显示的就是单引号引起来的内容
" "
双引号
所见非所得
echo "$LANG"
` `
反引号
命令替换
\
转义字符
用在一些命令、变量、路径等
重定向符
重定向输出
>
标准输出重定向 覆盖的方式写入到文件
>>
标准输出重定向 追加的方式写入到文件
重定向输入
<
用来引导命令从哪里读取数据
<<
cat 命令
【生产级案例】
当系统无法上网/vi vim文本编辑器没有/修改yum源
【企业实战案例】
2>&1
分析
标准输入
0
标准输出
1
错误输出
2
意义
同时把错误信息或正确的信息都记录到文件
管道符
|
含义:把前面一个命令的结果通过管道符传递给后面的命令
注意:管道默认传递的是文字符号
【案例】
ps -ef|grep tomcat
cat a.txt |wc -l
查看a文件 把结果统计行数
grep -r "close" /home/* | more
在home目录下所有文件中查找,包括close 的文件,并分页输出
管道
IPC进程间通信
有名管道
匿名管道
其他字符
#
出现的位置
Shell 终端CLI
# 表示你是root
nginx/ 等
# 这是一个端口
配置文件或Shell 表示注释
what
编程语言中的一种解释说明,被注释内容在程序中不起作用
why?
代码的/配置文件的解释说明作用
How?
# 标记以后就不起作用
$
出现的位置
Shell终端CLI
$ 标识你是一个普通用户
脚本或配置文件中 $LANG 取出变量中的内容
&
一般在脚本中
在命令行中 & ,让命令或在后台运行
openvpn --config xxx.xxx.xxx.xxx.ovpn &
;
可以表示一个表达式结束,一个语句结束
连续不同命令的分隔符
!
强制
vim文本编辑器
w!
q!
查找
!ls
上一次ls开头的命令并执行
通配符
作用 :就是一些特殊的字符,来实现某些特定的特殊的功能精确查找,缩小范围
*
匹配任意字符
【例子】
day01
a.txt
b.txt
c.txt
d.txt
....txt
【扩展】
文件名称.扩展名
*.txt
*.doc
*.map3
*.conf
*.c
等
*.*
任意名称.任意类型
【例子】
mv *.* /tmp
/*
目录下的所有内容
【例子】
rm -rf /*
使用需谨慎
?
匹配字符,有且仅有一个字符
【例子】
ls ???
[]
匹配的字符集合
字符集合
[abcd]
匹配abcd中任何一个字符,abcd可以是连续的也可以不连续的
[a-z]
匹配a-z中任何一个字符,a-z可以是连续的也可以不连续的
[0-9]
匹配0-9中任何一个字符,0-*可以是连续的也可以不连续的
[!abcd]
匹配不包括abcd中任何一个字符。
[!a-d]
匹配不包括a-d中任何一个字符。
[^a-b]
匹配不包括a-d中任何一个字符。
{}
匹配文件
【例子】
touch {a..z}.txt
打包压缩
常见的压缩引擎
*.tar
特点
图片类的文件进行打包
源文件/源代码 *.h *.c *.cpp
*.tar.gz
使用
gzip 工具进行压缩
特点
GNU
快
语法
方式一: tar
方式二:直接使用gzip工具
格式
gzip 【选项参数】
选项参数
-d
解压缩文件
-v
显示执行过程
-l
列出压缩文件执行过程
-c
将内容输出到标准输出
不改变原有文件
-r
对目录下所有文件递归进行压缩的操作
-t
测试,检查压缩文件是否完整的
-<数字>
压缩率,手动设置1-9,数字越大压缩率越高,默认的压缩率 数字 6
*.gz
特点:大文件压缩
文件分割
split
-b
表示设置每一个分割单元/块的大小
200M(可以自定义)
-d
指定分割后的后缀是数字形式表示
-a
来设置分割序列的长度。默认长度2个 00 01 02
用途
做日志分割
视频、视频、音频、大于4G单个文件的分割
【企业真实案例】
tar zcvf - 复仇者联盟4.mkv | split -b 200M -d -a 2 - 复仇者联盟4.mkv.tar.gz.
*.tgz
*.bz2
*.tar.bz2
*.Z
使用
压缩
compress bj2.txt
bj2.txt.Z
解压
uncompress bj2.txt
*.tar.Z
*.zip
使用
压缩
解压
unzip xxx.zip
安装
yum install -y unzip
*.rar
tar 命令
简单的说就是一个打包的命令
作用
压缩
Linux系统中可以将多个文件打包一起形成一个整体。
节省时间
便于分类管理
备份数据
解压
Linux系统中可以将一个文件解包成若干个普通文件。
恢复文件
查看使用
tar 语法
格式
tar 【可选项】【文件】
可选项
-z
通过gzip压缩或解压
-c
创建一个新的压缩包
-v
显示箱体的tar命令执行过程
-f
指定压缩文件的名称
--exclude=PATH
打包的时候想排除不需要处理的文件或目录
-x
解开tar格式包
-C
指定解压的目录路径
-h
打包软连接文件指向的源文件
-t
不解压的情况下查看压缩包内容
-p
保持文件属性不变(原有属性)
-P
危险 以绝对路径打包
-N
用于增量打包备份(仅打包指定日期内新增的文件)
-j
通过bz2压缩或解压
-Z
compress
-r
向已经存在的压缩包增加文件
总结
压缩
tar zcvf
tar zcf
tar jcvf
使用bzip2 打包
解压
tar zxvf
tar zxf
tar jxvf
使用bzip2 解压
查看
tar ztvf
tar ztf
【生产案例】
1.网站整站备份
/var/www/html
index.html
index.css
index.js
font
images
static
index.php
tar -zcvf html-2023-03-30.gz ./html
2.生产炸弹
在不解压的情况下查看
tar -ztvf html-2023-03-30.tar.gz ./html
3.打包时排除文件
tar -zcvf html-2023-03-30.tar.gz ./html exclude=html/index.js
4.打包时排除目录
tar -zcvf html-2023-03-30.tar.gz ./html exclude=html
5.打包软连接
tar zcvfh test.tar.gz ./rc.local
6.打包普通文件
tar zcvf 2023-03-30-etc.tar.gz `find /etc -type f`
文件属性和权限管理
文件属性
文件类型
- 普通文件
l 链接文件
d 目录
b 块设备
c 字符设备
s 套接字
p 管道
文件属性
属主
属组
其他
文件扩展名
.conf
.cnf
.sh
.rpm
.tar.gz
.tar
.taz
.zip
.log
等
权限管理
chmod
【作用】修改文件权限(RWX)
【可选项】
+ 增加权限
- 去除权限
【例子】
chmod + x install.sh 给执行权限
chomd 755 install.sh 给执行权限
chomd 600 密码文件的时候或要注意
rsync
chomd u=rwx,g=rwx,o=rwx install.sh 给执行权限
chomd 777 install.sh 给执行权限
【总结】
根据需求谨慎的使用文件属性的权限问题,不要上来就给777
创建文件默认权限 644
chown
【作用】用于修改文件或者目录的拥有者,这样的话操作起来比较安全。例如ES
【可选参数】
-R
chgrp
【作用】用于修改文件或者目录的拥有者,修改用户组
文件权限
默认权限
普通权限
第一个字符 文件类型
第二个字符开始 第十个字符结束
属主
属组
其他
一般权限
隐藏权限
设置隐藏权限
chattr
+ 在原有的基础上增加权限
- 在原有的基础上 减少权限
i root权限,某些重要的内容不让你修改。/etc/shadow
仅仅是对于二进制文件/可执行
a 允许追加写入,不能删除
查看隐藏权限
lsattr
特殊权限
/etc/sudoers
ACL权限
【作用】文件的ACL权限 提供了所有者(属主 属组 其他人)的读、写、执行权限之外的特殊权限控制。(访问控制列表)
设置对象
目录
文件
受益的对象
用户
群组
群组中的成员
查看ACL的权限
getfacl
设置ACL的权限
setfacl
mask
最大有效权限(rwx)
删除ACL的权限
删除指定用户的ACL权限
setfacl -x u:用户名 文件名
删除指定用户组的ACL权限
setfacl -x g:用户名 文件名
删除其他用户组的ACL权限
递归ACL的权限
目录
-R
setfacl -m u:用户名:权限 -R 文件名
默认ACL的权限
setfacl -m d:u:用户名:权限 文件名
用户和群组管理
多用户操作系统
超级用户
拥有最高权限
能够登陆系统,但是管理员用户不但可以操作自己的目录内容,也可以操作别人的。
UID 0
普通用户
普通用户也可以登陆系统,但是只能操作自己的目录和内容
UID
C6
500-65535
C7
大于1000
虚拟用户
傀儡用户
无法直接创建,系统自身拥有,不具有登陆系统的能力
UID
C6
1-499
C7
1-999
UID 和 GID
UID 身份证号
GID 户口本号
通过 id 命令 可以查看用户信息
通过 su命令 切换系统中不同的用户
通过 sudo命令 普通用户临时提权操作
sudo es
通过 whoami命令 显示当前用户
whoami
重要的目录
/etc/passwd
root:x:0:0:root:/root:/bin/bash
冒号分割成7个字段
root
用户名
x
有密码
0
UID
0
GID
root
说明信息
/root
目录
/bin/bash
默认Shell 环境
/etc/group
属组信息
/etc/shadow
加密后的密码
/etc/skel
创建新用户时的shell 模板
用户管理命令
修改密码
passwd
要求:
必须有管理员权限
用户密码需要有规则
密码不宜尝试见使用
默认修改root密码
英文大小写加数字特殊字符 8位以上
中文密码
【例子】
passwd azkaban
新增用户
useradd
可选参数
-d
指定用户登入时的起始目录
useradd -d /home/git -m git username
-s
指定用户登入后所使用的Shell
-m
自动建立用户的登入目录
-c
加上备注文字。备注文字会保存在passwd 的备注栏位中。
-D
变更预设值
-e
指定账号的有效期限
-f
指定在密码过期后多少天即关闭该账号
-g
指定用户所属的群组
例:useradd gitlab -g git uasename
-G
指定用户所属的附加群组
-M
不要自动建立用户的登入目录
-n
取消建立以用户名称为名的群组
-r
建立系统账号
-u
指定用户ID
删除用户
userdel
可选参数
-r 删除用户同时删除家目录
修改用户
usermod
可选参数
-r 删除的时候连同目录一起删除
用户组管理名
新增用户组
groupadd
可选参数
-g
删除用户组
groupdel
可选参数
-g
修改用户组
groupmod
【企业级生产案例】
1、 -bash-4.2$
什么原因导致的,如何去修复?
故障
用户目录配置文件缺失导致的
复现
创建一个新的用户,普通用户
用户目录配置文件删除
su -test
-bash-4.2$
解决
CentOS 系统创建一个用户操作系统到底执行什么操作?
创建用户的主目录的时候
/home/test
/etc/skel
cp /etc/skel/.bash* /home/test
2.用户改密码
1.交互式密码
root 用户权限
2. 非交互式设置密码
通过使用脚本改密码
passwd --stdin 用户名
stdin (标准输入缓冲区)
用户名
结合重定向
跟内容
stdout
标准输出
stderr
案例
echo 123456|passwd --stdin sec
passwd --stdin sec<pass
风险
3.密码策略
1、用户的密码要足够的复杂
6位 至少
8位
8个字符
英文字母
大写
小写
数字
特殊字符
2、周期性的修改你的管理员密码
3天左右
3、项目架构的鉴权方式
LDAP
Windows Server AD
4、多重身份验证
SMS
Email
Google Authenticator
4、带有安全思想
useradd tomcat -s /sbin/nologin -M
5、suid
例如: 想让azkaban用户具有特殊的权限,less可以查看到/etc/shadow文件中的内容。
/etc/shadow
azkaban的普通用户
passwd
root root
【分析】
chmod u+s /usr/bin/less
chmod 4755 /usr/bin/less
只是使用了这个less的命令,more cat vim等都行
【充分必要条件】
1、只有是一个可执行文件(2进制)
2、所有者必须对你想要设置suid的文件具有执行权限
3、命令在执行过程中,其他用户获取了(程序 可执行文件)所有者的身份
4、具有时间限制,执行完毕就消失
【验证】
ps -axu | grep less
root 用户
less /etc/shadow
普通用户
【警告】
惭怍有风险,使用需谨慎
6、sgid
7、sbin
8、防删
某同学公司的服务器中了病毒(恶意程序),可执行的脚本update.py,用root账号都无法删除。ps -ef l grep xxx,pkill -9 命今杀掉进程。后台守护进程返现程序关闭 自动拉起。可以删除的文件,删除以后自动通过网络自动下载下拉
定时任务/计划任务
防止自动拉起
防火墙
封杀指定IP地址端,30分钟/永久封杀
进程管理
杀死进程
权限管理
update.py
【分析】
chattr +i
update.py
定时任务技术
【收获】
chattr +i
防止删库跑路 rm -rf
重要配置文件
【应急】
1、封杀IP地址
2、杀掉可疑进程
3、定时任务
4、用户管理
5、文件目录
9、日志文件允许写入,不允许删除
日志文件平时我们可以给定 +a 这样的隐藏权限,日志允许你写入,但是不允许你删除。
chattr +a log.txt
磁盘管理
网络管理
进程管理
其他管理
0 条评论
下一页