文章目录:
学习中的一些整理内容~~~~~~
Linux:
Linux是一个可以自由发布的类UNIX内核实现,它是一个操作系统的底层核心。Linux是由芬兰赫尔辛基大学的Linus开发,期间得到了网上广大UNIX程序员的帮助。它最初是受其教授的Minix(一个小型的类UNIX系统)启发而开发的程序,纯属个人的爱好,但是后来它自身逐步发展成为一个完整的系统。
Linux特点
多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面,出色的速度性能开源。
Centos:
主流:目前的Linux操作系统主要应用于生产环境,主流企业级Linux系统仍旧是RedHat或者CentOS
免费:RedHat 和CentOS差别不大,基于Red Hat Linux 提供的可自由使用源代码的企业CentOS是一个级Linux发行版本
更新方便:CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RedHat 那样需要花钱购买支持服务!
Linux软件安装:
- rpm安装: -ivhfilename -prefix
- rpm卸载:-e PACKAGE_NAME
qa查询已安装的所有包, -q PACKAGE_NAME 查询指定的包是否安装
Linux文件系统:没有盘符
Linux中不同种类数据存在不同目录
- bin (binaries)存放二进制可执行文件,用户命令
- boot 存放系统引导时使用的文件 如内核文件、 启动引导程序grub等
- dev (devices)用于存放设备文件
- etc (etcetera)存放系统配置文件
- home 存放用户文件的根目录
- lib (library)库文件 系统调用的函数保存库
- media 挂载目录 移动设备(系统建议用来挂在媒体设备,如软盘光盘)
- mnt (mount)挂载目录 额外的临时文件系统
- opt 可选目录 第三方安装的软件保存位置
- proc 伪文件系统 系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
- root 超级用户目录
- sbin (super user binaries)存放二进制可执行文件,系统管理员使用的系统管理程序(管理相关)
- srv 服务数据目录 目录存放一些服务启动之后需要提取的数据
- sys 伪文件系统 跟硬件设备相关的属性映射文件
- tmp (temporary)用于存放各种临时文件
- usr (unix shared resources)用于存放共享的系统资源
- var (variable)用于存放运行时需要改变数据的文件
文件系统相关命令:
文件类型 rwx 连接数 所属的组 组 文件大小 日期 文件名称
- rw- r-- r-- . 1 root root 28 Aug 26 10:30 a
- rw- --- --- . 1 root root 1472 Aug 25 18:40 anaconda-ks.cfg
rwx 分三部分 主 组 其他
1文件类型~
- “-”表示普通文件;
- “d”表示目录;
- “b”表示块设备文件;
- “c”表示字符设备文件;
- “l”表示符号链接文件;
- “p”表示命令管理文件;
- “s”表示套接字文件;
- “L”表示软连接 类似windows下的快捷方式
2.文件属性:9位 3位一组 3组r(Read读取权限)w(Write写入权限)x(eXecute执行权限)
3.文件的连接次数4.文件的属主5.文件的属组6.文件的大小: 单位是字节
7.时间戳: 最近一次被修改的时间
命令:
内部命令shell自带的命令 外部命令 不是shell自带的由用户安装的
- df -h :显示磁盘显示情况 df+du 使用
- du :显示文件系统的使用情况 (du abc/显示abc文件夹 du -h abc/ 显示相当于加上单位)
- ls : 显示当前路径下的文件 有很多选项 man ls 查看 (ls /etc/ 显示etc下的文件)
ls -a :显示详细信息 ls -l 以长链表的格式展示类似与LL
- cd 切换到某个目录下 cd~回到根目录 cd..上一级
- pwd 查看当前目录
- file 查看乱码类型
- type 查看是内部还是外部命令
- whereis 查看命令的位置
- mkdir 创建文件夹 创建多个 mkdir aa/ad 空格 aa/bd 简写 mkdir a/{1,2,3}dd 创建1dd,2dd,3dd
[root@xl ~]# mkdir aa/adirr/as
mkdir: cannot create directory ‘aa/adirr/as’: No such file or directory
[root@xl ~]# mkdir -p aa/adirr/as
[root@xl ~]# //目录下创建文件夹/文件加/文件夹 -p
- cp 拷贝 cp /a/b/ 拷贝文件到当前目录 拷贝文件夹 cp -r
- mv 移动 mv b a/ b移动到a
- rm 删除 rm a 回车 yes确定删除 rm-f 直接删除 删除文件夹 rm -r -f
- ln 连接 ln ad abc 把adc 硬链接到 ad 同一id号 修改一个全改 删除不影响 l n -s 软连接 删除后 不好使
- stat
[root@xl ~]# stat aa
File: ‘aa’ //文件名称
Size: 19 //大小 Blocks: 0 //所占的块 IO Block: 4096 directory
Device: fd00h/64768d Inode: 100696928 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2021-08-26 13:16:24.640417531 +0800 //访问时间
Modify: 2021-08-26 13:18:23.286412703 +0800 //修饰
Change: 2021-08-26 13:18:23.286412703 +0800 //改变 改变文件的元数据
- touch ~摸一下 touch aa 时间戳 时间都变为当前时间 touch 也可以创建新文件
shell? bsh shell程序 操作Linux内核
客户端通过用户名和密码连接 bash shell ,根据空格来切割字符串 把第一个位置认为是命令,其他是命令的参数。判断命令是内部还是外部的type。如果是外部命令需要去寻找这个命令的可执行文件。
[root@xl ~]# abc abc
-bash: abc: command not found //按照空格来切
执行外部命令效率会很慢吗? PATH =一堆目录(外部命令来PATH 来查找) hash优化(K-V)
[root@xl ~]# echo $PATH //外部命令到这个目录下来寻找
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xl ~]# hash //hash 中存储 刚才执行的命令 直接去hash中找
hits command //降低查询时间
2 /usr/bin/vim
3 /usr/bin/ps
1 /usr/bin/ping
5 /usr/bin/man
hash -r //把hash清空
[root@xl ~]# echo "123" //相当于system.out.println
123
文本操作相关命令:
- cat: 查看文件内容
- more :可以分页的形式来显示 按空格一页 回车一行 回看只能通过滑轮
- less: 可以往前推 B前翻页 less文件内容读出之后放到内存中 不要读过大的
- head: 默认打印前10行 head -5 打印前5行 tail -5 最后五行 tail -f 有增量数据就打印出
- head tail 加上管道可以 实现打印第N行的数据 head -5 a | tail -1
管道: cat a | head -3 head 是可以接收的 打印前3 ? | ? echo "/" | xargs ls -l 直接 echo "/" | ls -l 是不好用的需要用 xargs 来 接收前边的输出流 自定拼接到后边
其他文本处理命令
- cut:显示切割的行数据 ,-f 选择显示的列 -s 不显示没有分割符的行 -d 自定义分隔符 cut -d ‘ ’ -f (显示的列) 文件名
- sort:n 按数值来排序 r 倒序 t 自定义分隔符 k 选择排序的列 u 合并相同行 f 忽略大小写 sort -t ‘ ’ k1 文件 sort -t ‘ ’ k1 -u -f 文件 sort -t ‘ ’ k2 -n 文件 sort -t ‘ ’ k2 -n -r 文件
- wc:该命令统计给定文件中的字节数、字数、行数 -c 字节数 -w 统计字数 -l 统计行数 可以与管道配合使用 cat 文件 | wc - (cwl)
压缩文件操作命令
命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件
其中:
- z:调用gzip压缩命令进行压缩
- c:打包文件
- v:显示运行过程
- f:指定文件名
命令:tar [-xvf] 压缩文件
其中:x:代表解压
tar -xvf xxx.tar.gz -C /usr------C代表指定解压的位置
学Linux要学会使用查看命令帮助文档
man 命令 help命令 :一般内部用help 外部用man
如果 没有man命令 使用 yum install man 去安装
[root@xl ~]# man yum
yum(8) yum(8)
NAME
yum - Yellowdog Updater Modified
SYNOPSIS
yum [options] [command] [package ...]
DESCRIPTION
yum is an interactive, rpm based, package manager. It can automatically perform system updates, including
dependency analysis and obsolete processing based on "repository" metadata. It can also perform installation
of new packages, removal of old packages and perform queries on the installed and/or available packages among
many other commands/services (see below). yum is similar to other high level package managers like apt-get and
smart.
While there are some graphical interfaces directly to the yum code, more recent graphical interface develop‐
ment is happening with PackageKit and the gnome-packagekit application.
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
Manual page yum(8) line 1 (press h for help or q to quit)
//回车 空格 继续查看 q退出
[root@xl ~]# help cd //也可以查看帮助
bash shell 定义变量:
[root@xl ~]# a=1 //定义a
[root@xl ~]# echo $a //打印a
1
[root@xl ~]# a=baby //变量重新赋值
[root@xl ~]# echo $a
baby
[root@xl ~]# arr=(1,2,3,4) //定义集合 错误方法
[root@xl ~]# echo $arr
1,2,3,4
[root@xl ~]# echo $arr[1]
1,2,3,4[1]
[root@xl ~]# arr1 = (1 2 3) //与 = 不要留空格
-bash: syntax error near unexpected token `('
[root@xl ~]# arr1=(1 2 3) //正确定义
[root@xl ~]# echo $arr1 //打印第一个
1
[root@xl ~]# echo ${arr1[1]}
2
[root@xl ~]# echo ${arr1[2]}
3
[root@xl ~]# echo ~~$a~~ //前后 追加
~~baby~~
[root@xl ~]# echo $$ //当前 bash shell 进程号
7741
[root@xl ~]# ps -ef //当前所启动的进程 进程号
[root@xl ~]# vim //文本编辑 类似 windows 下的记事本 他会启动一个进程
[root@xl ~]# kill -9 ? //加上进程号 干掉进程
文本编辑器VI:
类似与windows下的记事本。
VI的基本概念:
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 命令行模式command mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
- 插入模式(Insert mode)有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
- 末行模式(last line mode)将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。
命令行模式(编辑模式):
vi+ 数字 +文件名 : 在打开文件的时候直接定位到 哪一行
光标移动: h:左 j:下 k:上 l : 右
单词:
- w:移到下一个单词的词首
- e:跳至当前或下一个单词的词尾
- b:跳至当前或前一个单词的词尾
行内:
- 0:行首
- ^:行首第一个非空白字符
- $:行尾
行间:
- G:最后一行
- gg:第一行
- ?G:第? 行
翻屏:
ctrl f 下 b上
删除替换单个字符:
- x:删除光标位置字符
- ?x:删除光标开始?个字符
- r:替换光标位置字符
删除命令:
- dd:删除一行
- dw:删除一个单词
复制粘贴:
- yw:复制一个单词
- yy:复制光标所在一行
- P:光标上方粘贴
- p:粘贴
撤销
- u
- ctrl +r 恢复
- 点 重复上一步操作
vi插入模式(输入模式)
进入输入模式:
- a:当前光标所在字符后
- i :在前光标所在字符前
- o:在当前光标所在行的下一行
- O:在当前行 把当前数据踢到下行
- A:当前行尾
退出输入模式: esc
末行模式
- :q :退出没有动过文件
- :w :保存不退出
- :wq :保存退出 shift +zz
- :q! :不保存并退出
- :w! :强行保存
末行模式操作:
1.Set:
- set number : set nu(简写) 显示 行号
- set nonumber :隐藏行号
- set readonly:只读模式 只能读不能写
2.查找 /
- / : /查找内容 n往下走 N往上
- ?:?查找内容 n 往上走 N往下
3.执行命令:
4.查找替换: s
- s/查找内容/替换内容 改变光标哪一行 第一个
- s/查找内容/替换内容/g 改变光标行所有
- s/查找内容/替换内容/g i 忽略大小写
- .+? s/查找内容/替换内容/g i (点). 当前行 向下找 ?行
- %s/查找内容/替换内容/g i 全文替换 $末尾行
5.删除复制
- 0,$ d :全删除
- .,+nd: 删除当前+n行
- n,nd:删除 n-n行
- $-nd :删除倒数第n行
- n,ny :复制 n - n行数据 p粘贴
- 0,$y :复制所以数据
Sed 行编辑器
基本工作模式【sed 命令默认打印匹配到的内容到屏幕】:按照给定的脚本命令,按行读取文本中的内容,读取到pattern space空间中进行编辑操作,未完成的编辑操作放到hold space 空间中,pattern space 再处理其他行,再次处理编辑时,就会从hold space 读取到pattern space 空间中进行编辑,编辑完成后,进行输出
Sed 使用方法 :
sed [options] ‘Command’ file ...
sed 是每一行一行读 把读到的数据加载到 内存中 默认把内存中的数据显示一次
1.options 参数:
- -n:静默模式,不在默认显示模式空间中的内容(就是不显示内存中读取时)
- -i: 直接修改原文件
- -e SCRIPT -e SCRIPT :可以同时执行多个脚本
- -f /PATH/TO/SED_SCRIPT:
- -r:表示使用扩展正则表达式
2.Command参数
- d:删除符合条件的行
- p:显示符合条件的行
- a\string:在指定的行后面追加新行,内容为string
- \n:可以用于换行
- i\string:在指定的行前面添加新行,内容为string
- c:取代,c后面可以接字串
- r FILE:将指定的文件的内容添加到符合条件的行处
- w FILE:将地址指定的范围内的行另存至指定的文件中
- s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g:行内全局替换 .i:忽略字符大小写 .s///:s###,s@@@ () .\(\),\1,\2
练习 不加 -i 随便玩~~~
[root@xl ~]# cat a //查看a 文件 内容
hello dd
heleo gg
[root@xl ~]# sed -n "2p " a //显示第二行
heleo gg
[root@xl ~]# sed "3d" a //删除第三行 显示第一二行数据 不会对a文件进行修改
[root@xl ~]# sed -n "3d" a //删除第三行 不显示数据
[root@xl ~]# sed -i "3d" a //删除 修改原文件
[root@xl ~]# sed (-i) "a(i)GG" a //a 在指定行后 i在前 加-i 对原文件修改
hello dd
GG
heleo gg
GG
[root@xl ~]# sed "chaha" a //数据替换
haha
haha
[root@xl ~]# sed "s/\(ll\)/\(~mafan~\)/ " a
he(~mafan~)o dd //查找替换 s///
heleo gg // s/ 查找内容 /替换内容/
he(~mafan~)o mm
heleo jj
AWK 文本分析工具
awk:是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理。 awk是行处理器,相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。
awk的用法:
awk 参数 ' BEGIN{} // {action1;action2} ' END{} 文件名
- 支持自定义分隔符 -F
- 支持正则表达式
- 支持自定义变量
- 支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量使用
FILENAME awk浏览的文件名
FS 设置输入域分隔符
NF 浏览记录的域的个数 按照格式分割出多少
NR 已读的记录数 读多少条记录
FNR 浏览文件的记录数
OFS 输出域分隔符 默认空格
ORS 输出记录分隔符 默认换行符
RS 控制记录分隔符
- 支持函数
print split substr sub gsub
- 支持流程控制语局
if、while、do/while、for、break、continue
[root@xl ~]# cat a //查看a 内容
root:hello dd
user:nihao GG
bin:x:1:wa:haha
mail:a/ab/ddd
adm:x:3:adm:/var/adm
[root@xl ~]# awk -F ':' '{print $1}' a //awk -F 自定义分隔符 '{ }' 文件名
root //$1 显示分割出来的第一个字段
user
bin
mail
adm
[root@xl ~]# awk -F ':' 'BEGIN{print "begin~"}{print $1",,"}END{print "~~end"}' a
begin~ // 在首行 和尾行 添加
root,,
user,,
bin,,
mail,,
adm,,
~~end
[root@xl ~]# awk '/x/{print $0}' a //查找符合条件的行
bin:x:1:wa:haha // $0 整体打印
adm:x:3:adm:/var/adm
[root@xl ~]# awk -F ':' '{print NR "\t" NF "\t" $0}' a //NR 类似序号
1 2 root:hello dd //NF 以:每行切割出多少数据
2 2 user:nihao GG
3 5 bin:x:1:wa:haha
4 2 mail:a/ab/ddd
5 5 adm:x:3:adm:/var/adm
[root@xl ~]# cat test //统计1月工资 把0换成 employee 1换成manager
Tom 0 2020-12-11 car 5400
John 1 2021-01-15 bike 4000
vivi 1 2021-01-20 car 3000
Tom 0 2021-01-25 car 3700
John 1 2021-01-29 bike 3800
[root@xl ~]# awk '{split($3,data,"-");if(data[2]=="01"){name[$1]+=$5};
if($2=="0"){post[$1]="employee"}else{post[$1]="manager"}}
END{for(i in name)print i "\t"name[i] "\t" post[i] } ' test
vivi 3000 manager
Tom 3700 employee
John 7800 manager
// 把日期 按照-分割 得到01 月份 判断编号01 赋对应值
// 命令过长可以放在 vim中 对格式要求严格
//awk -f 文件名 文件名
[root@xl ~]# vim q
[root@xl ~]# awk -f q test
Linux中的正则表达式
1、什么是正则表达式(规则表达式)?
正则表达式几乎在所有的编程语言中都有涉及,学好正则表达式,对于建立编程思维有很大的作用。那么什么是正则表达式呢?
官方定义为:正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
2.正则表达式特定字符
Linux 中 使用 grep 条件 文件
匹配操作符
\ 转义符 | 用于将特殊符号含义的取消。 |
. | 匹配任意单个字符 |
[ ] [^] | 匹配中括号中写的任意一个字符 匹配除中括号的字符以外的任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
| | 连接操作符 |
(,) | 选择操作符 |
\<,\> | 确定边界(以什么开头什么结尾) |
限定 (重复操作) 符
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用的元字符
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
常用的反义字符
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
Linux中的用户和权限管理
Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。
Linux文件系统权限:
- R(读) 文件的内容可读取
- W(写)文件的内容可以改变,目录中任何文件可以创建或删除
- X(执行)文件可执行命令,该目录的内容可以被访问
一个目录必须具有X权限才可以被打开
useradd 用户名 :创建用户
userdel 用户名: 删除组 还要把对应文件删除 cd/var/spoll/mail cd/home
passwd 用户名 :修改用户的密码
groupadd 组名: 创建组
groupdel 组名: 删除组
# 管理员 $ 用户
usermod -G 组织 用户: 用户添加到组
id 用户 //显示用户信息 查看 uid用户ID gid组ID groups 加入的组织
chown 主:组 文件 //修改文件的所属主与组
chmod 身份-操作符-权限 文件名/目录
身份:u(表示拥有者);g(群组);o(其他);a(表示所有的身份);不写身份代表所有的身份都修改权限
操作符:+ , - ,=;
权限:r w x
数字方式: 每3位一组
//如果用户没有权限 重新登录用户
sudo : 普通用户登录的可以获取root权限 需要设置
su:切换用户
命令整理 ~~~~
Linux常用命令 (后续的还没写在这块)
cd 切换目录(change directory)
pwd 显示当前工作目录(print working directory)
help 帮助
ls 显示文件和目录列表(list)
mkdir 创建目录(make directoriy)
cp 复制文件或目录(copy)
rm 删除文件(remove)
cat 显示文本文件内容 (catenate)
more、less 分页显示文本文件内容
head、tail查看文本中开头或结尾部分的内容
file 查看乱码类型
type 查看是内部还是外部命令
whereis 查看命令的位置
ln 连接
kill 杀死一个进程
ps 显示瞬间的进程状态
grep 在指定的文本文件中查找指定的字符串
df 显示文件系统磁盘空间的使用情况
du 显示指定的文件(目录)已使用的磁盘空间的总 -h显示单位
free 显示当前内存和交换空间的使用情况
netstat 显示网络状态信息
ping 测试网络的连通性
VIM常用
光标移动: h:左 j:下 k:上 l : 右
w:移到下一个单词的词首
e:跳至当前或下一个单词的词尾
b:跳至当前或前一个单词的词尾
行内: 0:行首 ^:行首第一个非空白字符 $:行尾
行间: G:最后一行 gg:第一行 ?G:第? 行
翻屏: ctrl f 下 b上
: x:删除光标位置字符 ?x:删除光标开始?个字符
r:替换光标位置字符
dd:删除一行 dw:删除一个单词
yw:复制一个单词 yy:复制光标所在一行
P:光标上方粘贴 p:粘贴
撤销 u ctrl +r 恢复 点 重复上一步操作
q :退出没有动过文件 w :保存不退出
wq :保存退出 q!:不保存并退出 w!:强行保存
set number : set nu(简写) 显示 行号 set nonumber :隐藏行号
set readonly:只读模式 只能读不能写
查找 / 替换 s/查找内容/替换内容/g i (全部 忽略大小写)
0,$ d :全删除 .,+nd: 删除当前+n行
n,nd:删除 n-n行 $-nd :删除倒数第n行
n,ny :复制 n - n行数据 p粘贴 0,$y :复制所以数据