首页 > 系统相关 >Linux相关命令及shell命令

Linux相关命令及shell命令

时间:2024-09-14 21:20:46浏览次数:3  
标签:bin 脚本 shell echo ------------------------------------ 命令 Linux hello

一、链接文件

1.1 软链接(符号链接)

ls -l 能看到类型为 链接文件 的都是 软连接

软连接类似于windows的快捷方式

创建软连接的方式:

ln -s 被链接的文件文件名 要生成的文件名

注意:

1.我们一般创建软连接时 最好使用绝对路径 否则一旦相对位置发生变化 链接就会失效。

2.如果被链接的文件位置发生变化,后者被删除了 链接也会消失。

1.2 硬链接

硬链接相当于给文件起了一个别名。

创建硬链接的方式:

ln 被链接的文件名 要生成的文件名

硬链接文件只是在操作系统中给文件起了一个别名,同一组的硬链接文件inode号相同

Linux系统是通过inode号来识别文件的

使用 ls -l 文件名 或者 stat 文件名 来查看文件的inode号

对于硬链接而言,删除一个名字,不会影响整个文件

只有把所有名字都删除文件才真的被删除

修改一个文件,同一组的另外的名字访问文件也会发生变化

二、环境变量

2.1概念

环境变量就是保存系统启动相关系统运行相关的一些值的变量。

使用 env 命令可以 查看 系统中已有的所有的环境变量

使用 echo $环境变量名 就可以打印对应的环境变量的值

2.2 常见的环境变量

//用户的家目录

HOME=/home/linux

//当前路径

PWD=/home/linux/....

//上一次所在路径

OLDPWD=/home/linux

//默认命令解析器

SHELL=/bin/bash

//可执行文件的路径

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

当执行命令或程序时,系统会在PATH保存的路径中,逐个的找可执行文件的路径,找到了就执行

找不到就报错,命令不存在

让自己的程序可以在任意路径下执行:

方式1:把自己的可执行文件放在PATH路径下的某一个路径下---需要sudo

方式2:把自己的可执行文件的路径添加到PATH中即可

2.3 修改环境变量的方式

2.3.1 只对当前终端生效

export 环境变量=环境变量值 覆盖写

export 环境变量名=$环境变量名:要追加的值 追加写

例如:

export PS1=xxxx //覆盖写 // PS1是控制命令行提示符内容及配色的

export PATH=$PATH:/home/linux //追加写

生效范围:只对当前终端生效

生效方式:立即生效

2.3.2 对当前用户生效

用户在登陆后打开终端的过程中,会自动执行很多个脚本,其中一个是 ~/.bashrc

只需要将 声明环境变量的语句放在该脚本中 就会被自动执行

注意:每个用户在自己的家目录下都有一个 .bashrc 文件

所以修改哪个用户的就对哪个用户生效 其他用户不受影响

生效范围:对当前用户生效

生效方式:重新打开终端生效 或者使用 source ~/.bashrc 立即生效

2.3.3 对系统的所有用户生效----一般不使用

系统开启的过程中,也会生成很多个脚本,其中一个就是 /etc/profile

只需要将声明 环境变量的语句放在该脚本中 就会被自动执行了

(系统启动时 自动执行该脚本1 就帮我们生命了环境变量)

生效范围:对系统中所有用户都生效

生效方式:重启系统生效 或者使用 source /etc/profile 立即生效

三、网络基础及相关命令

3.1 网络基础

3.1.1 ip 地址

IP地址:主机在网络中的一个编号,这个编号就是ip地址;

ip地址分类:ipv4(4字节32位)ipv6(16字节128位)

ipv4地址的表示方式:点分十进制“192.168.10.20”

1100 0000 1010 1000 0000 1010 0001 0100

ipv4地址的组成:由 网络号主机号 组成

ipv4地址的分类:

网络号 主机号 规定最高位 范围 用单位

A 1字节 3字节 0 [0-127] 政府/大公司/学校

B 2字节 2字节 10 [128-191] 中等规模的公司

C 3字节 1字节 110 [192-223] 个人

192.168.1.255 广播地址

D 1110 [224-239] 组播

E 11110 [240-255] 未使用(实验室)

A:0.0.0.0 - 127.255.255.255

B:128.0.0.0-191.255.255.255

C:192.0.0.0-223.255.255.255

D:224.0.0.0-239.255.255.255

E:240.0.0.0-255.255.255.255

其中每个IP地址又可以通过路由器,下发局域网IP地址,每类IP地址都有专门划分子网的保留段。

3.1.2 子网掩码

由一堆连续的1 和 一堆连续的 0 组成的;

子网掩码用来和 ip 地址做 & 运算来获取网络号的;

两台主机的ip地址和子网掩码取 & 运算,得到的网络号相同,才能做局域网通信

3.1.3 网关

网关是用来和外界进行通信的出口,一般同一局域网中的第一个ip地址就是 网关地址给路由器使用的ip地址。

3.1.4 dns服务

域名解析服务

www.baidu.com --> 39.156.66.18

两个免费的域名解析服务器:

8.8.8.8 114.114.114.114

3.2 Ubuntu设置网络的方法

方法1:图形化界面设置

点击右上角图标--> 有线连接 --> 有线设置

将连接开关 关闭 后,再点击后面的设置图标

选择IPv4 --> 添加相关参数(IP地址、子网掩码、默认网关、DNS) --> 应用

然后重新打开连接开关

3.3 网络相关命令

查看网络信息的命令

linux -> ifconfig

win -> ipconfig

查看网络是否连通

ping

ping 192.168.50.206 //局域网

ping www.baidu.com //连接外网

出现

PING 192.168.60.97 (192.168.60.97) 56(84) bytes of data.

64 bytes from 192.168.60.97: icmp_seq=1 ttl=64 time=60.2 ms

64 bytes from 192.168.60.97: icmp_seq=2 ttl=64 time=2.40 ms

表示连通了

Ubuntu中如果网络服务器异常,可以按下面的流程操作一下

sudo service network-manager stop 停止网络服务

sudo vi /etc/NetworkManager/NetworkManager.conf 打开配置文件

将managed=false 改成 managed=true 保存退出

su root 切换到root用户 执行下面的命令

rm /var/lib/NetworkManager/NetworkManager.state

exit 回到原用户

sudo service network-manager start 重新启动网络服务

shell

----------------------shell编程--------------------------

运维、测试的人员常用。 对大家的要求:简单的脚本得会写,复杂的脚本能看懂。

一、什么是shell?什么是shell命令?什么是shell脚本?

1.1 shell

shell是一个命令行解释器

(1)sh :(全称 Bourne Shell)是UNIX最初使用的 shell,

而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell

编程方面相当优秀,但在处理与用户的交互方面做得不如

其他几种 shell。

(2)csh :是一种比 Bourne Shell更适合的变种 Shell,

它的语法与 C 语言很相似

(3)ksh :集合了 C Shell 和 Bourne Shell 的优点并且

和 Bourne Shell 完全兼容。

(4)bash :LinuxOS 默认的,它是 Bourne Shell 的扩展。

与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基

础上增加了很多特性。可以提供命令补全,命令编辑和命

令历史等功能。它还包含了很多 C Shell 和 Korn Shell

中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面

dash--bash的轻量版

使用 echo $SHELL 可以查看当前系统使用的命令行解释器

1.2 shell 命令

就是我们平时在终端使用的命令。

1.3 shell 脚本

shell脚本本身是一个 .sh 结尾的文件 , 里面都是命令的集合以及一些复杂的逻辑。

作用:批量的执行命令。

练习:

要求:写出上面操作需要执行的命令,把这些命令保存在文件中,截图:

脚本中使用 家目录 时,最好使用 $HOME 不要使用~

二、如何执行shell脚本

shell是一个解释型语言,无需编译,直接把脚本交给解释器执行即可。

shell脚本有三种执行方式:

./脚本名 执行时需要有执行权限(chmod u+x 脚本名)

在后台开一个终端(我们看不到)执行脚本,并把结果显示到当前终端

bash 脚本名 不需要执行权限

在后台开一个终端(我们看不到)执行脚本,并把结果显示到当前终端

source 脚本名 不需要执行权限

直接在当前终端执行

三、shell 中的变量

3.1 特点

shell中的变量不需要提前定义,直接使用即可

shell中的变量没有类型,默认都是字符串 没有整数、浮点数、字符之分

shell中的变量也要符合命名规范

1、由数字,字母,下划线组成

2、不能以数字开头

3、不能和shell中的关键字冲突

4、尽量做到望文知意

一般情况下,shell中的变量多采用大写字母

shell中一行指令结束 无需加分号

3.2 引用变量的值

$变量名 或者 ${变量名}

注意不要写成 $(变量名) 这种用法叫命令置换符

3.3 清空变量的值

unset 变量名

#!/bin/bash 
#此命令表示 执行改脚本时,默认的命令解析器为 /bin/bash
#shell中使用的#表示注释

V1=hello #注意:赋值等号前后不可加空格
echo V1 #V1
echo $V1 #hello
echo "----------------------------"
#echo 作用是将内容打印到终端 类似于C语言的printf

V2=1234
echo $V2 #1234
V3=$V1 #变量的赋值
echo V3=$V3 #V3=hello
echo $V3=V3 #hello=V3
echo "----------------------------"

# $变量名 和 ${变量名} 区别
V4=beijing
V5=$V4nihao # 将V4nihao当做变量名 但是没有这个变量名 
echo $V5     # 就会输出空值
V6=${V4}nihao # 输出V4的值之后继续输出nihao
echo $V6
echo "----------------------------"


#如果赋值的字符中间有空格 必须加引号
V7=hello world #没加引号,将hello赋值给V7,把world当命令再执行,会报错
V8="hello world" #正确
echo $V8 # hello world
V9='hello world'
echo $V9 # hello world
echo "----------------------------"

#单引号和双引号的区别--单引号中不能引用其他变量的值
A1=hqyj
A2="${A1} nice" 
echo $A2 #hqyj nice
A3='${A1} ok'
echo $A3 #${A3} ok
echo "----------------------------"

# 清空变量的值
unset A3
echo $A3 #空值
echo "----------------------------"

结果:
V1
hello
----------------------------
1234
V3=hello
hello=V3
----------------------------

beijingnihao
----------------------------
04test.sh: 行 28: world:未找到命令
hello world
hello world
----------------------------
hqyj nice
${A1} ok
----------------------------

----------------------------

shell中既可以使用自己定义的变量 也可以使用环境变量

eg:

使用两个变量 A B 分别来保存环境变量 PATH 和 HOME 的值

交换AB的值 并输出

#!/bin/bash 

A=$PATH
B=$HOME
C=$A
A=$B
B=$C
echo $A
echo $B
结果:
/home/linux
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/linux/toolchain/gcc-7.5.0/bin

3.4 shell 中的位置变量

位置变量的作用类似于 C语言中的 main 函数的参数 argv

$0 脚本名 不同的执行方式下$0的值也不一样

./方式执行 $0 就是 ./脚本名

bash方式执行 $0 就是 脚本名

source 方式执行 $0 就是 bash

$1~$9 执行脚本时 命令行的所有参数(不包含脚本)

如果有超过9个参数 需要使用${} 引用值

例如:${27} ${123}

$@ 执行脚本时 显示 命令行的所有参数(不包含脚本名)

$* 执行脚本时 显示 命令行的所有参数(不包含脚本名)

$# 执行脚本时 显示 命令行的所有参数的个数(不包含脚本名)

$$ 执行脚本的进程号

$? 用来表示上一条命令是否执行成功 0 成功 1 失败

3.5 变量的作用域

如果不加任何修饰,变量的作用域默认为全局

如果想定义局部变量,需要单独使用local关键字修饰

#!/bin/bash 
#shell中函数的定义
function my_test()
{
	V1="hello world"
	echo $V1 #hello world
	local V2="beijing"
	echo $V2 #beijing
}

my_test  #shell中的函数调用
echo $V1 #hello world
echo $V2 # 空
结果:
hello world
beijing
hello world

3.6 只读变量

shell中使用关键字 readonly 来修饰只读变量

#!bin/bash
V1=hello
echo $V1 #hello
V1=good #没有被readonly修饰的变量可以被修改
echo $V1 #good
readonly V2=nihao
V2=shanghai #报错 V2是只读变量
结果:
hello
good
07test.sh: 行 7: V2:只读变量

3.7 命令置换符

作用:将命令执行的结果,赋值给变量

``--注意:这个是反引号,键盘tab上面的按键(英文模式下)

$()

#!/bin/bash 
LIST1=`ls`
echo $LIST1

LIST2=$(pwd)
echo $LIST2
结果:
01test.sh 02test.sh 03test.sh 04test.sh 05test.sh 06text.sh 07test.sh 08test.sh a.out file file1 hello.c link link1 test.sh
/home/linux/stage2/day3

四、shell 中的注释

shell中本质上只有单行注释 使用 # 来表示

如果需要多行注释,可以使用下面的方法:

此方法利用了重定向符的规则,如果脚本的注释内容有输入的指令,结果可能就会有问题 不建议使用

标准的注释方法就是 在要注释的内容前面加 #

:<<EOF
    多行
    注释
EOF

或者

:<<!
    多行
    注释
!

五、shell中字符串的相关操作

5.1 求字符串的长度 -- strlen

#!/bin/bash 
S1="hello world"
echo ${#S1}  #11
结果:
11

5.2 字符串拷贝 -- strcpy

对于shell来说,字符串拷贝的本质就是变量的重新赋值

#!/bin/bash 
S1=hello
S2=world
echo S2=$S2
S2=$S1 
echo S2=$S1
结果:
S2=world
S2=hello

5.3 字符串拼接 -- strcat

#!/bin/bash 
S1=hello
S2=beijing
S1=${S1}${S2}
echo $S1 #hellobeijing

S3=good
S3="beijing"${S3}"nice"
echo $S3

S4=nihao
S5=ok
S4="${S4} ${S5}"
echo $S4 
结果:
hellobeijing
beijinggoodnice
nihao ok

5.4 截取字符 -- strtok

#!/bin/bash 

STRING="www.baidu.com"
#       0123456784321
#从第四个字符开始截取 截取到字符串结束
echo ${STRING:4} #baidu.com
echo "------------------------------------"

#从第四个开始截取 截取5个字符
echo ${STRING:4:5} #baidu
echo "------------------------------------"

#从倒数第六个开始截取 到字符串结束
echo ${STRING:0-6}
echo "------------------------------------"

#从倒数第六个开始截取 截取两个
echo ${STRING:0-6:2}
echo "------------------------------------"

#----上面四种比较常见,下面几种了解即可---------

STRING1="12345678987654321"

#从左到右 截取第一次出现 8 后面的内容
echo ${STRING1#*8} #987654321
echo "------------------------------------"

#从左到右 截取最后一次出现8 后面的内容
echo ${STRING1##*8} #7654321
echo "------------------------------------"

#从右向左 截取第一次出现8前面的内容
echo ${STRING1%8*} #123456789 
echo "------------------------------------"

#从右向左 截取最后一次出现8前面的内容
echo ${STRING1%%8*} #1234567 
echo "------------------------------------"
结果:
baidu.com
------------------------------------
baidu
------------------------------------
du.com
------------------------------------
du
------------------------------------
987654321
------------------------------------
7654321
------------------------------------
123456789
------------------------------------
1234567
------------------------------------

六、shell中的数组

shell中只有一维数组,使用()来表示

shell中的数组不用提前定义 可直接使用

shell中的数组元素也没有类型 默认都是字符串

#!/bin/bash 

ARR1=(aa bb cc dd) #成员之间用空格隔开

#访问数组成员的方式
# ${数组名[下标]}
echo ${ARR1[0]} #aa
echo ${ARR1[1]} #bb
echo ${ARR1[2]} #cc
echo ${ARR1[3]} #dd
echo "------------------------------------"

#数组成员重新赋值
ARR1[0]=hello
echo ${ARR1[0]} #hello 
echo "------------------------------------"

#访问数组所有成员
echo ${ARR1[@]}
echo ${ARR1[*]}
echo "------------------------------------"

#获取数组的个数 用#符号
echo ${#ARR1[@]}
echo ${#ARR1[*]}
echo "------------------------------------"

#数组成员的追加
ARR1=(${ARR1[@]} beijing shanghai)
echo ${ARR1[@]}
ARR1=(nihao ${ARR1[*]})
echo ${ARR1[@]}
echo "------------------------------------"


#不完全初始化
ARR2=([0]="hello" [3]="good")
echo ARR2[0]=${ARR2[0]} #hello
echo ARR2[1]=${ARR2[1]}
echo ARR2[2]=${ARR2[2]}
echo ARR2[3]=${ARR2[3]} #good
echo "------------------------------------"
结果:
aa
bb
cc
dd
------------------------------------
hello
------------------------------------
hello bb cc dd
hello bb cc dd
------------------------------------
4
4
------------------------------------
hello bb cc dd beijing shanghai
nihao hello bb cc dd beijing shanghai
------------------------------------
ARR2[0]=hello
ARR2[1]=
ARR2[2]=
ARR2[3]=good
------------------------------------

标签:bin,脚本,shell,echo,------------------------------------,命令,Linux,hello
From: https://blog.csdn.net/2303_78438820/article/details/142223150

相关文章

  • (Linux)嵌入式打卡第十一天
    指针数组简介概念:指针数组的本质是一个数组,只不过数组里面的每一个元素都是指针;定义格式:数组类型*数组名[成员个数];eg://定义一个数组,数组里面的每一个元素都是int*类型int*arr[5];指针数组使用#include<stdio.h>intmain(int......
  • Linux下载软件及卸载
    Linux发展史汤姆森·肯---UNIX之父斯托曼发起GNU计划莱纳斯linux之父现在主流的基于Linux的系统的发行版本centos、Ubuntu、Deepin(国产)、RedHat、...查看Ubuntu版本:cat/etc/issue查看内核版本:uname-a嵌入式层次结构一、用户空间命令脚本(命令的集合)app----......
  • linux 模拟题
    一,填空题linux主要是基于各种       来完成各种操作。打印当前所在的位置的命令是       linux的选项是哪两种        当前登录的用户tom,切换至用户家目录        想要使用命令本身的作用       ......
  • linux ln 命令
    ln是Linux系统中的一个命令,用于创建链接(link)或者链接一个目录。它主要有两种常见的用法:创建硬链接和符号链接(软链接)。1.创建硬链接:硬链接是在文件系统中创建一个文件的副本,它们共享相同的inode和数据块。当我们删除原始文件时,硬链接仍然会存在,并且可以继续访问文件的内容。创建......
  • Linux本地部署DbGate结合内网穿透工具实现无公网IP远程管理数据库
    文章目录前言1.安装Docker2.使用Docker拉取DbGate镜像3.创建并启动DbGate容器4.本地连接测试5.公网远程访问本地DbGate容器5.1内网穿透工具安装5.2创建远程连接公网地址5.3使用固定公网地址远程访问前言本文主要介绍如何在LinuxUbuntu系统中使用Docker部......
  • dedecms靶场(四种webshell姿势)
    姿势一:通过文件管理器上传WebShell1.登陆到后台点击【核心】【文件式管理器】【文件上传】将准备好的一句话木马上传2.点击访问成功蚁剑连接姿势二:修改模板文件拿WebShell1.点击【模板】【默认模板管理】【index.htm】【修改】在文件修改中添加一句话木马保存2.......
  • aspcms webshell漏洞复现
    1.【ip】/admin_aspcms/login.asp访问后台,admin123456登录2.点击【扩展功能】【幻灯片设置】点击【保存】开启代理进行抓包3.在抓取的数据包中修改slideTextStatus字段的值为以下代码并进行发包访问影响文件字段值1%25><%25Eval(Request(chr(65)))%25><%25密码是......
  • 常用的ADB命令
    ADB(AndroidDebugBridge)是一种功能强大的命令行工具,用于与Android设备进行通信和调试,这里来总结一下常用的ADB命令:一、常用的命令1.连接与设备管理adbdevices列出已连接的设备及其状态。adbconnect<IP地址>:<端口号>通过网络连接设备,适用于无线调试。adbdiscon......
  • Linux 性能调优之CPU上下文切换
    写在前面博文内容为Linux性能指标CPU上下文切换认知内容涉及:上下文认知,发生上下文切换的场景有哪些上下文指标信息查看,内核上下文切换事件跟踪,系统上下文切换统计上下文异常场景分析,CPU亲和性配置优化上下文理解不足小伙伴帮忙指正......
  • 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
    〇、前言本文通过将arco框架的前端项目,部署至CentOS7,并访问同服务器的WebAPI接口,来简单演示一下,如何将前端项目发布至Linux系统。关于ASP.NETWebAPI发布至Linux的步骤,可以参考博主过往文章:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos。一、简......