linux字符雨,linux周记

shell脚本基础

格式要求:首行shebaang机制

#!/bin/bash

#!/usr/bin/python

#!/usr/bin/perl

shell脚本用途:

自动化常用命令

执行系统管理和故障排除

创建简单的应用程序

处理文本或文件

bash中变量的种类

局部变量:生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效

环境变量:生效范围为当前shell进程及其子进程

本地变量:生效范围为当前shell进程中某代码片段,通常指函数

位置变量:$1,$2,$3,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

特殊变量:$?,$0,$,$@,$#,$$,$!

变量赋值:  name=root   变量叠加name="$name"hello

变量引用:  $name 或者 ${name}

弱引用:   " " 其中的变量引用会被替换为变量值

强引用:   ' ' 其中的变量引用不会被替换为变量值,而保持原字符串

set:    显示已定义的所有变量

unset name: 删除变量

例:编写脚本显示当前主机信息

#!/bin/bash

aa=$[RANDOM%7+31]

bb="\e[1;${aa}m"

cc="\e[0m"

ipv4=$(ifconfig|sed -n '2p'|sed -r "s/.inet //"|sed -r "s/ .//")

echo "当前主机系统信息如下:"

echo -e 主机名: $bb$(hostname)$cc

echo -e ipv4地址:$bb$ipv4$cc

echo -e 操作系统版本: $bb$(cat /etc/redhat-release|cut -d. -f1-2)$cc

echo -e 内核版本 $bb$(uname -r)$cc

echo -e CPU型号:$bb$(lscpu |grep "Model name"|tail -n1|tr -s " "|cut -d ":" -f2)$cc

echo -e 内存大小:$bb$(free -mh|head -n2|tail -n1|tr -s " "|cut -d " " -f2)$cc

echo -e 硬盘容量:$bb$(fdisk -l|head -n2|tail -n1|cut -d, -f1|cut -d " " -f2-4)$cc

48131aa355f5375426d480aa8316af51.png

731b38a50883f85c67a560d5a5ece4f4.png

环境变量的声明、赋值:

export name=VALUE

显示所有环境变量:

env、printenv、export、declare -x

删除变量:

unset name

BASH内建的环境变量:

PATH、SHELL、USER、UID、HOME、PWD、SHLVL、LANG、MAIL、HOSTNAME、HISTSIZE、_下划线

只读变量:只能声明,但不能修改和删除

声明只读变量:

readonly name 、declare -r name

查看只读变量:

readonly -p

$1,$2,$3,..对应第1、第2、第3的参数

$0,   代表命令本身

$,   传递给脚本的所有参数,全部参数合为一个字符串

$@,  传递给脚本的所有参数,每个参数为独立字符串

$#,    传递给脚本的参数的个数

set --   清空所有位置变量

$?     进程使用退出状态来报告成功或失败,0代表成功,1-255代表失败

bash有内建的随机数生成器变量:$RANDOM(0-32767)

例:计算/etc/passwd文件中第10和第20个用户的uid之和

##!/bin/bash

id1=$(cat /etc/passwd|head -n10|tail -n1|cut -d: -f3)

id2=$(cat /etc/passwd|head -n20|tail -n1|cut -d: -f3)

sum=$(($id1+$id2))

echo $sum

逻辑运算

true 1 , false 0

与:

1 与 1 = 1

1 与 0 = 0

0 与 1 = 0

0 与 0 = 0

1 或 1 = 1

1 或 0 = 1

0 或 1 = 1

0 或 0 = 0

!

测试命令: test EXPRESSION、[ EXPRESSION ] 、[[ EXPRESSION ]]

bash的数值测试

-v VAR 变量VAR是否设置

-gt 是否大于

-ge 是否大于等于

-eq 是否等于

-ne 是否不等于

-lt 是否小于

-le 是否小于等于

bash的字符串测试

= 是否等于

> ascii码是否大于ascii码

< 是否小于

!= 是否不等于

=~ 左侧字符串是否能够被右侧的PATTERN,此表达式一般用于[[]]中;扩展的正则表达式。

-z 字符串是否为空,空为真

-n 字符串是否不为空,不空为真 (用于字符串比较时用到的操作都应该使用引号)

bash的文件测试

-e 判断文件是否存在,存在为真

-b 判断是否为块设备文件

-c 判断是否为字符设备文件

-d 判断是否为目录文件

-f 判断是否为普通文件

-L或-h判断是否为符号连接文件

-p 判断是否为管道文件

-S 判断是否为套接字文件

bash的文件权限测试

-r 判断是否可读

-w 判断是否可写

-x 判断是否可执行

-u 判断是否拥有suid权限

-g 判断是否拥有sgid权限

-k 判断是否拥有sticky权限

bash的文件属性测试

-s 是否存在并且非空

-t 文件描述符是否在某终端已经打开

-N 文件自从上一次被读取之后是否被修改过

-O 当前有效用户是否为文件属主

-G 当前有效用户是否为文件属组

file1 -ef file2   file1是否是file2的硬链接

file1 -nt file2   file1是否比file2新

file1 -ot file2   file1是否比file2旧

bash的组合测试条件

EXPRESSION1 -a EXPRESSION2  并且

EXPRESSION1 -o EXPRESSION2  或者

COMMAND1 && COMMAND2  并且,短路与

COMMAND1 || COMMAND2  或者,短路或

!COMMAND 非

如 :[ -f "$FILE" ]&&[[ "$FILE" =~ .*.sh$ ]]

read输入命令

-p 指定要显示的提示

-s 静默输入,一般用于密码

-n 指定输入的字符长度

-d ‘字符’ 输入结束符

-t 等待输入的时间

echo abc | { read x y z;echo $x$y$z;}  使用管道 read会开启子shell

条件选择if语句

单分支

if 判断条件;then

条件为真的分支代码

fi

例:

#!/bin/bash

sda5=$(df -h|grep /dev/sda5|awk '{print$5}'|tr -d "%")

if [ $sda5 -ge 80 ]

then

echo "warning! /dev/sda5 is full"

fi

双分支

if 判断条件;then

条件为真的分支代码

else

条件为假的分支代码

fi

例:

#!/bin/bash

date=$(date "+%y%m%d")

size=$(du -sh /etc)

if [ -d /tmp/back ]

then

echo "date:$date">/tmp/back/info.log

echo "size:$size">>/tmp/back/info.log

cd /tmp/back

tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null

rm -rf /tmp/back/info.log

else

mkdir /tmp/back

echo "date:$date">/tmp/back/info.log

echo "size:$size">>/tmp/back/info.log

cd /tmp/back

tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null

rm -rf /tmp/back/info.log

fi

多分支

if 判断条件1;then

条件为真的分支代码

elif 判断条件2;then

条件2为真的分支代码

elif 判断条件3;then

条件3为真的分支代码

else

以上条件都为假的分支代码

fi

条件判断;case语句

case $变量 in

"选项1")

命令1

;;

"选项2")

命令2

;;

*)

命令3

;;

esac

bash的配置文件

全局配置:

/etc/profile

/etc/profile.d/.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc

shell 登录两种方式

交互式登录:

执行顺序:/etc/profile --> /etc/profile.d/.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录:

执行顺序:/etc/profile.d/*.sh --> /etc/bashrc --> ~/.bashrc

profile类:为交互式登录的shell提供配置

bashrc类:为非交互式和交互式登录的shell提供配置

local命令

-i 不区分大小写的搜索

-n N 只列举前N个匹配项目

-r 使用基本正则表达式

find 路径 条件 动作

-maxdepth 最大搜索深度

-mindepth 最小搜索深度

-depth 先处理目录里文件,再处理目录

-regex 正则表达式

-path 不搜索目录里文件

-perm 600 精准权限查找

-perm -444 u g o 三者都有读权限

-perm + centos7改为/

-perm /222 u g o 三者有一个有写权限就可以

-ok-exec {} \; 对查找的结果进行处理

-empty 空

参数替换 xargs

echo {1..100}|xargs -n1

echo user{1..10}|xargs -n1 useradd

压缩、解压缩

compress

-d 解压缩

-c 结果输出至标准输出,不删除源文件

-v 显示详情

zcat file.z  zcat file.gz  bzcat file.bz2  xzcat file.xz  不显示解压缩的前提下查看文本文件内容

cat m | gzip > m.gz

lscpu | gzip > cpu.gz

bzip2 -k 保留原文件

tar -zcvf   .tar.gz

tar -jcvf   .tar.bz2

tar -Jcvf   .tar.xz

split 分割一个文件为多个文件

rpm2cpio 包路径 | cpio -idv ./路径

-t预览

ldd 查看依赖的库

文本处理工具sed

选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-r 支持使用扩展正则表达式

-i 原文编辑

-i.bak 备份文件并原处编辑

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环

p 打印当前模式空间内容,追加到默认输出之后

a\ 在指定行后面追加文本,

i\ 在前面插入文本

c\ 替换行为单行或多行文本

w 保存至指定文件

s/// 替换查找  g 行内全局替换  p显示替换成功的行   w将替换成功的行保存至文件中

ed540272749c1aba94d7a0d4a046f35b.png

rpm包管理

rpm -ivh 安装并显示详细信息

rpm -qa 显示所有包

rpm -qf 查询指定文件在哪个包里

rpm -ql 查询安装位置

rpm -qR 查询依赖

rpm -e 卸载

rpm -V 包校验

yum 管理rpm包

yum源支持文件服务器 http、https、ftp、file

yum配置文件 /etc/yum.repos.d/.repo

4dda326a3bdd7fe7473ee3bee7ec096e.png

yum -y install 包名  安装软件

yum search 包名   查询软件

yum -y reinstall 重新安装

yum repolist 显示仓库列表

yum remove 卸载程序包

yum update 升级程序包

yum info 查看程序包

yum clean all 清除缓存

ym history 查看安装历史

yum history info

yum history undo 撤销

yum history redo 重装

createrrepo 生成repodate

curl IP 查看网页内容

yum groupinstall......

dnf 新一代rpm软件包管理器

安装所需软件包

dnf-conf-0.6.4-2.sdl7.noarch.rpm

dnf-0.6.4-2.sdl7.noarch.rpm

python-dnf-0.6.4-2.sdl7.noarch.rpm

配置文件:/etc/dnf/dnf.conf

仓库文件:/etc/yum.repos.d/.repo

日志:/var/log/dnf.rpm.log

编译安装

C语言源代码编译安装三步骤:

1、./configure

2、make 根据Makefile文件,构建应用程序

3、make install 复制文件到相应路径

开发工具:

autoconf: 生成configure脚本

automake:生成Makefile.in

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【音视频安卓开发 (一)】AndroidStudio项目配置权限、jni库路径、ABI、Cmake

cmake项目配置 # For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum version of CMake required to build the native library.cmake_minimum_require…

string index out of range_Java 12 骚操作, String居然还能这样玩!

坐稳了&#xff0c;准备起飞&#xff01;1、transformtransform&#xff1a;即字符串转换&#xff0c;来看下 transform 的实现源码&#xff1a;public <R> R transform(Function<? super String, ? extends R> f) {return f.apply(this); }传入一个函数式接口 F…

弹性架构_实践中的弹性基础架构

弹性架构几周前&#xff0c;我获得了一个难得的机会&#xff0c;可以在基础设施领域中沾沾自喜。 在JVM内部的深入了解下&#xff0c;我每天的工作经历发生了有趣的变化&#xff0c;我想与您分享动机和成果。 希望它可以启发类似的问题类别。 背景 我将从解释需要解决方案的上…

linux的ctrl alt f6的作用,Linux(Centous6.4)操作系统中,快捷键Alt+Ctrl+F10是什么作用?...

满意答案John_05152017.07.16一些常用快捷键切换到第一个文本终端。在Linux 下你可以有多达六个不同的终端。这个命令的意思是&#xff1a;“同时按住键和键&#xff0c;然后按键&#xff0c;再释放所有的键”。(n1..6)&#xff1a;切换到第n个文本终端。(你也可以使用不是很经…

【TCP丢包重传】

TCP丢包重传机制如果在网络状况最糟糕的情况下就会造成极大的延迟。或者超过2min断开连接。如果这种场景下可以采用UDP。UDP需要解决包的重新排序&#xff0c;丢包等问题。

前端H5怎么切换语言_「自学系列一」HTML5大前端学习路线+视频教程完整版

全新Java、HTML5前端、大数据、Python爬虫、全链UI设计、软件测试、Unity 3D、Go语言等多个技术方向的全套视频。面对这么多的知识点&#xff0c;有的盆友就麻爪了……我是谁&#xff1f;我该从哪里开始看&#xff1f;我该怎么看&#xff1f;我该看多少&#xff1f;这&#xff…

r语言在linux下取数据,菜鸟第一步,跪在数据处:R语言读取数据

1. 温故知坑实践是学习知识的最好途径。之前我讲的内容都非常非常基础&#xff0c;包括&#xff1a;(1)什么是R语言&#xff1f;R语言和Rstudio软件的安装&#xff0c;Rstudio的界面介绍&#xff1b;(2)R语言的基本逻辑&#xff0c;基本数据类型&#xff1b;(3)ggplot基础绘图&…

c语言 桌面程序_C语言编程工具:Dev - C++ 简单安装和使用!新手福利!

工欲善其事&#xff0c;必先利其器。——《论语》# 写在前面有关编译器和开发工具可以查看历史文章。# 下载Dev-C操作系统建议Windows 7或10&#xff0c;直接搜索Dev-C下载&#xff0c;或者sourceforge官网下载链接&#xff1a;https://sourceforge.net/projects/orwelldevcpp/…

stub_AccuREST Stub Runner发布

stub最近发布时间不错&#xff01; 我在Too Much Coding博客上的博客更多是关于发布&#xff0c;然后是关于任何具体主题;&#xff09; 在作为Brixton RC1的一部分发布Spring Cloud Sleuth之后&#xff0c;我们刚刚发布了AccuREST 1.0.4版本。 我们修复了一些错误&#xff0c;…

kali linux wifi监听模式,无线渗透教程1:监听无线网络

第一&#xff1a;配置管理无线网卡1.1这里&#xff0c;我们使用tplink wn722n, kali linux插上即用&#xff0c;无需安装驱动。1.2Vmare虚拟机配置如下&#xff1a;如网卡插入到电脑后&#xff0c;先将虚拟机设置成桥接模式之后对虚拟机进行配置之后呢&#xff0c;我们在终端窗…

matlab的7.3版本是什么_王者荣耀:玩不好元歌的3大原因,无论什么版本,元歌起码T1.5_电竞...

很多高段位元歌并不是以秀为核心的&#xff0c;而是他们就像一个冷静的杀手&#xff0c;在一闪即逝却又最合适的时机里&#xff0c;他能正确的选择进场的方式&#xff0c;以及击杀的方式。说白了&#xff0c;元歌的进场手段并没有多少&#xff0c;什么时候用傀儡433上去锁人&am…

【WebRTC---入门篇】(一)WebRTC整体架构

1.绿色部分是WebRTC核心部分(核心库) 2.紫色部分是JS提供的API(应用层) 整体是应用层调用核心层。 核心层,第一层 C++ API 提供给外面的接口。最主要的是(PeerConnedtion 对等连接)。 核心层,第二层 Session 上下文管理层(音视频)。 核心层,第三层[最重要的…

python 创建空的numpy数组_数据分析-NumPy内置函数创建数组

微信公众号&#xff1a;yale记关注可了解更多的教程问题或建议&#xff0c;请公众号留言。背景介绍今天学习使用numpy的内置函数arange()、ones()、zeros()、linspace() 等内置函数创建数组&#xff0c;对于使用数据结构和多维列表非常有用&#xff0c;可以节省大量的时间。入门…

使用t-sql语句修改表中的某些数据及数据类型。_数据库基本理论详细介绍

1、数据库范式第一范式&#xff1a;列不可分&#xff0c;eg:【联系人】(姓名&#xff0c;性别&#xff0c;电话)&#xff0c;一个联系人有家庭电话和公司电话&#xff0c;那么这种表结构设计就没有达到 1NF&#xff1b;第二范式&#xff1a;有主键&#xff0c;保证完全依赖。eg…

【WebRTC---入门篇】(三)WebRTC运行机制

轨和流 Track 轨&#xff1a;音频轨和视频轨是不相交的 MediaStream 媒体流&#xff1a;中包含多个音视频轨 WebRTC重要类 MediaStream 负责添加N个轨&#xff0c;加入到RTCPeerConnection RTCPeerConnection 核心 RTCDataChannel 非音视频数据&#xff0c;通过RTCP…

a - 数据结构实验之串一:kmp简单应用_【在线教学示范课案例】数据结构(刘航)...

一、教师简介刘航&#xff0c;网络空间安全学院教师&#xff0c;本科生“数据结构”、“算法设计综合实验” 和研究生“算法设计与优化”课程的主讲教师。近年来积极开展了教学与考核模式改革、探究式/研究型课程等课程改革探索&#xff0c;探索课程、学科竞赛和项目相结合的科…

【WebRTC---入门篇】(四)WebRTC设备管理

enumerateDevices API用来获取音视频设备 JS使用单线程处理&#xff0c;为了避免阻塞。使用异步调用Promise。handle为处理函数&#xff0c;处理主要逻辑。成功调用resolve&#xff1b;失败调用reject。Promise可以注册两个方法 then(逻辑处理成功会收到on_resolve) 和 catch(…

【音视频安卓开发 (六)】Android GLSurfaceView播放视频

GLSurfaceView渲染RGB的数据,利用双缓冲空间机制。取出缓冲地址,将要渲染的数据copy到缓冲地址. 获取Surface Java部分&#xff1a; SurfaceView控件设置到界面中显示 SurfaceView定义一个类来实现 package com.example.hello;import android.content.Context; import android…

什么是openstack_您在OpenStack Summit 2016上错过了什么

什么是openstack今年&#xff0c;我第一次参加了4月25日至29日在德克萨斯州奥斯汀举行的OpenStack峰会。 今天结束了&#xff0c;我要回家了&#xff0c;我想回顾一下&#xff0c;从我的角度分享你错过的事情。 作为以应用程序开发人员为重点的技术传播者&#xff0c;转移到包…