Linux编程基础知识进阶篇(指令)

Linux编程基础知识进阶篇(指令),第1张

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系统开机的历程。红字:系统层开机/切换用户历程;蓝字:用户层开机/切换用户历程;黄字:用户层关机历程。

曾经玩过一个游戏:在用户指令关机时,会有一辆小火车开过,所以我们可以把调用小火车开过的程式调用写在?

1、命令文件的自动补齐shift

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多线程编程的实例介绍了,使用多线程编程还能够改善程序结构,有兴趣的朋友不妨试试看吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8309686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存