【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门

From Zero To Hero

课程文档连接:百度网盘https://pan.baidu.com/s/1ZD8LdV9UJrLAmEwdt4jg9w
提取码:3k3q

【如果觉得本文有收获请点个赞八👍】

【零基础】一文穿起linux结构、Bash指令、shell编程入门

学习笔记

本文记录了笔者的shell学习过程和leetcode的精选四题解法。
本笔记是尚硅谷视频的学习笔记,视频链接:https://www.bilibili.com/video/BV14a4y1e71S?p=4
内容较多,边看视频边写,花了四天才整理完,适合收藏作为突击资料,或视频的复习内容~ 文章内不好展示的地方标出了视频对应的时间节点

入门-Linux

文件结构与内容

Linux中一切皆文件,常见的结构如下
在这里插入图片描述
下面介绍各个文件夹的作用:
在这里插入图片描述
(lib: library放各种库)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Vi和Vim编辑器

Vim是在vi上进阶的一款编辑器,两者功能相同,都是类Unix系统中通用的文本编辑器,但vim还可以自动上色与判断逻辑

Vi打开文件【黑白电视】

vi install.log

Vim打开文件【彩色电视】

vim install.log

一般模式

使用vim打开一个文件后,自动进入“一般模式”,可以复制、黏贴、删除,但是不能插入或删除内容。复制删除等都有快捷键

注意:shift+^快速移动到行头;shift+$快速移动到尾部。

编辑模式

按下 I A O R四个键中的一个,才会开启编辑模式
在这里插入图片描述

指令模式

按下 : 或者 / 或者 ?,开启指令模式,光标移动到文本的最后一行
在这里插入图片描述

补充 :wq 是保存并退出

总结文本编辑

在这里插入图片描述

Linux运行级别

在这里插入图片描述

关机重启的顺序和语法


补充: shutdown -h 分钟 是xx分钟后关机,如

shutdown -h 7

则为7分钟后关机

帮助文档

man指令可以查看指令的帮助文档
在这里插入图片描述

man ls

如果man现实不了,就用help查看shell内置命令

help cd

常用快捷键总结

  • Tab键可以补全代码,善用!
  • ctrl + L 清屏
  • 上下键查找已经执行过的指令

文件目录类指令

pwd 显示当前工作目录的绝对路径

cd 时的绝对路径和相对路径

讲到了绝对路径,介绍一下cd的逻辑

cd /桌面

则认为是绝对路径 : /桌面,因为第一个/已经指向了文件系统的最开始,一般正确写法是:

cd /root/桌面

相对路径则直接

cd 桌面/文件夹

创建多层目录

使用 -p 参数可以创建多层目录,如

mkdir first
mkdir first/second

两行等价于一行

mkdir -p first/second

防止误删的 rmdir

rmdir只能删除空文件夹
如文件夹内有内容,则执行失败

rmdir empty

创建文件

可以写路径

touch first/onefile.txt

复制和复制时覆盖

cp -r 递归复制整个文件夹

cp -r row new

row为原位置,new为新位置

强制覆盖 不提示: \cp

mv两个功能

在这里插入图片描述

cat查看内容【小文件】

在这里插入图片描述

more 查看内容【大文件】

在这里插入图片描述

全屏显示

more onefile.config

less 查看内容【超大文件】

less和more基本相同,唯一区别的less在读写大文件时效率更高
在这里插入图片描述

echo 输出内容到指示台

在这里插入图片描述
例子:

echo -e "Hallow\tworld"
echo -e "Hallow \\ tworld"

若不空格可能无法显示转义后的 \

head显示文件头部内容

在这里插入图片描述

tail显示文件尾部内容

监视文件变化可以用tail
在这里插入图片描述

>覆盖和>>追加

在这里插入图片描述

ln软连接【类似快捷方式】

在这里插入图片描述
在这里插入图片描述
软连接效果示意:
在这里插入图片描述

软连接闪烁说明内容已经丢失

rm移除文件或目录

在这里插入图片描述
在这里插入图片描述
常用写法:

rm -rf deletefile.txt

history查看已经执行过的命令

直接

history

用户群组管理

这里直接贴图了
在这里插入图片描述
在这里插入图片描述

效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加了 - 之后多了 tangseng文件夹
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

文件权限类操作

在这里插入图片描述

文件权限编号

在这里插入图片描述
在这里插入图片描述

rxw对于目录和文件的意义是不同的
在这里插入图片描述
例子:
详细解释在视频第4分钟
在这里插入图片描述
连接数的含义:
在这里插入图片描述

硬链接和软连接的区别

硬链接和软连接区别

软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块,因此软链接的创建与使用没有类似硬链接的诸多限制。

但需注意:软链接创建时原文件的路径指向使用绝对路径较好。使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接(如下所示的软链接 a 使用了相对路径,因此不宜被移动),因为链接数据块中记录的亦是相对路径指向。

chmod权限管理

在这里插入图片描述
关于mode=421法,详细解释在视频第4分钟
最常用的当然是

chmod 777 filenam

但是这样写是在是显示不出我们的能力。

实例:
在这里插入图片描述
所有者:第一个用户名 atguigu 权限 rw-
所属组:第二个用户名 atguigu 权限【正好是高亮部分】 rw-

其他人:只有读权限 r–

现在想给所有人用a.sh这个脚本:

chmod +x a.sh

运行结果
在这里插入图片描述
如果不想让陌生人有权限,则执行

chmod o-x a.sh

这样o组就没有x权限了:
在这里插入图片描述

bash和自执行的权限不同

只要Bash有执行脚本的权限,就能执行

bash a.sh

而运行该命令的用户不一定要有a.sh的x权限
但是自执行则一定要有x权限

./a.sh

注意,如果写自执行的脚本,首先应当注意是否指定了编译器
在这里插入图片描述
即上图中的

#!/bin/bash

改变所有者

在这里插入图片描述

搜索查询类

find

从指定目录开始逐步递归其所有子文件夹

格式: find 搜索范围 选项

选项:
在这里插入图片描述

范例1:通过名称查找
在target文件夹下找所有的.txt文件

find target/ -name "*.txt"

范例2:通过所有者查找
在target文件夹下找所有拥有者为xiaoming的文件

find taget/ -user xiaoming

范例3:通过文件大小查找
查找所有target文件夹下大小超过200m的文件,注意find指令是以b为单位的

选项+n大于 -n小于 n 等于

find target/ -size +204800

grep匹配和管道符|配合ls列出文件夹内容参数

管道符 |

管道符号 | 表示将前一个指令结果输出给后一个指令处理。

  • ls 参数
    -a 表示显示所有文件,包含隐藏文件
    -d 表示显示目录自身的属性,而不是目录中的内容
    -F 选项会在显示目录条目时,在目录后加一个/
    字符串匹配查找,只输出符合条件的

  • 字符串匹配grep语法和re库相同, ^表示开头匹配相同,$表示结尾匹配相同

格式: gerp 选项 查找内容 源文件

  • 显示匹配行号
ls | grep -n test
  • 开头匹配:
ls -l | grep '^d'
drwxrwxr-x 2 roaddb roaddb 4096 May  7 10:11 111
drwxrwxr-x 2 roaddb roaddb 4096 Mar 13  2017 SSL_files
  • 结尾匹配
ls -F | grep '/$'
111/
SSL_files/

which查找命令

查找 “命令”在哪个文件夹下
查找ll命令在哪个文件夹:

which ll

压缩和解压缩类指令

gzip(注意不会保留源文件,且不能用于目录)压缩为.gz文件

gzip file
gunzip file.gz

gzip只能压缩文件,不能压缩目录

zip和unzip(注意unzip的指定解压路径)

注意zip要取名字才能压缩
在这里插入图片描述

zip -r newname.zip file
unzip -d newfolder

tar打包

在这里插入图片描述
压缩:-zcvf
解压:-zxvf

讲解在视频第9分钟

例子:

tar -zcvf dabao.tar.gz file1.txt file2.txt

解压缩【指定路径myfolder】

tar -zxcf dabao.tar.gz -C myfolder

磁盘分区类指令

不太用得到,视频

进程控制类命令

ps查看进程

在这里插入图片描述
在这里插入图片描述
例子:

ps aux

内容说明
在这里插入图片描述
实例讲解:视频第4分钟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kill终止进程

在这里插入图片描述
例子

kill -9 5103
killall firefox

pstree查看进程树

在这里插入图片描述

例子

pstree -p
pstree -u

【感觉没啥用】进程树讲解在视频第九分钟

top显示系统健康状态【查看僵尸进程、利用率】

格式: top [指令]
在这里插入图片描述
先输入top ,再在监视界面输入操作命令:
在这里插入图片描述

netstat查看网络端口占用

在这里插入图片描述

如:查看端口是否被占用

netstat -nlp | grep 8888

crontab创建定时任务

在这里插入图片描述

例子:
查询所有定时任务

crontab -l

打开定时任务的编辑界面(类似vim进去了)

crontab -e

编辑界面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意不要同时设置几号和星期几
在这里插入图片描述

在这里插入图片描述
详细讲解:视频第10分钟

RPM软件包以及YUM仓库

在这里插入图片描述

rpm -qa查询软件包

在这里插入图片描述
如查看firefox的安装包

rpm -qa | grep firefox

rpm -e卸载

注意:如果不检查依赖,其他用到的程序可能无法启动
在这里插入图片描述
例子

rpm -r --nodeps firefox

rpm 安装

在这里插入图片描述

yum仓库【类似conda】

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
例子:yum安装firefox

yum -y install firefox.x86_64

类似conda,yum也要换成163源

入门-Shell编程

shell类似外层程序调用linux内核的中间阶段
在这里插入图片描述
同样作为命令行解释器,python越来越有取代shell的趋势,后续刷题中也会介绍shell和puyhon的两种解法

查看系统支持的所有shell语言

cat /etc/shells

在这里插入图片描述
每种都是不同的shell语言,bash兼容了难用的sh,因此出现多种语法和奇怪语法。

查看本机的默认shell语法:

echo $SHELL

在这里插入图片描述
centOS中,sh已经被软连接到bash
在这里插入图片描述

脚本入门

脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。在本文中,指命令行的集合。

开头

指定编译器,

#!/bin/bash

类似py的

#--*--coding: utf-8 --*--
Hello world

先touch test.sh, 再vim进去。写入:

#!/bin/bash
echo "Hello world"

就可以:
在这里插入图片描述

自执行权限

(在win的gitbash内没有权限问题)
自执行:

./test721.sh

在linux中无法运行,因为:
在这里插入图片描述
所有者也没有x权限

但在gitbash里是默认有x权限的
在这里插入图片描述
具体修改权限设置请参照上文的chmod节,本部分专注于脚本语言本身。

只要Bash有执行脚本的权限,就能执行

bash a.sh

而运行该命令的用户不一定要有a.sh的x权限
但是自执行则一定要有x权限

./a.sh

注意,如果写自执行的脚本,首先应当注意是否指定了编译器
在这里插入图片描述
即上图中的

#!/bin/bash

如果写错了,会报坏解释器interpreter
在这里插入图片描述
如果是python,则为

#!user/bin/python

即python解释器的位置

Shell 脚本变量

  • 所有变量都是字符串型,没有别的型
  • 想echo输出时,前面加上$符号
    如:
i=0
echo $i

也可以在命令行中直接写

由于字符串特性,不能做加减操作
在这里插入图片描述
除了自己定义的变量,还有系统内自带的变量
如$USER
在这里插入图片描述

常用系统变量

$HOME、$PWD、$SHELL、$USER等

显示当前Shell中所有变量:

set

自定义变量注意点

1.基本语法
(1)定义变量:变量=值 【千万不能有空格!】
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset

readonly i=5

则不能重新赋值,也不能unset i

因为这个变量定义到了当前的shell里
可以新建一个ssh窗口,新建一个终端,都可以清除该变量。bash端口相当于一个占内存的程序,可以用

ps -ef

查看到bash进程

2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

特殊变量

特殊变量:$n
1.基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10}
2.案例实操
(1)输出该脚本文件名称、输入参数1和输入参数2 的值

[atguigu@hadoop101 datas]$ touch parameter.sh 
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
./parameter.sh  cls   xz

4.4 特殊变量:$#
1.基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.案例实操
(1)获取输入参数的个数

[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
parameter.sh cls xz 
2

4.5 特殊变量:$*、$@
1.基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

2.案例实操
(1)打印输入的所有参数

[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#
echo $*
echo $@

[atguigu@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh  1   2
3
1 2 3
1 2 3

4.6 特殊变量:$?
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2.案例实操
(1)判断helloworld.sh脚本是否正确执行

[atguigu@hadoop101 datas]$ ./helloworld.sh 
hello world
[atguigu@hadoop101 datas]$ echo $?
0

如搭配逻辑运算

在这里插入图片描述

运算

基本语法
(1)

$((运算式))

或者

$[运算式]

(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格

例子:
在这里插入图片描述
另一种写法

在这里插入图片描述

第二种写法解释:expr是一个函数,后面都是参数,$a是一个,+是一个,$b是一个,所以要严格空格隔开

条件判断

  • 1.基本语法
    [ condition ](注意condition前后要有空格)

    [i=5]
    注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。

查看返回值方法:

#?

【特殊符号,返回上一个脚本的结束符,0为正常运行,1为错误运行】
在这里插入图片描述

上图a和6不相等,返回1。下面的数值比较与之相同。要点:空格不能少

  • 2 常用判断条件
    • (1)两个整数之间比较
      = 字符串比较
      -lt 小于(less than) -le 小于等于(less equal)
      -eq 等于(equal) -gt 大于(greater than)
      -ge 大于等于(greater equal) -ne 不等于(Not equal)
    • (2)按照文件权限进行判断
      -r 有读的权限(read) -w 有写的权限(write)
      -x 有执行的权限(execute)
    • (3)按照文件类型进行判断
      -f 文件存在并且是一个常规的文件(file)
      -e 文件存在(existence) -d 文件存在并是一个目录(directory)

例子:

  • 数值判断
    在这里插入图片描述
  • 权限判断
    在这里插入图片描述

流程控制

重点:

fi封住if
esac封住case·

恰好是倒过来。

基本语法:

if

if [ 条件判断式 ];then 
  程序 
fi 

或者

if [ 条件判断式 ] 
  then 
    程序 
elif [ 条件判断式 ]
	then
		程序
else
	程序
fi
注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
例子:

在这里插入图片描述
注意结尾fi封住
效果:【注意参数不同了结果也不同】
在这里插入图片描述

下面编写脚本:如果存在一个叫bbbb的文件,就输出内容,不存在就新建一个内容为123,名字为bbbb的文件:

#!/bin/bash
if [ -f  bbbb]
then
	cat bbbb
else
	touch bbbb
	echo b >> bbbb

case

重点:

  • 不写swich
  • ;;代表break
  • 单括号不扩死

例子:参数1输出1111,参数2输出2222,参数3输出3333

#!/bin/bash
case $l in
	"1")
	echo 111
	;;
	"2")
	echo 2222
	;;
	*)
	echo 3333
	;;
esac

效果:
在这里插入图片描述

for 循环

基本语法1

for (( 初始值;循环控制条件;变量变化 )) 
  do 
    程序 
  done

附录-虚拟机服务相关

service iptables stop :临时关闭防火墙(service指令)
chkconfig iptables off :关闭开机自启防火墙(chkconfig指令)

虚拟机准备:


1. 防火墙关闭
    service iptables stop //服务关闭
    chkconfig iptables off //关闭开机自启
   
 
2. 创建一个一般用户atguigu
    useradd atguigu
    passwd atguigu
    

3. 在/opt目录下创建software module文件夹
    mkdir /opt/software /opt/module
    chown atguigu:atguigu /opt/software /opt/module


4. 把这个用户加到sudoers
    vim /etc/sudoers
    atguigu ALL=(ALL)       NOPASSWD: ALL
    :wq!强制保存



5. 改Hosts
    vim /etc/hosts
    在文件后追加

192.168.1.100   hadoop100
192.168.1.101   hadoop101
192.168.1.102  
hadoop102
192.168.1.103   hadoop103
192.168.1.104   hadoop104
192.168.1.105  
hadoop105
192.168.1.106   hadoop106
192.168.1.107   hadoop107
192.168.1.108   
hadoop108
192.168.1.109   hadoop109

    (每克隆一台都需要做一遍)

6. 改静态IP
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2
NAME=eth0

7. 改主机名
    vim /etc/sysconfig/network
    改HOSTNAME字段
    改成 HOSTNAME=hadoop100
拍快照


//新虚拟机,不用第八步  
8. 改网卡脚本文件
    vim /etc/udev/rules.d/70-persistent-net.rules
    第一行删掉
    
    第二行
    最后 NAME="eth1" 改成 NAME="eth0"
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值