一、Linux内外部命令的判断方式以及命令的执行流程
1、Linux命令
Linux命令分为内部命令(shell自带的命令)和外部命令(不是shell自带的命令,由用户安装),怎么鉴别是内部命令和外部命令呢?可以通过type命令来鉴别
什么是shell呢?shell是一个程序,常用的有bash shell,平时我们通过用户名和密码登录到linux,其实就是登录到bash shell程序,通过bash shell来操作linux内核
命令执行流程
那岂不是说使用外部命令效率会很慢吗?
其实一点都不慢,它会去PATH环境变量设置的一堆目录中查找
2、type命令
cd is a shell builtin 表示内部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令
3、cd命令
cd命令切换文件夹
现在我们cd /usr/sbin
4、cat命令
通过cat命令查看文件内容
通过cat ifconfig来查看ifconfig,发现是乱码文件
5、file命令
file命令查看文件类型
输入file ifconfig
从输出信息可以看出它是一个二进制可执行文件
6、whereis命令
whereis命令查看文件位置
find / -name jdk
7、echo命令
echo命令用户打印信息,相当于java中的system.out.println
二、linux查看命令帮助文档
1、使用man命令查看相关命令的含义及描述信息
可以使用回车查看下一行、空格查看下一页、q退出
2、使用help查看内部命令
一般使用man查看外部命令,help查看内部命令
三、bash shell定义变量以及进程简单管理
1、变量的定义及使用
2、进程管理
(1)、ps -ef 命令
查看linux下的应用和应用的进程号
(2)、在一个新窗口输入vim a,在另外一个窗口查看进程信息 ps -ef,这个时候可以看到有一个vim a的进程
当我们在这个窗口中输入kill -9 1593的话,另外一个正在编辑文件的进程就会退出
四、Hash优化查询时间的原理
在前面我们已经讲过,bash shell程序在执行命令的一个过程及原理,对于外部命令,它会去PATH这个环境变量中查找执行命令所在的路径,当然在去PATH中寻找之前会先去hash表中查找这个命令有没有执行过,执行过的话会记录在hash表中,则此次查找只需从hash表中就可以很方便的找到
五、Linux文件系统介绍
六、文件系统相关命令
1、df命令
查看分区信息 -h 表示文件大小后面会显示文件大小
2、du命令
查看文件的使用情况
3、ls命令
使用man ls 查看ls命令的相关介绍
-a:可以查看隐藏文件
-l:以长列表的形式展示文件列表信息
第一位 -:表示文件,d表示文件夹,b表示块设备文件,c表示字符设备文件,p表示命令管道文件,s表示套接字文件, 从第二位开始往后数九位表示属主权限(每三位一组 rwx:读、写、执行),第11位表示的点表示分隔符,点后面的数字表示文件有几个硬连接,第一个root代表属主名,第二个root代表这个第一个root所在的组织,接下来的5表示文件大小,5后面的日期表示文件最后一次修改的时间, 1.txt代表的文件或文件夹的名称
小结:
4、cd命令
切换文件目录
cd 文件路径
cd:切换到家目录
cd ~:回到家目录(也就是家目录)
cd ..:回到上一级目录
5、mkdir命令
创建目录
mkdir 目录名
mkdir -p 目录名,级联创建目录
6、cp命令
cp 被拷贝的文件(可以是路径加文件名) 拷贝到哪个位置
复制目录使用
cp -r 被拷贝的目录 目标位置
7、mv命令
移动命令
mv 被移动的文件 目标位置+目标文件名
8、rm删除命令
rm 文件名(此中方式的删除需要再输入 yes)
rm -f 文件名,无提示直接删除
rm -rf 文件夹
9、ln命令
ln命令默认创建的是硬连接
ln profile a:将a硬连接到profile文件上,他们底层共用一个文件,删除他们之中任何一个
对另外一个没有影响,同时你也可以使用 ll -i命令查看文件编号
ln -s profile a:将a软连接到profile文件,当你访问a的时候会去访问profile,profile再访问底层文件,当将profile删除了之后a就无法访问了
10、stat命令查看文件详细信息
11、touch命令
一致时间、创建新文本
touch 已存在的文件:会将文件的访问时间、更新时间、改变时间(即上面stat中介绍的三个时间)变成一致
touch 不存在的文件:会创建一个新的文本
七、文本相关的命令
1、cat命令
cat命令查看文件内容
cat 1.txt:查看单个文件内容
cat 1.txt 2.txt:查看多个文件
2、more命令
more 1.txt:以分页的形式查看文件内容,按空格:下一页,回车:下一行(注意它不能回看,回看的话只能用鼠标回轮)
3、less命令
less 1.txt:使用空格下一页, b看上一页, 回车看下一行
注意less的话会把整个文件内容加载到内存,如果文件比较大的话,建议使用more命令查看
4、head命令
head命令默认查看文件前10行内容, head 1.txt
head -5 1.txt:查看文件前5行的内容
5、tail命令
tail命令默认查看文件后10行的内容 tail 1.txt
tail -5 1.txt:查看文件后5行内容
tail -f 1.txt:实时查看文件增量内容
6、| 管道命令
cat b.txt | head -3:管道左边的命令会以输出流的形式交给管道右边的命令,管道右边以输入流的形式接收并且拼到命令的右边
注意:ls -l 不能接受前面的输出流,这个怎么办呢?可以通过xargs命令
7、vi文本编辑器命令
vi文本编辑器末行模式的操作
(1)、set设置
set nu(number的缩写): 设置行号
set nonu(nonumber的缩写):取消行号
set readonly:设置为只读
(2)、/ 向下查找
n:往下查找
N:往上查找
(3)、? 向上查找
n:往上查找
N:往下查找
(4)、! 执行命令
一般我们会在/etc/profile文件中设置一些环境变量,但是在设置的时候可能没有记住目录,这时候我们可以使用如下方式
效果
再次按回车就会切回到文件中去
(4)、s 查找并替换
格式 :s/str1/str2/gi
/ : 临近s命令的第一个字符边界字符,也可以是 @或#
g : 一行内全部替换
i : 忽略大小写
范围
n:行号
. :当前光标行
+n :偏移n行
-3
%:全文
(5)、删除
全部删除 1,$d
删除前三行
删除第3~5行数据
删除倒数第2行
(6)、复制及黏贴
光标挪到最后一行 按下小写的p
效果图
八、正则表达式
1、定义
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
2、正则表达式特定字符
(1)、匹配操作符
\ :转义字符
. :匹配任意单个字符
[1249a] :匹配中括号中任意字符
[^12] :匹配中括号中任意非1和2的字符
[a-k] :匹配中括号中任意a~k中的一个字符
^ :行首
$ :行尾
| :连接操作符
(,) : 选择操作符
\n :反向引用
(2)、重复操作符
? :匹配0到1次
- :匹配0到多次
- :匹配1到多次
{n} :匹配n次
{n,} :匹配n到多次
{n,m} :匹配n到m次
3、正则表达式练习
在Linux中通过grep命令使用正则表达式来匹配信息
hello shanghai
hello angelababy
hello dilireba
iii250 wyf
hello zhangxinyi
11 hel yhelloubin lo
h2341123i bj
iiii521 fanbingbing
111 hello 222
wo ai bj tam
helloahihelloahi
(1)、查找包含hello的行
(2)、查找包含数字的行
(3)、查找包含了2或者5的行
(4)、查找包含3位数的行 {}是正则表达式的字符,需要加\或者使用grep -E
(5)、包含3位数字的行
(6)、查找包含hello这个单词的行
(7)、查找出hello为单词词首的行
(8)、查找出现2到3次l的行
(9)、查找出 hi hello hi hello 这种结构的行
九、其它文本处理命令
1、cut 显示切割的行数据
f :选择显示的列
s :不显示没有分隔符的行
d :自定义分隔符
2、sort
n :按数值排序
r :倒序
t :自定义分隔符
K :选择排序列
u :合并相同行
f :忽略大小写
angelababy 10
dilireba 11
zhangxinyi 8
zhangxinyi 8
Angelababy 10
3、wc (wordcount)
十、Linux行编辑器 sed的使用方式
sed:行编辑器,以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作
1、使用方式
sed [options] 'Command' file ...
2、options
-n :静默模式,不再默认显示模式空间(内存)中的内容
-i :直接修改原文件
-e SCRIPT :可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r :表示使用扩展正则表达式
3、Command
d :删除符合条件的行
p :显示符号条件的行
a \string :在指定的行后面追加新行,内容为string
\n :可以用于换行
i \string :在指定的行前面添加新行,内容为string
c :取代,c的后面可以接字符串
s /pattern/string/修饰符:查找并替换。默认只替换每行中第一次被模式匹配到的字符串
g :行内全局替换
i :忽略字符大小写
s///:s###,s@@@
(),\1,\2
4、示例
(1)、显示文件中的第二行
sed "2p" ctxt
但是在执行下面的操作的时候文本中的内容都显示出来了,它的原理是,打印匹配的行,以及文本中所有的内容
(2)、只显示第二行
(3)、删除指定文件静默空间中的第三行
注意:它删的是内存中的数据,而不是目标文件
(4)、删除源文件中的第三行
sed -i "3d" ctxt
它的原理是先把内存中的第3行数据删除,然后再把内存中的数据写回原文件,这时原文件中的第三行就没有了
(5)、再每一行的下方加上 yubin
(6)、在每一行的下方加上 yubin
(7)、将文本中的内容替换成hi
(8)、查找并替换
使用变量的形式
十一、文本分析工具awk
awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk -F '{pattern + action}' {filenames}
支持自定义分隔符,默认是以空格分隔的
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句
if、while、do/while、for、break、continue
练习题
passwd文件内容解读:
passwd文件中每行由7个字段组成,字段与字段之间由:分隔,第一个字段代表用户名,第二个字段表示用户对应的加密后的密码,第三个字段表示userId,第四个字段表示groupId,第五个字段表示对用户的描述,第六个字段表示用户的家目录,第七个字段表示的是这个用户默认使用的shell
1、只是显示/etc/passwd的账户
2、只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"end"
3、搜索/etc/passwd有root关键字的所有行
其中$0表示整行
4、统计/etc/passwd文件中,每行的行号,每行的列数,对于的完整行内容
5、比较麻烦的一道题
统计报表:合计每人1月工资, 0:manager,1:worker
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500
将awk后面的内容封装到一个文件中(封装的脚本要遵循一定的格式)
qqq文件的内容格式
十二、Linux用户与权限
1、useradd test01 添加test01用户
2、userdel test01 删除test01用户
如果仅仅只是执行上面这个操作的话,会残留一些文件,如用户的家目录,以及用户的mail信息
3、passwd test01 给test01用户设置密码
4、groupadd share 创建share组
groupdel share 删除share组
5、usermod -G share test01将test01用户加入share组
6、chown root:share share/ 改变share文件夹的属主及属组信息
7、chmod g+w share/ 给share文件夹的组增加写的权限
chmod:修改文件的权限 权限表示方式:字母、数字
值得注意的是:当前给某个组或者用户赋权后,如果被赋权的用户在登录的过程中被赋权,则需要退出重新登录(当用户登录时,会将权限信息加载到内存)
8、su test02 切换到test02用户
十三、Linux软件安装与卸载
1、Linux软件rpm安装
(1)、RPM安装介绍
Linux软件安装方式有:一、基于软件的源码进行编译安装,二、基于已经编译好的安装包,下一步下一步的安装
Redhat提供了rpm(小红帽包管理)管理体系
rpm软件包包含依赖检查,但还需人为解决
(2)、rpm相关命令
rpm安装
rpm -ivh filename(全路径)
--prefix (指定安装目录)
rpm卸载
-e PACKAGE_NAME
其它选项
rpm -qa:查询已经安装的所有包
查看已经安装的jdk
rpm -q PACKAGE_NAME:查询指定的包是否已经安装
rpm -qi PACKAGE_NAME:查询指定包的说明信息
rpm -ql PACKAGE_NAME:查询指定包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文档
rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
rpm -qf /path/to/somefile:查询文件是由哪个rpm包安装完成的
2、yum安装与配置
(1)、yum介绍
yum(全称为 Yellow dog Updater,Modeified)是一个Shell前端软件包管理器(软件)。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需繁琐地一次次下载,安装。
原理图
(2)、配置修改yum国内源
目前国内有2个比较有名的软件源,阿里:http://mirrors.aliyun.com/ ,163:http://mirrors.163.com/ ;
如果我给大家提供的两个地址,你可以任意选择一个,这里我选择阿里云的国内源
点击centos,进入详情页面,按照提供的配置方式修改yum源
步骤1:修改配置文件
由于我这边没有wget,首先我通过rpm安装了一个wget
wget的rpm安装包可以http://mirrors.163.com/centos/7/os/x86_64/Packages/ 这个地址下载
到这里我们就配置好了yum国内源
步骤2:yum clean all 清空本地的依赖缓存
步骤3:yum makecache将依赖缓存下载到本地
(3)、配置yum本地源
如果你现在待得是军工等企业的话,是不能够连接外网的,针对这种情况我们可以使用本地源
卸载光盘之后就不能安装了