一、Linux目录结构
1.1 基本介绍
Linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
在 Linux 世界里,一切皆文件(即使是一个硬件设备,也是使用文本来标 志)
1.2 树形目录结构
/bin:bin 是 Binaries (二进制文件) 的缩写, 存放着最经常使用的命令。
/sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,存放的是系统管理员使用的系统管理程序。
/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些链接接文件以及镜像文件。
/dev :dev 是 Device(设备) 的缩写,该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,这个目录的内容不在硬盘上而是在内存里
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了2.6 内核中新出现的一个文件系统 sysfs 。
/tmp:tmp 是 temporary(临时) 的缩写,这个目录是用来存放一些临时文件。
/usr: usr 是 unix shared resources(共享资源) 的缩写,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。
1.3 Linux目录小结
- 在 linux 中,目录结构有一个根目录/ ,其他的目录都是在/目录分支。
- 在 linux 中,有很多目录,每个目录都会存放相应的内容,不要去修改
- 在 linux 中,所有的设备都可以通过文件来体现(字符设备文件[比如键盘,鼠标],块设备文件[盘])
提示:登录到CentOS7中,各个部分所代表的含义如下:
二、Linux常用命令
注意:Linux命令后面一定跟一个空格,严格区分大小写,当命令太长,一行放不下时,在行尾输入“\”并回车即可。
2.1 su命令
格式:su [选项] [用户名]
功能:(英文全拼:swith user)命令用于变更为其他使用者的身份。
2.2 pwd命令
格式:pwd
功能:(英文全拼:print work directory),显示当前所在目录(即工作目录)
2.3 ls命令
格式:ls [选项] [目录名称]
功能:(英文全拼:list files),显示指定目录中的文件或子目录信息。当不指定文件或目录时,显示当前工作目录中的文件或子目录信息。
常用选项如下:
-a :连同隐藏档( 开头为 . 的档案) 一起列出来。
-l :长格式显示,包含文件和目录的详细信息。
-R :连同子目录内容一起列出来。Ctrl+c可以退出命令
说明:命令“ls –l”设置了别名:ll,即输入ll命令,执行的是ls –l命令。
思考:文件名的颜色为什么不同?一个文件的权限有读、写、执行,为什么会有多个r、w、x?
2.4 cd命令
格式:cd <路径>
功能:(英文全拼:change directory),用于切换当前用户所在的工作目录,其中路径可以是绝对路径也可以是相对路径。
注意:
1、路径分为绝对路径和相对路径,绝对路径【从 / 开始定位】和相对路径【从当前的位置开始定位】
2、cd … :返回上一级;
cd ~ 或者 cd :回到自己的家目录,如果是root用户,cd ~ 相当于 cd /root;如果是普通用户,cd ~ 相当于cd /home/当前用户名
思考:区别三者:cd /usr/local,cd ./usr/local,cd usr/local
2.5 mkdir命令
格式: mkdir [选项] 目录名
功能:(英文全拼:make directory),用于创建目录。创建目录前需保证当前用户对当前路径有修改的权限。
常用选项如下:
-p用于创建多级文件夹
思考:在hadoop用户下,能否在/usr/local目录下创建新的目录?
2.6 cp命令
格式:cp[选项] <文件名> <目标文件名>
功能:(英文全拼:copy file),复制文件或目录。
常用选项如下:
-r 是递归把源目录下的目录递归进行复制。
注意:Linux下能够实现文件和目录的跨机器复制,使用命令scp(secure copy),用法同cp命令。
2.7 mv命令
格式:mv [选项] <文件> <目标文件>
功能:(英文全拼:move file),移动文件或对其改名。
常用选项:
-i表示若存在同名文件,则向用户询问是否覆盖;
-f直接覆盖已有文件,不进行任何提示;
-b 当文件存在时,覆盖前为其创建一个备份。
注意:Linux里面需要对文件或者目录进行重命名的时候,使用该命令。
2.8 rm命令
格式: rm [选项] <文件>
功能:(英文全拼:remove),用于删除文件或目录。
常用选项如下:
-r表示删除目录,也可以用于删除文件;
-f表示强制删除,不需要确认,删除文件前需保证当前用户对当前路径有修改的权限。
思考:使用rm -rf /的后果?
2.9 tar命令
格式:tar [选项] [档案名] [文件或目录]
功能:(英文全拼:tape archive),对文件和目录进行打包。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。该命令还可以反过来,将档案文件中的文件和目录释放出来。
常用选项:
-c 建立新的备份文件。
-C <目录> 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录。
-x 从归档文件中提取文件。
-z 通过gzip指令压缩/解压缩文件,文件名为*.tar.gz。
-f<备份文件> 指定备份文件。
-v 显示命令执行过程。
思考:区别tar -zcvf scala.tar ./scala_jar/和 tar -zxvf scala.tar ./
2.10 chown命令
格式:chown [选项]
功能:(英文全拼:change owner),将文件或目录的拥有者改为指定的用户或组,用户可以是用户名或者用户ID,组可以是组名或者组ID。
常用选项:
-R表示对目前目录下的所有文件与子目录进行相同的拥有者变更。
注意:如果写成chown -R hadoop:hadoop / usr/local/src,结果如何?
2.11 chmod命令
格式:chmod [-R] 模式 文件或目录
功能:(英文全拼:change mode),修改文件或目录的访问权限。
常用选项:
-R表示递归设置指定目录下的所有文件和目录的权限。
模式为文件或目录的权限表示,有三种表示方法。
(1)数字表示
用3个数字表示文件或目录的权限,第1个数字表示所有者的权限,第2个数字表示与所有者同组用户的权限,第3个数字表示其他用户的权限。每类用户都有3类权限:读、写、执行,对应的数字分别是4、2、1。一个用户的权限数字表示为三类权限的数字之和,如一个用户对A文件拥有读写权限,则这个用户的权限数字为6(4+2=6)示例:chmod 664 profile_test.log
(2)字符赋值
用字符u表示所有者,用字符g表示与所有者同组用户,用字符o表示其他用户。用字符r、w、x分别表示读、写、执行权限。用等号“=”来给用户赋权限。
示例:chmod u=rwx,g=rw,o=r profile_test.log
(3)字符加减权限
用字符u表示所有者,用字符g表示与所有者同组用户,用字符o表示其他用户。用字符r、w、x分别表示读、写、执行权限。用加号“+”来给用户加权限,加号“-”来给用户减权限。
示例:chmod u+x,g+w,o-w profile_test.log
文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
注意:文件类型有以下几种:
-:普通文件
d:目录文件
b:块儿设备文件
c:字符设备
l:符号链接
p:管道
2.12 source命令
格式:source [文件]
功能:用于重新执行刚修改的初始化文件,使之立即生效,而不必注销用户,重新登录。
示例:source /etc/profile
2.13 cat命令
格式:cat [选项] [文件]
功能:(英文全拼:concatenate),查看文件内容。常用选项:-n显示行号(空行也编号)
2.13 head命令
格式:head [参数] [文件]
功能:head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
2.14启动服务
启动网络服务:systemctl start network
关闭网络服务:systemctl stop network
查看网络状态:systemctl status network
启动防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
2.15查看IP信息
ip addr show
2.16 grep和管道
格式:命令1 | 命令2 | 命令3 | …
功能:管道是将前一个命令的输出作为后一个命令的输入
查看是否安装了ssh:rpm -qa|grep ssh
查看指定进程:ps -ef |grep 进程关键字
ls -l|wc -l
2.17 wc命令
功能:用于计算字数。
格式:wc [选项][文件]
常用选项:
-c:只显示Bytes数。
-l:显示行数。
-w:只显示字数。
2.18 echo命令
echo命令的一般格式:
echo [选项] 字符串
该命令的功能是在屏幕上显示命令行中所给出的字符串,该命令往往在shell脚本作为一种输出提示信息的手段。
2.19 date命令
date命令的一般格式:
date[选项]
用于在屏幕上显示或者设置系统的日期和时间。
-d,-date=STRING 显示datestr中所设定的时间(非系统时间)。
-s,-set=STRING将系统时间设为datestr中所设定的时间。
(1)按照字符串的设置显示时间
获取前一天的日期
[root@hdp-01 ~]# date -d ‘-1 day’ +‘%Y-%m-%d’
2023-06-29
获取前一个月的日期
[root@hdp-01 hadoop]# date -d ‘-1 month’ +‘%Y-%m-%d’
2023-05-30
(2)以MM/DD/YY显示日期
[root@hdp-01 ~]# date +%D
06/30/23
MM/DD/YYYY显示日期
[root@hdp-01 ~]# date +%x
06/30/2023
以YYYY-MM-DD显示日期
[root@hdp-01 ~]# date +%F
2023-06-30
2.20增加用户和修改密码
useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
如:useradd hadoop1(增加用户hadoop1)
passwd hadoop1(为用户hadoop1修改密码)
userdel hadoop1(删除用户hadoop1)
三、Vi编辑器
vi 的三种命令模式:
command(命令)模式,用于输入命令
insert(插入)模式,用于插入文本,在命令模式下输入i(插入命令)、a(附加命令)等命令后进入文本编辑模式
visual(可视)模式,用于可视化的的高亮并选定正文
3.1进入vi编辑器
vi 文件名称(如果文件名不存在,则新建文件)
3.2退出vi编辑器
:wq(保存并退出) :q!(强制退出) :w 文件名(文件另存为)
3.3文本操作
复制:在命令模式下,输入yy,如果复制5行,就是5yy
粘贴:在命令模式下,输入p
删除:在命令模式下,输入dd,删除一行,如果删除5行,则5dd
删除整片文档:在命令模式下,:%1, d ( 1 代表第一行, d(1代表第一行, d(1代表第一行,代表最后一行,d:删除)
剪切:在vi编辑下,所有删除操作就是剪切到粘贴板上
撤回之前操作:在命令模式下,输入u
查找:
?字符串:向后查找
/字符串:向前查找
n:继续向前查找
N:继续向后查找
注意:如果使用?字符串查找之后,如果想继续向后查找,则必须使用N
四、Shell脚本编程
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
4.1 运算符
基本语法
(1)“ ( ( 运算式 ) ) ”或“ ((运算式))”或“ ((运算式))”或“[运算式]”
(2)expr + , - , , /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
4.2 条件判断
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
4.3 环境变量
1、HOME:用户目录的全路径
2、PATH:shell从中查找命令的目录列表,PATH变量中的值,用冒号分隔开。
3、PWD:用户当前工作目录的路径
4、SHELL:用户当前使用的SHELL
4.4 shell特殊字符
1、双引号
双引号括起来的字符,除了$、倒引号()和\,仍保留其特殊功能,其余字符均作为普通字符,echo "home directory is $HOME" 2、单引号 单引号括起来的字符都是普通字符,echo 'home directory is $HOME' 3、倒引号(
)表示命令
echo current directory is pwd
4、$
取变量的值,echo $HOME
5、反斜杠
转义字符,它能将特殊字符变成普通字符,在某个字符面前,利用反斜杠,能够阻止shell将后面的字符解释为特殊字符,echo $HOME
4.5 循环语句
1、while语句
while 测试条件
do
命令表
done
2、for语句
for in 值表
do
命令表
done
3、until
until
测试条件
do
命令表
done
注意:与while语句相似,只是测试条件不同,即当测试条件为假时,才进入循环体,直到测试条件为真时,终值循环。
4、break语句和continue语句
break语句可以用来终止一个重复执行的循环,可以使for、until或者while语句构成的循环,语法格式为:
break [n],其中代表跳出的几层循环,默认为1。
continue语句跳出循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。
continue[n],n表示从包含continue语句的内层循环体向外跳到第n层循环。默认值为1。
4.6 位置参数
位置参数主要是向脚本中传递数据,变量名不能自定义,变量作用是固定的
1、位置参数含义
$n:$0代表命令本身, 1 − 9 代表接受的第 1 − 9 个参数, 10 以上需要用 括起来,比如 1-9代表接受的第1-9个参数,10以上需要用{}括起来,比如 1−9代表接受的第1−9个参数,10以上需要用括起来,比如{10}代表接收的第10个参数
$:代表接收所有的参数,将所有参数看作一个整体
$@:代表接收的所有参数,将每个参数区别对待
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲:代表接收的参数个数 2、综合…[2+3]
echo “KaTeX parse error: Expected 'EOF', got '#' at position 35: …两数之和 vi sum.sh #̲!/bin/bash sum=[$1+ 2 ] e c h o " 2] echo " 2]echo"sum”
(2)将该脚本改为可执行脚本
chmod u+x ./sum.sh
(3)执行脚本
./sum.sh 1 2
提示:如果此时执行./sum.sh,不输入位置参数是否可以?能够区别 ./sum.sh和sh ./sum.sh
比较:该脚本与上面脚本的区别之处在哪里?
#!/bin/bash
sum=$1+ 2 e c h o " 2 echo " 2echo"sum"
./test.sh 1 2
2)求出1到100的和
(1)
#!/bin/bash
for i in {1…100}
do
sum= [ [ [sum+ i ] d o n e e c h o " i] done echo " i]doneecho"sum"
(2)#!/bin/bash
sum=0
for i in seq 1 $1
do
sum= [ [ [sum+ i ] d o n e e c h o " i] done echo " i]doneecho"sum"
(3)
#!/bin/bash
sum=0
j= 1 f o r ( ( i = 1 ; i < = j ; i + + ) ) d o s u m = 1 for((i=1;i<=j;i++)) do sum= 1for((i=1;i<=j;i++))dosum=[ s u m + sum+ sum+i]
done
echo “$sum”
Linux 中seq 命令的用法
用于产生从某个数到另外一个数之间的所有整数
用法:seq [选项]… 尾数
或:seq [选项]… 首数 尾数
或:seq [选项]… 首数 增量 尾数
(4)#!/bin/bash
sum=0
i=1
while [ $i -le 1 ] d o s u m = 1 ] do sum= 1]dosum=[ s u m + sum+ sum+i]
let i++
done
echo “$sum”
(5)#!/bin/bash
sum=0
i=1
while [ $i -le 1 ] d o s u m = 1 ] do sum= 1]dosum=[ s u m + sum+ sum+i]
i= [ [ [i+1]
done
echo “$sum”
(6)
#!/bin/bash
sum=0
i=1
while [ $i -le 1 ] d o s u m = 1 ] do sum= 1]dosum=[ s u m + sum+ sum+i]
((i++))
done
echo “$sum”
提示:while [ $i -le 100 ]中[ 后面有个空格, ]前面有个空格。如果没有输入空格,会是啥样的结果?
let:执行整数算数算数运算的命令。let i++等价于((i++));
4.7 重定向
Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,如:不想看到在显示器的输出,而是希望输出到某一文件中,此时就需要通过Linux重定向来完成。
标准输入 (stdin):键盘,代码为0,使用<或<<;
标准输出 (stdout):显示器,代码为1,使用>或>>;
标准错误输出(stderr):显示器,代码为2,使用2>或2>>;
1、输出重定向
常见使用方法:
(1)ls -l >文件:列表的内容写入文件中(覆盖写)
(2)ls -al >>文件 :列表的内容追加到文件的末尾(追加写)
(3)cat 文件 1 > 文件 2 :将文件1的内容覆盖到文件2,如果文件2为空,则相当于将文件1的文件复制给文件2
(3)echo “内容”>> 文件:将echo中的内容追加到文件中
注意:> 输出重定向和 >> 追加
2、实例:把标准输出重定向到指定文件
(1)编写脚本:
vi test.sh
#!/bin/bash
while true
do
echo date
sleep 1
done
(2)将该脚本改为可执行脚本
chmod u+x ./test.sh
(3)在标准控制台打印
./test.sh
(4)提问:如果想把标准输出打印到其他文件是否可以?
将正确输出重定向到:/home/hadoop/test.log文件。
./test.sh>/home/hadoop/test.log
将正确输出重定向到:/home/hadoop/test.log文件,将错误输出重定向到:/home/hadoop/test.err文件
./test.sh 1>/home/hadoop/test.log 2>/home/hadoop/test.err &
提示:& 放在命令到结尾,表示后台运行
如果重定向不想输出到文件中,直接丢给/dev/null(/dev/null 表示空设备文件
,类似于黑洞)
./test.sh 1>/dev/null 2>/dev/null &
./test.sh 1>/dev/null 2>&1 &(注意:&1等效于标准输出)
nohup ./test.sh 1>/dev/null 2>&1 &
nohup放在命令的开头,表示不挂起(no hang up),关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。
思考:./test.sh和test.sh是否能实现同样的效果?如何修改?
提示:将test.sh提升为全局变量,在/etc/profile文件下面修改
4.8 综合实例
1、获取前一天日期
(1)编写脚本(date.sh),如下所示:
·
(2)将该脚本改为可执行脚本
chmod u+x ./date.sh
(3)执行该脚本
./date.sh
2、复制目录或者文件到集群中的多台机器(分发文件,该案例讲完Linxu虚拟机环境搭建之后再做)
(1)编写脚本(copy.sh),如下所示:
#!/bin/bash
for host in {02…03}
do
scp -r /home/hadoop/srdb.csv hadoop@hdp-$host:/home/hadoop/
Done
(2)将该脚本改为可执行脚本
chmod u+x ./copy.sh
(3)执行该脚本
./copy.sh
思考:如果在脚本中,所要拷贝的文件不写死,如何实现?
#!/bin/bash
for host in {02…03}
do
scp -r 1 h a d o o p @ h d p − 1 hadoop@hdp- 1hadoop@hdp−host:$2
done
执行: ./copy1.sh /home/hadoop/srdb.csv /home/hadoop/
五、定时任务调度
5.1 基本语法
crontab 进行定时任务的设置。
任务调度:是指系统在某个时间执行的特定的命令或程序。
命令格式:crontab [选项]
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
在这里插入图片描述
参数细节说明:
5.2 crond服务操作命令
systemctl start crond 启动服务
systemctl stop crond 关闭服务
systemctl restart crond 重启服务
systemctl status crond 服务是否运行
5.3 综合实例
实例:将综合案例中显示前一天日期的脚本定时启动执行。
1)启动服务:systemctl start crond
2)crontab -e
3)加入要定期执行的shell脚本
26 22 * * * sh /home/hadoop/date.sh>date.log
思考:每隔1分钟,就将当前的日期信息,显示到/home/hadoop/mydate.log文件?
*/1 * * * * date >> /home/hadoop/mydate.log