首页 运维 linux运维 分享一些linux运维的基础知识

分享一些linux运维的基础知识

Jun 27, 2017 am 10:10 AM
basic shell

1、回顾基础命令
2、脚本
3、变量
4、别名
5、条件判断
6、test判断
 
一、回顾基础命令
shutdown --关机/重启
exit --退出当前shell
rmdir --删除空目录
du --查看目录占用的存储空间
df --查看已 经挂载的文件系统的空间使用情况
ln --创建链接
cat --显示文件的所有内容
head --显示文件的头部
tail --显示文件的尾部
less --分屏/分页 显示文件内容
dirname --取出目录
basename --取出文件名
history --历史命令
1、ln
# ln -s [目标] [源 -- 创建软链接 (symbolic link)
# ln [目标] [源] -- 创建硬链接
2、cat
concatinate,把文件的内容按顺序连接起来,输出到标準输出。目前,只需要简单理解成显示文件的内容即可
# cat f1 -- 显示文件 f1 的内容到屏幕上
# cat -n f1 -- 显示文件的内容,并且加上行号
# cat -A f1 -- 打印出一些不可见的字符和位置标记
3、head
读取文件的头部
# head -n 3 /etc/passwd --读取文件前面三行
# head -n -3 /etc/passwd --读取文件时,丢掉文件的后三行;
# head -c 3 /etc/passwd --读取文件的前面三个字节
# head -c 10m /dev/zero > f1 --创建一个10M的文件
4、tail
读取文件的尾部
# tail -n 3 /etc/passwd -- 读取文件的后面三行
# tail -c 3 /etc/passwd -- 读取文件的后面三个字节
# tail -n +28 /etc/passwd -- 读取文件中从第28行开始直到结尾的所有行
# tail -f /etc/passwd -- 跟踪文件尾部内容的变化,常用观察日志文件的变化
5、history
# set -o history --启用命令历史功能 ,默认记录在文件 ~/.bash_history 中
# set +o history --关闭命令历史功能
# history --显示最近n条历史命令
注:以下三个变量用于控制命令历史的数量,以及是否记录时间戳
# vim /etc/bashrc --一般配置在该文件当中,用户级可配置在 ~/.bashrc
HISTSIZE=1000000 --最多存储多少条记录
HISTFILESIZE=2000000 --命令历史文件的最大尺寸
HISTTIMEFORMAT='[%Y-%m-%d %H:%M:%S] ' --命令历史的时间戳格式
export HISTSIZE HISTFILESIZE HISTTIMEFORMAT --把他们定义成环境变量
 
二、脚本
1、如何执行脚本
   # vim test.sh
    #!/bin/bash
  echo 'hello world'
# bash test.sh
# bash -x test.sh --显示脚本执行过程的信息
# sh test.sh
# source test.sh
# . test.sh
--上述兼为非标准执行脚本,脚本文件可以没有可执行权限;下列为标准执行:
# head -n 1 test.sh
#!/bin/bash
# chmod a+x test.sh
# ./test.sh
可直接将脚本放到 PATH 路径下,直接当命令运行
注意:shell 必须以 #! 开头,读作sha-bang,这两个字符用来标识文件类型,#! 用来告诉系统,这个文件里的内容将要用指定的解释器来解释,#! 之后的字符串将会被解释成一个程序,该程序用来解释当前文件。如果没有提供sha-bang这一行,当前 shell 将会自主猜测一个,但结果并不保证和预期一致;所以最好明确指定。./test.sh 的运行流程:
1、内核读取该脚本,检查文件类型标记,获取解释气得路径;
2、内核运行解释器;
3、解释器运行起来后,就打开脚本文件,解释其执行
linux 自带的诸多解释器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk
2、四则运算符
+ - * /
$(()) $[] expr let
# echo $((38%5)) --取余
# echo $[38/5] --求商
# echo $((10**2)) --10的平方
2.1、expr
# expr 14 % 9 --取余
# expr 34 / 9 --求商
# expr 30 \* 3 --使用乘号时,必须用反斜线屏蔽其特定含义
# expr index "sarasara" a --抓取第一个字符数字串出现的位置
# expr substr "this is a test" 3 5 --抓取字串
# expr length "this is a test" --计算字串长度
2.2、let
let计算工具用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来
# no=20
# let no++ --自增
# let no-- --自减
# let no+=10 --自增10
# let no=no+10 --同上
# let no-=15 --自减15
# let a=5+4 --变了a无须加 $ 符号
# echo $a
3、shell配置文件
/etc/profile --全局配置文件,
/etc/bashrc --全局配置文件,一般用来定义环境变了
~/.bash_profile --用户配置文件
~/.bashrc --用户配置文件
~/.bash_logout --用户配置文件,login shell 退出时会读取该文件
4、shell种类
根据shell 的启动方式不同,可以大致地把shell分为以下几种:
login shell --在文本界面登录,如su -;读取shell配置文件顺序如下:
/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc
interactive shell --gnome-terminal 中默认的shell;读取shell配置文件顺序如下:
~/.bashrc —— /etc/bashrc
non-interactive shell --用来运行脚本的shell
 
4.1、在~/.bashrc 中设置一个变量 v,要求该变量只出现在交互shell中
# vim ~/.bash_profile --标识shell 是否登录shell
LOGINSHELL=1
# vim ~/.bashrc --不是登录shell 时,才设置变量
if [ "$LOGINSHELL" != 1 ];then
v="interactive shell only"
fi
5、命令优先级
别名 > 函数 > 内部命令 > 外部命令
6、shell特殊字符
对于shell来说,有些字符除了它本身的意义之外,还有特殊的意义,如果要在字符串中包含特殊字符,就必须通过引用(quoting)的方法来去除特殊字符的特殊意义。以下列出的是部分特殊字符:
~ --不被引用的话将会被shell 替换成家目录
& --把程序放到后台执行
$ --dollar 符,可用于参数展开
${} --变量处理,可对变量的内容做替换,删除,抽取等操作
* --星号,通配符,匹配所有字符
? --问号,通配符,匹配任意一个字符
() --命令组
{} --命令组
"" --双引号,引用符号;可以去除大多数特殊字符的特殊意义,除 $;`;!;\ 外
'' --单引号,引用符号;可以去除所有特殊字符的特殊意义,除自己本身
. --相当于source命令;可用于设置隐藏文件;用于目录名时,代表当前目录
/ --斜杠,路径分隔符,根目录
\ --反斜杠,可用来去除单个字符的特殊意义,也就是所谓的“转义“,也可用于表示特殊字符,如换行符 (\n)
`` --反撇号,命令优先执行,和$()含义是一样的;如果有嵌套那么不能用``号
$(())和 $[] --运算符
: --空命令
; --命令分割;不去考虑上一条命令所执行的结果
;; --case 选项的结束符
# --注释
&& --逻辑与;可对命令进行分割;但是需要考虑上一条命令所执行的结果
|| --逻辑或;可对命令进行分割;不需要考虑上一条命令执行结果
----------------------------------------------------------------
# echo 'hello world;' "hello world;" hello\ world; --用三种引用符合去除空格的特殊意义
 
三、变量
1、本地变量
当前用户自定义的变量;当前进程有效,其他进程或者当前进程的子进程无效
# a=123
# echo $a
# unset a --取消变了定义
2、环境变量
当前进程有效,并且能被子进程调用;
# env --查看当前系统所有环境变量
# set --查看当前系统所有环境变量和临时变量
# echo $PATH -- 显示PATH变量的内容
# export hi=hello --定义环境变量;工作当中一般喜欢把即用的环境变了写在 ~/.bash_profile
几个常见环境变量:
PATH --影响命令的搜索
PS1 --命令提示符
TMOUT --超时时间,单位为S,时间一到,自动退出 interactive shell ;所以最好将其设为只读变量 # declare -r TMOUT=60
HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT --命令历史
 
3、系统变量
又叫bash中内置的变量;shell本身已经固定好的一些变量
$# --脚本后面接参数个数
$* --脚本后面所有的参数(被双引号包含则被当成一个字符串输出)
$@ --脚本后面所有的参数(被双引号包含还是保留各参数的边界)
$? --上一条命令执行后返回的状态
$$ --当前进程的进程号
$! --后台运行的最后一个进程号
!$ --最后一条命令或参数
!! --最后一条命令的历史记录
$0 --当前程序的程序名或进程
$1~$n --位置参数变量
#!/bin/bash
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$1 = $2"
echo "\$7 = $7"
echo "\$11 = ${11}"
# chmod a+x test.sh
# ./test.sh a b c
4、变量定义
a、默认下,变量类型没啥要求。可以给变量赋任何值,但是等号两边不能有任何的空格
b、变量名区分大小写
c、变量名不能以数字或者特殊符号开头
d、将命令所执行的结果保存到变量
5、调用变量
# a=$(hostname)
# A=123456789
# echo $A
# echo ${A:2:3}
6、数组
数组的定义:用小括号扩起来定义数组,括号里的元素用空格隔开
# array[0]=var1
# array[1]=var2
# array[2]=var3
# array=(var1 var2 var3) --等同于上述三行,定义数组
# echo ${array[0]} --取数组第一个值
# echo ${array[*]} --取数组所有值
# echo ${array[@]} --同上
7、declare 定义有类型的变量
-i --将变量看成整数
-r --定义只读变量
-x --将变量导出到环境变量
-a --将变量看成数组
8、read 交互式定义变量
-p --提示信息
-n --字符数
-t --超时
-s --不显示
 
四、別名
命令的別名,顾名思义,就是可以通过別的名字来执行命令。通常用于简化命令的输入,或者为命令增加一些参数,或者是单纯地为命令添加多个访问名称。
# alias cp mv rm --查看cp, mv, rm这三个命令是不是別名
# unalias rm -- 删除别名 rm
# alias cdyum='cd /data/yum' -- 简化输入
# alias rm='rm -i' -- 为命令增加参数
-- 通常別名是在配置文件~/.bashrc 中设置的
1、验证别名、函数、内部命令、外部命令的优先级别
# alias pwd='echo it is an alias' --创建一个 pwd 别名
# function pwd() { echo "this is a function"; } --创建一个 pwd 函数
# pwd --运行pwd,发现输出是别名
# unalias pwd --删除别名,再运行 pwd,发现输出是函数内容
# unset pwd --删除函数,再运行 pwd,才是输出当前所在路径
所以:别名 > 函数 > 内部命令 > 外部命令
 
五、条件判断
# vim test
----------------------
if [ 条件 ];then
command...
fi
----------------------
if [ 条件 ];then
command...
else
command...
fi
----------------------
if [ 条件1 ];then
command1...
elif [ 条件2 ];then
command2...
else
command3...
fi
----------------------
if [ 条件1 ];then
command1...
if [ 条件2 ];then
command2...
fi
else
if [ 条件3 ];then
command3...
elif [ 条件4 ];then
command4...
else
command5...
fi
fi
 
六、test判断
test == [ judge ]
1、文件存在与否的判断
# vim test.sh
#!/bin/bash
if test -e $1;then --是否存在;还有 -p;-c;-b;-L
if [ -f $1 ];then --使用 [ judge ] 替换
if test -f $1;then --是否存在并且为普通文件
if test -d $1;then --是否存在并且为目录
if test -S $1;then --是否存在并且套接字文件
echo 'YES'
fi
# chmod a+x test.sh
# ./test.sh [path]
2、文件权限相关判断
-r;-w;-x --是否有读,写,执行权限
-u --是否有suid
-g --是否有sgid
-k --是否有t位
-s --是否为空白文件,-s表示非空;! -s 空文件
3、字符串判断
= --等于则为真,等于号两边必须有空格;也可以是:==
!= --不相等则为真
-z 字符串 --字符串的长度为零则为真
-n 字符串 --字符串的长度不为零则为真
if test $num1 = $num2;then
if [ $num1 = $num2 ];then
if [ -n $num1 ];then
4、数值判断
-eq --等于则为真
-ne --不等于则为真
-gt --大于则为真
-ge --大于等于则为真
-lt --小于则为真
-le --小于等于则为真
if test $[num1] -eq $[num2];then
if [ $[num1] -eq $[num2] ];then
5、逻辑判断
-a 和 && --逻辑与
-o 和 || --逻辑或
! --非
优先级:与>或>非
if test -e $1 -o -e $2;then --判断是否有一个文件存在
if [ -e $1 -o -e $2 ];then --同上
if test ! -e $1 -o ! -e $2;then --判断两个文件没有同时存在
if [ ! -e $1 -o ! -e $2 ];then --同上
 

以上是分享一些linux运维的基础知识的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在 Windows 11 上安装经典 Shell? 如何在 Windows 11 上安装经典 Shell? Apr 21, 2023 pm 09:13 PM

定制您的操作系统是让您的日常生活更加愉快的绝佳方式。您可以更改用户界面、应用自定义主题、添加小部件等等。因此,我们今天将向您展示如何在Windows11上安装ClassicShell。该程序已经存在了很长时间,并允许您修改操作系统。志愿者现在已经开始运营该组织,该组织于2017年解散。新项目名为OpenShell,目前在Github上可供感兴趣的人使用。&a

PowerShell 部署失败并出现 HRESULT 0x80073D02 问题修复 PowerShell 部署失败并出现 HRESULT 0x80073D02 问题修复 May 10, 2023 am 11:02 AM

您在运行脚本时是否看到此错误消息“Add-AppxPackage:部署失败,HRESULT:0x80073D02,无法安装该包,因为它修改的资源当前正在使用中。PowerShell中出现错误0x80073D02…”?如错误消息所述,当用户在前一个进程运行时尝试重新注册一个或所有WindowsShellExperienceHost应用程序时,确实会发生这种情况。我们已经获得了一些简单的解决方案来快速解决这个问题。修复1–终止体验主机进程您必须在执行powershell命令之前结束

Explorer.exe 在系统启动时不启动 [修复] Explorer.exe 在系统启动时不启动 [修复] Jun 03, 2023 am 08:31 AM

如今,许多Windows用户开始遇到严重的Windows系统问题。问题是系统加载后Explorer.exe无法启动,用户无法打开文件或文件夹。虽然,Windows用户在某些情况下可以使用命令提示符手动打开Windows资源管理器,并且每次系统重新启动或系统启动后都必须这样做。这可能是有问题的,并且是由于下面提到的以下因素造成的。损坏的系统文件。启用快速启动设置。过时或有问题的显示驱动程序。对系统中的某些服务进行了更改。修改后的注册表文件。请记住以上所有因素,我们提出了一些肯定会对用户有所帮助

Linux快速删除文件末尾行的操作步骤 Linux快速删除文件末尾行的操作步骤 Mar 01, 2024 pm 09:36 PM

Linux系统下在处理文件时,有时候需要删除文件末尾的行。这种操作在实际应用中很常见,可以通过一些简单的命令来实现。本文将介绍在Linux系统中快速删除文件末尾行的操作步骤,同时提供具体的代码示例。步骤一:查看文件末尾行在进行删除操作之前,首先需要确认文件的末尾行是哪一行。可以使用tail命令来查看文件的末尾行,具体命令如下:tail-n1filena

以下是 Open Shell Windows 11 无法正常工作问题的修复 以下是 Open Shell Windows 11 无法正常工作问题的修复 Apr 14, 2023 pm 02:07 PM

无法在Windows 11上运行的 Open shell 并不是一个新问题,并且自从这个新操作系统问世以来一直困扰着用户。Open-Shell Windows 11 不工作问题的原因并不具体。它可能是由程序中的意外错误、病毒或恶意软件的存在或损坏的系统文件引起的。对于那些不知道的人,Open-Shell 是 2017 年停产的 Classic Shell 的替代品。您可以查看我们的教程,了解如何在 Windows 11 上安装 Classic Shell。如何替换 Windows 11 的开始菜

在 Windows 上运行 shell 脚本文件的不同方法 在 Windows 上运行 shell 脚本文件的不同方法 Apr 13, 2023 am 11:58 AM

适用于 Linux 的 Windows 子系统第一种选择是使用适用于 Linux 或 WSL 的 Windows 子系统,这是一个兼容层,用于在 Windows 系统上本地运行 Linux 二进制可执行文件。它适用于大多数场景,允许您在 Windows 11/10 中运行 shell 脚本。WSL 不会自动可用,因此您必须通过 Windows 设备的开发人员设置启用它。您可以通过转到设置 > 更新和安全 > 对于开发人员来完成。切换到开发人员模式并通过选择是确认提示。接下来,查找 W

超硬核!11个非常实用的 Python 和 Shell 拿来就用脚本实例! 超硬核!11个非常实用的 Python 和 Shell 拿来就用脚本实例! Apr 12, 2023 pm 01:52 PM

Python 脚本部分实例:企业微信告警、FTP 客户端、SSH 客户端、Saltstack 客户端、vCenter 客户端、获取域名 ssl 证书过期时间、发送今天的天气预报以及未来的天气趋势图;Shell 脚本部分实例:SVN 完整备份、Zabbix 监控用户密码过期、构建本地 YUM 以及上篇文章中有读者的需求(负载高时,查出占用比较高的进程脚本并存储或推送通知);篇幅有些长,还请大家耐心翻到文末,毕竟有彩蛋。Python 脚本部分企业微信告警此脚本通过企业微信应用,进行微信告警,可用于

如何安装 Open Shell 以恢复 Windows 11 上的经典开始菜单 如何安装 Open Shell 以恢复 Windows 11 上的经典开始菜单 Apr 18, 2023 pm 10:10 PM

OpenShell是一个免费的软件实用程序,可用于自定义Windows11开始菜单,使其类似于经典风格的菜单或Windows7样式的菜单。以前版本的Windows上的开始菜单为用户提供了一种浏览其系统内容的简单方法。基本上,OpenShell是ClassicShell的替代品,它提供了不同的用户界面元素,有助于从以前的Windows版本获取后一个版本的功能。一旦ClassicShell的开发在2017年停止,它就由GitHub志愿者以OpenShell的名义维护和开发。它与Win

See all articles