小工具      在线工具  汉语词典  css  js  c++  java

Linux简介与shell脚本

Linux,linux,unix,服务器 额外说明

收录于:152天前

Linux

分配系统资源并协调计算机内部所有细节的计算机程序称为操作系统或内核。

hardware:硬件,比如屏幕显示,键盘输入等
kernel:内核,负责连接硬件和内核,只有通过内核才能操作硬件
shell:可以理解为一个框架(更多的翻译将其翻译为壳),通过这个框架外层的应用可以调用内核

应用程序:应用程序,例如数据库(DBMS)、邮件服务(mail)等,可能需要使用硬件。这种情况下就必须通过shell调用内核来操作硬件。

内核:内核是操作系统的核心。它与硬件和大多数任务像内存管理任务调度和文件管理交互。
Shell:shell 是用于处理您的请求的实用程序。当您在您的终端键入命令时,Shell 将命令解释并调用你想要的程序。Shell 使用标准语法的所有命令。C Shell, Bourne Shell 和 Korn Shell 是最著名的 shell ,适用于大多数 UNIX 变体。
命令和实用程序:有各种各样的命令和实用程序可供您使用。cp, mv, cat 和 grep 等是命令和实用程序的几个例子。有超过 250 标准命令,再加上通过第三方软件提供的其他命令。所有的命令都跟着各种可选的选项。
文件和目录:在 UNIX 中的所有数据被都组织到文件中。所有文件被都组织到目录中。这些目录被组织成一个称为文件系统的树状结构。

在这里插入图片描述
如何在图形模式和文本模式之间切换
Linux预设提供了六个命令窗口终端机让我们来登录。

默认情况下,我们登录到第一个窗口,即 tty1。这六个窗口是 tty1、tty2...tty6。您可以按 Ctrl + Alt + F1 ~ F6 进行切换。

如果您安装了图形界面,则默认进入图形界面。此时可以按Ctrl+Alt+F1~F6进入其中一个命令窗口界面。

当进入命令窗口界面并返回图形界面时,只需按Ctrl+Alt+F7即可返回。

如果使用的是vmware虚拟机,切换命令窗口的快捷键是Alt+空格+F1~F6。如果您处于图形界面,请按 Alt + Shift + Ctrl + F1~F6 切换到命令窗口。

Linux 关机

同步将数据从内存同步到硬盘。

shutdown shutdown 命令,可以使用 man shutdown 来阅读帮助文档。例如,您可以运行以下命令 > shutdown:

shutdown –h 10 ‘此服务器将在 10 分钟后关闭’ 该命令告诉每个人计算机将在超过 10 分钟后关闭,并将显示在登录用户的当前屏幕上。

shutdown –h now 立即关闭

shutdown –h 20:25 系统将于今天 20:25 关闭

关机 –h +10 十分钟后关机

shutdown –r now 系统将立即重新启动

Shutdown –r +10 系统将在十分钟后重新启动。

reboot的意思是重启,相当于shutdown –r now

halt 关闭系统,相当于 shutdown -h now 和 poweroff

Linux远程登录

在Linux系统中,远程登录功能是通过ssh服务实现的。默认 ssh 服务端口号为 22。

SSH是Secure Shell的缩写,由IETF网络工作组开发; SSH是一种基于应用层的安全协议。 SSH 是一种更可靠的协议,旨在为远程登录会话和其他网络服务提供安全性。使用SSH协议可以有效防止远程管理过程中的信息泄露。 SSH最初是UNIX系统上的一个程序,并迅速扩展到其他操作平台。

Linux 文件基本属性

ls- l  #查看详细信息

在这里插入图片描述

它们从左到右用数字 0-9 表示。

位 0 确定文件类型,位 1-3 确定拥有文件权限的所有者(文件的所有者)。

位4-6确定该组(所有者同一组中的用户)对该文件具有权限,位7-9确定其他用户对该文件具有权限。

其中第1、4、7位代表读权限。如果用“r”字符表示,则具有读权限。如果用“-”字符表示,>则表示没有读权限;

第2、5、8位代表写权限。如果使用“w”字符,则表示有写权限。如果使用“-”字符,则表示没有写权限。第3、6、9位代表可执行权限。如果用“x”字符表示的话,则具有执行权限。如果用“-”字符表示,则没有执行权限。

更改文件属性

  • chgrp:更改文件的组
chgrp [-R] 属组名文件名
# -R:递归更改文件属组,就是在更改某个目录文件的属组时,目录下的所有文件的属组都会更改。
  • chown:更改文件所有者,同时也可以更改文件组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
  • chmod:更改文件的9个属性

九个权限分别是(1)用户(2)组(3)其他三种身份!那么我们就可以用u、g、o来代表这三个身份的权威了!

另外,a代表all,即所有身份!那么读写权限就可以写成r,w,x!即可以使用如下方法查看:

在这里插入图片描述

chmod u+x file
chmod u+[r/w/x] file
chmod g-[r/w/x] file
...

Linux 文件与目录管理

  • 绝对路径:
    路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
  • 相对路径:
    路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法

处理目录的常用命令

ls: 列出目录
cd:切换目录
pwd:显示目前的目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
cp: 复制文件或目录
rm: 移除文件或目录
mv: 移动文件与目录、文件重命名
可以使用man [command]查看各个命令的使用文档,如:man cp。

CP详细解释:

在这里插入图片描述
mv详细解说
在这里插入图片描述

# mv [参数] 来源 目标
mv mvtest mvtest2
# cp [参数] 源头 目标
cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc

rm详细解释:
在这里插入图片描述

[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y

在这里插入图片描述

** vi 文本编辑器**
vi 是老式的字处理器,使用vi [文件名]进入编辑窗口,按键i进入编辑模式。Esc切换模式,有编辑模式和命令模式,按键Shift+:进入命令模式。w保存,q退出,!使命令强制执行。
在这里插入图片描述
vi是系统自带的文本编辑器,用于写程序时并不方便。vim用于程序开发的编辑器,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

不同Linux的发行版本时不一样的,如Ubuntu是apt-get install,删除是apt-get remove
CentOS则是yum installyum -e .
在这里插入图片描述

Shell脚本

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
在这里插入图片描述
不同于gome桌面的GUI操作,shell是交互式的编程语言,用于操作Linux内核。Linux内核中都有shell解析器,因此可以直接解析shell命令或文本,文本需要声明。Linux shell脚本众多,Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数 Linux 系统默认的 Shell。

shell文本是可执行程序,没有声明将被视为无效关键字。运行 shell 脚本有两种方法:

  1. 直接运行文件
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

# 必须带 / 是告诉系统路径下找.s的脚本并运行,必须带文件的后缀,不然会当路径处理
# 如果文件就在当前目录直接 ./ [文件名即可],不再当前目录文件路径要写对
  1. 作为解释器参数
# 最为解析器参数,就是告诉系统这就是个可执行的脚本
. test.sh
bash test.sh
source test.sh
sh test.sh 

执行文件文件系统

ls    查看目录,
ls -l   查看目录详细信息
cd  切换目录
vi 编辑文件
cat 查看文件内容

Shell作为用户界面,实际上是一个解释器(Interpreter,如Linux下常用的Bash),可以解释分析用户键盘输入,执行输入的命令,然后返回结果。

Shell脚本已经写好了,名为test.sh(vi test.sh)

有几种方法可以执行它

. test.sh
bash test.sh
source test.sh

就像python解析器解析.py文件python test.py一样

但是普通用户没有运行权限,ls -l可查看权限,可用chmod u+x [文件名]增加权限。

chmod +x 和 chmod u+x的区别?
在这里插入图片描述
不同权限的文件有不同颜色:
在这里插入图片描述

蓝色表示目录;
绿色表示可执行文件,可执行的程序;
红色表示压缩文件或包文件;
浅蓝色表示链接文件;
灰色表示其它文件;

//赋予权限后自行编辑的文件变绿色就可以执行了

在这里插入图片描述

传递参数

$用于传递参数,注意范围

test.sh
echo "paramter $0"

. test.sh zhansan
//执行命令行后传递参数

$1  $2 ...依次传递的位置

$#   为传递的参数的所有个数
$@    为传递的所有参数的内容
$?    为最近一次计算结果
$*  传递的参数作为一个字符串显示

$自定义参数名  为内部传参

数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)。

# Shell 数组用括号来表示,元素用"空格"符号分割开
array=(A B "C" D)

# 也可以使用下标来定义数组
array[0]=value0
array[1]=value1
array[2]=value2

# 通过下标读取数组元素值
array[0]

# 使用@ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${array[*]}"
echo "数组的元素为: ${array[@]}"


# 获取数组的长度
echo "数组元素个数为: ${
     #array[*]}"
echo "数组元素个数为: ${
     #array[@]}"


shell运算

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
在这里插入图片描述

 `...` 反单引号为调用系统工具,还有$()也是。
sum=`expr 2+3`

# 运算实例
a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

乘号() 前面必须有一个反斜杠 () 来实现乘法; if...then...fi 是一个条件语句,后面会解释。在 MAC 中,shell 的 expr 语法为:$((表达式)),其中表达式中的 "" 不需要转义符号 “” 。

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

运算符
在这里插入图片描述
注意()范围

逻辑运行算符
在这里插入图片描述
<=>=开口或缺口对的地方要加空格,如果是字符串两边都不要空格。

在这里插入图片描述
比较运行算符
在这里插入图片描述
循环

  • for循环
    在这里插入图片描述

  • while循环
    在这里插入图片描述
    0本身只代表数字[ 0 ]才代表true,break跳出循环,continue跳出本次循环。

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

条件语句
在这里插入图片描述

if []
then
	...
elif
then
	...
else
	...
fi

//then也可以和判断写在一行用;隔离开
if [] ; then

在这里插入图片描述
都可以用breakcontinue跳出循环或本次循环。

文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
在这里插入图片描述
输出命令
Shell echo命令用于字符串的输出:

# 显示普通字符串
 echo "It is a test"
# 显示转义字符
  echo "\"It is a test\""

# 显示结果定向至文件
echo "It is a test" > myfile  # >覆盖 >> 追加

# 命令执行结果
echo `date`
echo $(date)

printf 命令模仿 C 库中的 printf() 程序。 printf 使用带引号的文本或空格分隔的参数。 printf中可以使用格式化字符串,还可以指定字符串的宽度、左右对齐等。默认情况下printf不会像echo那样自动添加换行符,我们可以手动添加\n。

printf  format-string  [arguments...]

printf "Hello, Shell\n"

# 类型个格式控制
# %s %c %d %f都是格式替代符
#%-10s 指一个宽度为 10 个字符(-表示左对齐,没有则表示右对齐),
	#任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,
	#超过也会将内容全部显示出来。

#%-4.2f 指格式化为小数,其中 .2 指保留 2 位小数。

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 

#### 结果:
姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

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

功能

//函数定义
[ function ] funname [()]

{
    

    action;

    [return int;]

}
# 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
# 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值

在这里插入图片描述

常用符号详解

$0  shell本身文件名
$? 最后运行命令的返回值
$! shell最后运行的后台process的PID
$$ shell本身的pid
$#  shell的参数个数
$@ 所有参数列表, 以"$1 $2$n"的形式输出所有参数,此选项参数可超过9个
$*   所有参数列表, 以"$1" "$2""$n" 的形式输出所有参数

$()` `bash shell 中,$( )` ` (反引号) 都可用做命令替换用。 ` ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高,但反单引号容易打错或看错。
$()并不是所有shell都支持。

${ }

$[] $(()) $[]和$(())是一样的,都是进行数学运算的。
支持+ - * / %(“加、减、乘、除、取模”)。
但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。

[ ] 为test命令的另一种形式,但要注意:
1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。
3.大于符号或小于符号必须要转义,否则会被理解成重定向。


(( ))[[ ]] 
分别是[ ]的针对数学比较表达式和字符串表达式的加强版。

[[ ]]中增加模式匹配特效;

(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:

在这里插入图片描述
命令

. . .

相关推荐

额外说明

想法远程调试

文章目录 1,远程DEBUG的必要性 2,IDEA构建SpringBoot测试Demo 3,测试Demo项目配置支持远程调试 4,IDEA打包jar 5,启动jar并且带启动参数支持远程调试 6,IDEA远程DEBUG配置 7,IDEA远程DEBUG测试

额外说明

微信公众号开启服务器配置后如何自定义菜单?

微信公众号(服务号)启用了服务器配置,如何自定义菜单呢? 当我们启用了服务器配置,公众号的默认的自定义菜单就会失效。其实我们可以通过调用API接口来完成自定义菜单功能的配置。 微信公众号自定义菜单接口文档:微信开放文档 目录 一、获取Access_TOK

额外说明

算法-Blue Bridge-单词检测 (java)

算法-单词检测(java) 借鉴文章:-希冀- 文章目录 算法-单词检测(java) 一、题目描述 二、解题目标和思路 1.基础知识补充 代码 一、题目描述 题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远

额外说明

前端内好用插件&&轮播图

前端内好用插件&&轮播图 文章目录 前端内好用插件&&轮播图 一、js辅助插件 (1)flexible适配(移动端和pc端兼容) (2)fastclick插件(解决移动端点击300ms延迟) (3)[swiper轮播图插件](https://swiper

额外说明

ch1_1 c++中的 数组array 与 容器vector

1. 数组 array 1.1 数组的属性 array 数组的特性: 在内存中是以连续地址存放的, 并且存放的内容具有相同的数据类型; 数组下标是从0开始; 根据 属性1, 对数组进行删除和 增加元素时, 需要移动其他元素; (而所谓的删除,是通过后序元

额外说明

计算机基础-------托管代码、非托管代码的理解

之前没有听说过托管代码和非托管代码,于是在网上搜索了一些,对它有了一个浅显的理解。 所谓托管,就是需要借助中间媒介来完成,而非托管无需借助外物自己就可以完成。所以托管代码就是需要借助其他工具来运行,例如我们学的java需要借助JDK来完成运行;非托管代码

额外说明

实时显示日期、时间、城市天气(HTML+JS)

最近在设计自己的网页,想实现实时显示时间和天气,实时定位,从网上搜索自己实现了一下,如下总结: 实时显示时间: <!--setInterval实时显示时间--> <body> <span id="time"></span> </body> <sc

额外说明

什么是跨域问题?如何解决?

文章目录 前言 什么是跨域问题 如何解决 在Spring中怎么解决跨域问题 总结 前言 在当今互联网时代,前端开发中经常会遇到跨域问题,即浏览器禁止向不同源的服务器发送请求。这意味着在开发过程中,如果我们的前端代码需要与其他域名下的接口进行通信,我们将面

额外说明

AngularJS案例:简单计算

AngularJS案例:简单计算 一、环境准备 1、在Intellij里安装AngularJS插件 2、演示AngularJS的代码提示功能   二、案例演示 1、添加必要的js与css     2、SimpleCalculation.html    

额外说明

sqli-labs靶场如何解决本地抓包

前言 在练习如何使用sqlmap进行设置POST提交参数 想利用bp抓包获取--data的值,发现一直抓不到本地搭建的sqli-labs靶场 解决方法 以第十一关为例,这里我搭建在localhost上 我们首先win+R打开cmd 输入ipconfig查

ads via 小工具