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
环境变量的声明、赋值:
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将替换成功的行保存至文件中
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
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
linux字符雨,linux周记相关推荐
- ()shi linux字符设备,Linux字符设备驱动基础(三)
Linux字符设备驱动基础(三) 6 创建设备节点 6.1 手动创建设备节点 查看申请的设备名及主设备号: cat /proc/devices # cat /proc/devices Characte ...
- linux 字符分隔符,Linux运维知识之awk,分隔符编辑截取字符
本文主要向你们介绍了Linux运维知识之awk,分隔符编辑截取字符,通过详细的内容向你们展现,希望对各位学习Linux运维知识有所帮助. 输入数组分隔符:awk的内嵌数组FS中储存了输入数组分隔符的值 ...
- linux设备模型 字符设备,Linux 字符设备驱动模型之框架解说
一.软件操作硬件设备模型 在进行嵌入式开发的过程中,在常做的事情就是驱动配置硬件设 备,然后根据功能需求使用硬件设备,实现功能的逻辑.如下图为其 相互之间的关系. 如上图所示: 驱动程序:主要作为操作 ...
- Linux字符界面操作进阶
字符界面最重要的内容当然还是要记住各种命令了!下面我们来介绍一个字符界面下各种常用的操作命令. 常用的文本目录操作命令: ls显示文件和目录 touch创建一个空文件或改变文件的创建时间 cp复制文件 ...
- Linux字符驱动开发学习总结
linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...
- linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件
1.字符设备 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 Linux内核中: a -- 使用cdev结构体来描述字符设备; b -- 通过其成员dev_t来定义设备号(分为主.次设 ...
- linux字符设备文件的打开操作,Linux字符设备驱动模型之字符设备初始化
因为Linux字符设备驱动主要依赖于struct cdev结构,原型为: 所以我们需要对所使用到的结构成员进行配置,驱动开发所使用到的结构成员分别为:[unsigned int count;].[de ...
- linux生成驱动编译的头文件,嵌入式Linux字符设备驱动——5生成字符设备节点
嵌入式Linux字符设备驱动开发流程--以LED为例 前言 留空 头文件 #include 查看系统设备类 ls /sys/class 设备类结构体 文件(路径):include/linux/devi ...
- linux字符设备驱动的 ioctl 幻数
在Linux字符设备驱动入门(一)中,我们实现了字符设备的简单读写字符功能,接下来我们要在这个基础上加入ioctl功能.首先,我们先来看看3.0内核下../include/linux/fs.h中fil ...
最新文章
- Linux常用命令笔记2---文件管理4
- linux 内核编译错误 undefined reference to '__mutex_lock_slowpath'
- MyBatisPlus条件构造器带条件删除delete使用
- 转录组差异表达分析工具Ballgown
- Service worker 的概念和用法
- Beetle简单构建TCP服务
- Matlab 画图函数
- 关于注册苹果开发者账号时登录遇到的提示未知错误
- jeecg ajax验证,jeecg权限模块学习
- 10分钟默写快速排序
- 基于模型的软件开发方法综述
- 【不三不四的脑洞】大龄程序猿 “奇葩” 相亲记 | 年中总“劫”
- html的ul和li元素
- 彻底解决The last packet successfully received from the server was * milliseconds ago问题
- http://myproducts.ca/here.php,外研(新标准)版
- mysql中 回滚事务是什么_什么是事务?什么是回滚事务,以及四种事务的隔离级别...
- 使用openssl的EVP接口使用sm2算法加解密等操作
- Dirac HD Sound介绍
- 郭明錤:2018年苹果将保留iPhone X镜头设计
- NLP(五十三)在Keras中使用英文Roberta模型实现文本分类
热门文章
- jsf 自定义属性_如何在JSF中实现自定义密码强度指示器
- activemq 持久订阅_ActiveMQ群集,持久订阅者和虚拟主题可助您一臂之力
- Kafka REST Proxy for MapR Streams入门
- netbeans代码提示_Java代码现代化的七个NetBeans提示
- java概述_Java 7功能概述
- 收到有关RabbitMQ集群分区的通知
- 开发人员需要了解的有关xPaaS的一切
- 红帽正式宣布发布JBoss BPM Suite 6和JBoss BRMS 6
- Java中已检查和未检查的异常
- 使用Spring 3 MVC处理表单