linux常用的语言就是shell和python,首先我们得先了解语言的概念
<<-EOF
EOF
编写一个简单的bash档如下:
我们可以看到用./执行bash档时,没有进入到/home目录下,这种我们称为 在子shell中执行 ,其不影响当前shell的状况(有时候执行成功没有效果的原因)。但是无论是. 执行还是source执行我们都成功进入了home路径下,这我们称之为 在当前shell执行
su nologinshell 不加载用户的shell
su - loginshell 加载用户的shell
可以很明显的看出来,当用不加载用户的shell加载用户时,是不会具有当前加载用户的权限的,很像windows中的游客模式
history历史记录缓存
~/.bash_history退出后写入缓存
~/.bash_logout退出后执行
在这一层,顺带按图索骥,理解一下linux系统开机的历程。红字:系统层开机/切换用户历程;蓝字:用户层开机/切换用户历程;黄字:用户层关机历程。
曾经玩过一个游戏:在用户指令关机时,会有一辆小火车开过,所以我们可以把调用小火车开过的程式调用写在?
2、命令的历史记忆功能:上下键、!number 执行第多少条命令、
!string 找到最近以string开头的命令、!&上一个命令最后的参数、
!! 执行上一个命令、^R 搜索历史命令
3、别名功能:alias查看别名、unalias取消别名、(命名前加\斜线跳过别名)
alias xx=’xx’ 定义临时别名、vim ~/.bashrc定义永久别名
4.快捷键:^D退出、^A 光标移动到命令最前、^E光标移动到命令最后、
^L 清屏、^U 往前的删掉、^K往后的删掉、^Y撤销、^M 回车
^S 锁屏、^Q 解除锁屏
5.前后台作业控制:&后台不保留、nohup 后台保留、screen
&& ||(命令返回值echo &?)
*任意多个字符
?任意一个字符
[]匹配括号内任意一个字符
()在子shell中执行
{}集合
\转义字符
注意点:echo -e “a\tb”
$? 前一条命令的执行成功与否
$1 传入的第一个参数 $2 $3 位置变量
没有使用环境变量的必要性
练习内容:读取用户指定文档的ip连通性
bc计算器
假设我们定义了一个变量为:
记忆的方法为:
利用${ } 还可针对不同的变数状态赋值(没设定、空值、非空值):
在某些时刻,几乎所有的程序员都要与其程序所处 *** 作系统中的系统调用和程序库打交道。本书主要讨论如何编写Linux系统软件——代码位于底层,并且直接跟内核及核心系统程序库对话。《Linux系统编程》描述了使用标准接口包括使用Linux独有的高级接口时,在功能和性能之间如何进行权衡取舍的策略。
本书主题包括:
· 读写文件以及其他文件I/O *** 作,包括Linux内核如何实现和管理文件I/O,内存映射与优化技术
· 进程管理的系统调用,包括实时进程
· 文件与目录——创建、移动、复制、删除和管理
· 内存管理——内存分配接口,管理内存,以及优化内存访问
· 信号及其在Unix系统中的角色,以及基本和高级信号接口
· 时间、休眠和时钟管理,从基础开始讲述,并且涵盖POSIX时钟和高精度计时器
拥有《Linux系统编程》,你将从理论和应用的角度深入了解Linux,可以最大限度地利用系统的潜能。
Linux中多线程编程拥有提高应用程序的响应、使多cpu系统更加有效等优点,下面小编将通过Linux下shell多线程编程的例子给大家讲解下多线程编程的过程,一起来了解下吧。
#!/bin/bash
#———————————————————————————–
# 此例子说明了一种用wait、read命令模拟多线程的一种技巧
# 此技巧往往用于多主机检查,比如ssh登录、ping等等这种单进程比较慢而不耗费cpu的情况
# 还说明了多线程的控制
#———————————————————————————–
function a_sub
{
# 此处定义一个函数,作为一个线程(子进程)
sleep 3 # 线程的作用是sleep 3s
}
tmp_fifofile=“/tmp/$.fifo” mkfifo $tmp_fifofile # 新建一个fifo类型的文件
exec 6《》$tmp_fifofile # 将fd6指向fifo类型
rm $tmp_fifofile thread=15 # 此处定义线程数
for
((i=0i《$threadi++))do echo
done 》&6 # 事实上就是在fd6中放置了$thread个回车符
for
((i=0i《50i++))do # 50次循环,可以理解为50个主机,或其他
read -u6 # 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,
# fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制
{ # 此处子进程开始执行,被放到后台
a_sub &&
{ # 此处可以用来判断子进程的逻辑
echo “a_sub is finished”
}
||
{ echo “sub error”
}
echo 》&6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
}
&done wait # 等待所有的后台子进程结束
exec 6》&- # 关闭df6 exit 0
说明:
此程序中的命令
mkfifo tmpfile
和linux中的命令
mknod tmpfile p
效?果相同。区别是mkfifo为POSIX标准,因此推荐使用它。该命令创建了一个先入先出的管道文件,并为其分配文件标志符6。管道文件是进程之间通信的一种方式,注意这一句很重要
exec 6《》$tmp_fifofile # 将fd6指向fifo类型
如果没有这句,在向文件$tmp_fifofile或者&6写入数据时,程序会被阻塞,直到有read读出了管道文件中的数据为止。而执行了上面这一句后就可以在程序运行期间不断向fifo类型的文件写入数据而不会阻塞,并且数据会被保存下来以供read程序读出。
通过运行命令:
time 。/multithread.sh 》/dev/null
最终运算时间: 50/15 = 3组(每组15)+1组(5个《15 组成一个组)= 4组,每组花费时间:3秒,
则 3 * 4 = 12 秒。
传统非多线程的代码 运算时间: 50 * 3 = 150 秒。
上面就是Linux下shell多线程编程的实例介绍了,使用多线程编程还能够改善程序结构,有兴趣的朋友不妨试试看吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)