为您找到与shell脚本多线程相关的共54个结果:
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=0;i《$thread;i++));do echo
done 》&6 # 事实上就是在fd6中放置了$thread个回车符
for
((i=0;i《50;i++));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多线程编程的实例介绍了,使用多线程编程还能够改善程序结构,有兴趣的朋友不妨试试看吧。
浏览量:2
下载量:0
时间:
Linux的shell脚本提供了大量方便的工具,如:awk、grep、more、tail、wc等等,方便用户对文件、数据的分析,但是windows相对来说就没那么方便,要分析一个数据可能需要自己编程、编译然后才能对一些数据进行分析,对于一些轻量级的数据,不如shell脚本好用。下面就由读文网小编为大家说说如何在windows下使用linux的shell脚本的。
先下载cygwin对应于自己windows操作系统的版本:32位或64位
(cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件)
安提示安装好cygwin
打开cygwin,就可以看到熟悉的命令行提示了,shell环境对应的根目录是软件的安装目录
开始使用linux命令:grep、awk、less、vi等等,如果发现有缺少什么命令,重新运行setup.exe安装程序,搜索需求的命令,叉选上即可安装。
以上就是读文网小编为大家提供的解决方法,希望能帮助到大家!!!最后希望大家生活越来越好。
浏览量:2
下载量:0
时间:
脚本病毒通常是JavaScript代码编写的恶意代码,一般带有广告性质,会修改您的IE首页、修改注册表等信息,造成用户使用计算机不方便。下面由读文网小编给你做出详细的脚本病毒介绍!希望对你有帮助!欢迎回访读文网网站,谢谢!
蠕虫病毒是自包含的 程序(或是一套程序),它能 传播它自身功能的 拷贝或它的某些部分到其他的 计算机系统中(通常是经过网络连接)。请注意,与一般 病毒不同,蠕虫不需要将其自身附着到 宿主程序,有两种类型的蠕虫: 主机蠕虫与 网络蠕虫。主计算机蠕虫完全包含在它们运行的计算机中,并且使用网络的连接仅将自身拷贝到其他的计算机中,主计算机蠕虫在将其自身的拷贝加入到另外的主机后,就会终止它自身(因此在任意给定的时刻,只有一个蠕虫的拷贝运行),这种蠕虫有时也叫"野兔",蠕虫病毒一般是通过1434端口漏洞传播。
比如近几年危害很大的“尼姆亚”病毒就是 蠕虫病毒的一种,去年春天流行“ 熊猫烧香”以及其变种也是蠕虫病毒。这一病毒利用了微软视窗 操作系统的漏洞,计算机感染这一病毒后,会不断自动 拨号上网,并利用文件中的地址 信息或者网络共享进行传播,最终破坏用户的大部分重要数据。蠕虫病毒的一般防治方法是:使用具有 实时监控功能的 杀毒软件,并且注意不要轻易打开不熟悉的邮件附件。
浏览量:3
下载量:0
时间:
正如大家所知道的那样,多核多cpu越来越普遍了,而且编写多线程程序也是件很简单的事情。那么,如何提高多线程的CPU的一些使用率,下面是读文网小编带来的关于如何提高多线程程序的cpu利用率的内容,欢迎阅读!
首先,我来讲一下多处理的一些知识。如下图所示,
多处理器系统也只有一个待运行的线程队列,内存中也只有一个操作系统拷贝,而且也只有一个内存系统,但是会有多个cpu同时运行不同的线程。一个cpu运行一个线程,那么上图中的系统最多能在同一时间运行2个线程。其实,多处理系统需要掌握的知识不是这些,而是缓存一致性。
现在来解释下什么是缓存一致性。由于,还是只有一个内存系统。所有cpu都要和这个内存系统通信,但是只有一条总线,那么这无疑会造成总线紧张,限制整体的速度了。那么,你多个cpu也没多少意义了。解决这个问题的办法还是利用cpu的缓存机制,学过组成原理的同学都知道,cpu的缓存命中率还是很高的,有90%以上吧。那么,我继续利用缓存机制还是可以降低总线的频繁使用的。但是,每个cpu都有自己的缓存。如果有2个cpu的缓存存储的是同一内存数据的内容,其中一个cpu的缓存更新了,另外一个cpu的缓存也必须更新,这就是所谓的缓存一致性。编程多线程程序的一个很重要的一点就是避免因为缓存一致性引起的缓存更新风暴。
现在我举一个缓存更新风暴的例子。
如图所示的类定义,
锁lockHttp和lockSsl中间只有8个字节,而绝大部分系统上一个缓存行是128个字节,那么这2个锁很可能就处在同一个缓存行上面。那么,最坏的情况会发生什么事情了。假设处理器P1在运行一个处理http请求的线程T1,处理器P2在运行一个处理ssl请求的线程T2,那么当T1获得锁lockHttp的时候,锁的内容就会改变,为了保持缓存一致性,就会更新P2的缓存。那么,T2要获得锁lockssl的时候,发现缓存已经失效了,就必须从内存中重新加载缓存之类。总之,这会将缓存命中率降低到90%以下,引起性能的严重降低。而且发生这种事情的原因是因为我们不了解硬件的体系结构。
多cpu不能成倍提高速度的原因是任务的某些部分是必须串行处理的。比如,矩阵乘法可以分为三个部分,初始化矩阵,相乘,返回结果。这三部分第二部分可以用多线程来处理,第一部分和第三部分则是不可以的。而且第二部分必须在第一部分完成之后,第三部分必须在第一部分完成之后。那么,无论你添加多少个处理器,最快的时间都至少是第一部分和第二部分的时间之和。这个事实好像叫做Amdahl法则。
如果使用多线程,那么就必须考虑线程同步,而线程同步又是导致速度降低的关键。所以下面就讲述一些方法来加快多线程程序的吞吐速度。
方法一,把一个任务分解为多个可以子任务。
因为总有些子任务是可以并发的,多个子任务并发执行了很可能就能够避免cpu需要io操作的完成了,而且能够提高系统的吞吐量。
方法二,缓存多线程的共享数据。
当你已经在使用多线程了,很多时候必须使用共享数据。如果,数据是只读的,那么可以在第一次获取后保存起来,以后就可以重复使用了。但是,第一次的获取还是无法避免的需要线程同步操作的。
方法三,如果线程数目有限,就不要共享数据。
做法是为每一个线程实例化一个单独的数据,其实就是为每一个线程分配一块数据使用。这样没有线程同步操作了,速度可以尽可能的提示。
方法四,如果没办法确定线程数目到底有多少,那么使用部分共享吧。
部分共享其实就是使用多个资源池代替一个资源池,资源池的数目得更加经验来确定。如下图所示,
最后在提一个叫做Thundering Herd的问题,该问题维基百科有定义。大意是,当多个线程在等待一个资源的时候,如果事件等待到了,操作系统是唤醒所有等待的线程让它们自己去竞争资源了还是选择一个线程把资源给它。当然唤醒所有的线程肯定开销要大,而且所有没有抢到资源的线程还得重新进入等待状态,这无疑造成很多没必要的操作,浪费了没必要的线程上下文切换。总之,会不会存在Thundering Herd还是跟不同的操作系统有关的。万一存在Thundering Herd了,多线程可能就没那么好办了。
到现在我们知道了为什么多cpu并不能成倍提高程序的速度了。首先因为有些任务无法并行,其次即使是并行cpu之间还是有很多牵制的。
浏览量:4
下载量:0
时间:
在项目开发过程中使用到多线程技术,有时程序运行起来占用CPU很高(具体占用多少,跟你的CPU核数有关。CPU过高的问题,CPU多线程的问题,下面是读文网小编带来的关于多线程执行CPU过高问题的内容,欢迎阅读!
浏览量:3
下载量:0
时间:
CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能。下面是读文网小编带来的关于intel多线程cpu的内容,欢迎阅读!
1992 年ATI 推出了Mach32A,也就是 Mach8 的改进型。1993 年,在年营业额突破2.3 亿加元后,ATI 在多伦多证交所上市,之后由于股灾,ATI 一度面临生死存亡的局面。在Mach64 诞生后,由其带来的成功,ATI 所有的麻烦都迎刃而解。ATI 开始成立了自己的3D部门,这为后来的ATI 奠定了基础。
1994 年,首块能够对影像提供加速功能的显卡Mach64 诞生。这块显卡是计算机图形发展历史上的一块里程碑。Mach64 所使用的Graphics Xpression 和Graphics Pro Turbo 技术能够支持YUV 到RGB的色彩空间转换,使得PC获得了MPEG 的视频加速能力。1995 年诞生Mach64-VT 版本。其完全将CPU 解压的负担承担了起来,由于VT版本的Mach64提供了对视频中的X轴和Y轴的过滤得能力,所以对分辨率为320x240 的视频图像重新调整大小至1024x768 时也不会出现因为放大所产生的任何马赛克。
1996 年1 月,ATI 推出3D Rage 系列。开始提供对MPEG-2的解码支持。通过后来引入Rage 系列显示芯片的 iDCT 等先进技术更大大降低了CPU 在播放MPEG-2 视频时的负担。1997 年4 月发布3D Rage Pro。四千五百万像素填充率,VQ的材质压缩功能,每秒能够生成一百二十万的三角形,8MBSGRAM或者16MBWRAM的高速显存,这些数字给了当时3D图形芯片的王者Voodoo以很大压力。1997 年,在2D 时代非常强大的Tseng Labs 公司被ATI 收购,40 名经验丰富的显卡工程师加入了ATI 的开发团队。
1998 年2 月Rage Pro 更名为Rage Pro Turbo ,驱动也作了相应更新后,性能提升了将近40% 。1998 年,Rage 128 GL 发布。Rage 128 GL 是首款支持Quake 3 中的OpenGL 扩展集的硬件。1999 年4 月ATI 发布了Rage 系列的最后产品Rage 128 Pro 。各项异性过滤,优化的多边形设置引擎,以及更高的时钟频率,使得Rage 128 Pro 成了1999 年QuakeCon 比赛的官方指定显卡,更高端的RAGE Fury Pro 是加入了Rage Theater 提高了显卡的视频性能。
浏览量:2
下载量:0
时间:
中央处理器(CentralProcessingUnit)的缩写,即CPU,CPU是电脑中的核心配件,只有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和控制核心。下面是读文网小编带来的关于java和多线程cpu的内容,欢迎阅读!
前端总线的速度指的是CPU和北桥芯片间总线的速度,更实质性的表示了CPU和外界数据传输的速度。而外频的概念是建立在数字脉冲信号震荡速度基础之上的,也就是说,100MHz外频特指数字脉冲信号在每秒钟震荡一万万次,它更多的影响了PCI及其他总线的频率。之所以前端总线与外频这两个概念容易混淆,主要的原因是在以前的很长一段时间里(主要是在Pentium 4出现之前和刚出现Pentium 4时),前端总线频率与外频是相同的,因此往往直接称前端总线为外频,最终造成这样的误会。随着计算机技术的发展,人们发现前端总线频率需要高于外频,因此采用了QDR(Quad Date Rate)技术,或者其他类似的技术实现这个目的。
这些技术的原理类似于AGP的2X或者4X,它们使得前端总线的频率成为外频的2倍、4倍甚至更高,从此之后前端总线和外频的区别才开始被人们重视起来。FSB是将CPU连接到北桥芯片的总线,也是CPU和外界交换数据的主要通道,因此前端总线的数据传输能力对整机性能影响很大,数据传输最大带宽取决于所有同时传输数据的宽度和传输频率,即数据带宽=总线频率×数据位宽÷8。例如Intel公司的PⅡ333使用6 6MHz的前端总线,所以它与内存之间的数据交换带宽为528MB/s =(66×64)/8,而其PⅡ350则使用100MHz的前端总线,所以其数据交换峰值带宽为800MB/s=(100×64)/8。再比如Intel 845芯片组只支持单通道DDR333内存,所以理论最高内存带宽为333MHz×8Bytes(数据宽度)=2.7GB/s,而Intel 875平台在双通道下的内存带宽最高可达400MHz×8Bytes(数据宽度)×2=6.4GB/s。PC机常用的前端总线频率有266MHz、333MHz、400MHz、533MHz、800MHz、1066MHz几种。
浏览量:2
下载量:0
时间:
CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能。下面是读文网小编带来的关于Linux系统下,CPU信息详解(cpuinfo,多核,多线程)的内容,欢迎阅读!
在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢?
经过查看,我的开发机器是2个物理CPU,16核32线程,Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
系统的架构是X86的64位系统
CPUs 有32个逻辑的处理器
Threads per core: 每个核有两个线程
Core per Socket:每个物理卡槽有8个核心
CPU Socket :有2个物理卡槽
NUMA nodes : Non Uniform Memory Access Architecture,使众多服务器像单一系统那样运转,两个NUMA
记录一下,判断的过程和知识。
判断依据:
1.具有相同core id的cpu是同一个core的超线程。
2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores。
英文版:
1.Physical id and core id are not necessarily consecutive but they are unique. Any cpu with the same core id are hyperthreads in the same core.
2.Any cpu with the same physical id are threads or cores in the same physical socket.
echo "logical CPU number:"
#逻辑CPU个数
cat /proc/cpuinfo | grep "processor" | wc -l
echo "physical CPU number:"
#物理CPU个数:
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
echo "core number in a physical CPU:"
#每个物理CPU中Core的个数:
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}'
#查看每个physical cpu上core id的数量,即为每个物理CPU上的core的个数
cat /proc/cpuinfo | grep "core id"
#是否为超线程?
#如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。
#每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
cat /proc/cpuinfo | grep "siblings"
/proc/cpuinfo 文件包含系统上每个处理器的数据段落。/proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id 和 cpu cores。
processor 条目包括这一逻辑处理器的唯一标识符。
physical id 条目包括每个物理封装的唯一标识符。
core id 条目保存每个内核的唯一标识符。
siblings 条目列出了位于相同物理封装中的逻辑处理器的数量。
cpu cores 条目包含位于相同物理封装中的内核数量。
如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel。
1.拥有相同 physical id 的所有逻辑处理器共享同一个物理插座。每个 physical id 代表一个唯一的物理封装。
2.Siblings 表示位于这一物理封装上的逻辑处理器的数量。它们可能支持也可能不支持超线程(HT)技术。
3.每个 core id 均代表一个唯一的处理器内核。所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上。
4.如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。
5.如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器。cpu cores 条目也可以表示是否支持多内核。
判断CPU是否64位,检查cpuinfo中的flags区段,看是否有lm标识。
Are the processors 64-bit?
A 64-bit processor will have lm ("long mode") in the flags section of cpuinfo. A 32-bit processor will not
浏览量:3
下载量:0
时间:
有过网吧或者机房管理经验朋友肯定知道,如果机子中了病毒的话是很让人头疼的事情,现在的病毒大多都具有复制能力特别强,能够通过局域网传播大量耗费系统资源等特点,下面由读文网小编给你做出详细的几种脚本病毒杀毒方法介绍!希望对你有帮助!
几种脚本病毒杀毒方法第一,装系统的时候要用光盘启动硬盘来装,光盘要保证以前用过的没有携带病毒的,硬盘一定要没有任何文件,否则残留的文件里面很可能就感染了病毒,这一点一定要毫不留情,不要为了要备份一个驱动或者一个软件不把它删除。否则你刚装完系统发现已经中了病毒,那可就后悔莫及了。
几种脚本病毒杀毒方法第二,装完系统后,再装驱动之前,最好先用装个杀毒软件,杀毒软件首先要保证自己没有病毒,其实你可以把WIN98安装文件,杀毒软件等,网吧机器的驱动放在一起用EasyBoot做个启动光盘。有了这张盘,你在装其他软件和游戏之前就可以保证母盘不感染病毒了。
几种脚本病毒杀毒方法第三,装好驱动后先上网把杀毒软件更新到最新,然后开着病毒防火墙,从事先准备好的机器上调用软件和游戏的安装文件来安装网吧的必备软件和常玩的游戏,一切都弄好后测试一遍游戏和软件,然后在C盘目录下建立一个ADMIN的文件夹,把专杀工具包,硬盘工具包,网络克隆工具,还有备份的注册表放到里面备用。一般样板盘做成这样就很好了,当然如果系统配置不高,为了不影响玩游戏的速度,在克隆完之后要把病毒防火墙的自启动取消。
装杀毒软件不是让它老开着防火墙,因为一来它耗费系统资源,二来平时安装着还原精灵,有病毒重启一下就好了,它主要用在以后升级游戏或者调用文件的时候把防火墙打开防止调用文件中的病毒感染系统,更何况人非圣贤,孰能无过,再谨慎的人也不会保证以后肯定不会出病毒,所以一定要为每台机子装上杀毒工具,但平时没必要启用它的保护功能。
在网络上的人肯定都中过爱情森林,新欢乐时光等这些顽固的病毒,尤其是在局域网里,往往是所有的机子都感染病毒,每个机子能杀出几百个到上千个病毒,我曾经在一台机子上用瑞星杀出过8000多个病毒。
看了“几种脚本病毒杀毒方法介绍”文章的还看了:
浏览量:4
下载量:0
时间:
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。下面是读文网小编带来的关于同步多线程是什么的内容,欢迎阅读!
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。
在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。
浏览量:3
下载量:0
时间:
最近迷上了php脚本,整天满脑子都是php.也用php写了一些脚本,甚至服务来完成一些日常服务器管理的任务,下面学习阿拉小编就给大家介绍下Unix/Linux中如何直接执行PHP脚本文件。
使用Linux系统的服务器都有搭建完整的PHP环境,因此有些用户会用PHP去写一些执行自动化任务的脚本,可是发现每次执行PHP脚本都需要使用php myscript.php的方式,感觉有点麻烦。其实我们是可以直接执行PHP脚本文件的
由于我们的服务器都是使用的 Linux 系统,并且都有搭建完整的 PHP 环境,所以有时候我会用 PHP 写一些执行自动化任务的脚本,但是每次执行这个 PHP 脚本都需要使用 php myscript.php 的方式,
编写你的脚本文件
这里我们编写一个名字为 test_run.php 的文件,文件的内容如下:
Here is some plain text.
Here is the file name:
<?php
echo $argv[0], PHP_EOL;
?>
脚本内容很简单,就是把当前脚本文件的名称打印出来。
然后,我们使用 PHP 命令执行一下这个脚本:
yuanyu@ymac:phpworkspace $ php test_run.php hello
Here is some plain text.
Here is the file name:
test_run.php
yuanyu@ymac:phpworkspace $
给脚本文件增加头信息,并且设置权限
然后,在这个文件的第一行写上 php 命令的全路径,前面是一个 #!:
#!/usr/bin/php
Here is some plain text.
Here is the file name:
<?php
echo $argv[0], PHP_EOL;
?>
然后给这个文件赋予可执行的权限:
yuanyu@ymac:phpworkspace $ chmod u+x ./test_run.php
接下来就可以直接执行这个脚本了:
yuanyu@ymac:phpworkspace $ ./test_run.php
Here is some plain text.
Here is the file name:
./test_run.php
yuanyu@ymac:phpworkspace $
这种方式在 PHP 官方文档中也是有说的,请参考:
http://php.net/manual/en/features.commandline.usage.php
文档中的
“Example #2 Script intended to be run from command line (script.php)”
以上就是Unix/Linux中直接执行PHP脚本文件的操作方法,不熟悉的用户可以参照上面介绍的具体步骤来操作。
看过“ Linux怎么直接执行PHP脚本文件 ”
浏览量:3
下载量:0
时间:
许多人都不知道自己的Linux系统使用的是哪种shell,下面读文网小编就教你如何查看Linux系统中使用的shell的方法,一起来了解下吧。
查看当前发行版可以使用的shell
代码如下:
[root@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
查看当前使用的shell方法
一、最常用的查看shell的命令,但不能实时反映当前shell
代码如下:
[root@localhost ~]$ echo $SHELL
/bin/bash
二、下面这个用法并不是所有shell都支持
代码如下:
[root@localhost ~]$ echo $0
-bash
三、环境变量中shell的匹配查找
代码代码如下:
[root@localhost ~]$ env | grep SHELL
SHELL=/bin/bash
四、口令文件中shell的匹配查找
代码如下:
[root@localhost ~]$ cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
五、查看当前进程
代码如下:
[root@localhost ~]$ ps
PID TTY TIME CMD
3052 pts/0 00:00:00 bash
3254 pts/0 00:00:00 ps
六、先查看当前shell的pid,再定位到此shell进程
代码如下:
[root@localhost ~]$ echo $$
1862
[root@localhost ~]$ ps -ef | grep 1862
root 1862 1860 0 01:50 pts/0 00:00:00 -bash
root 2029 1862 0 02:07 pts/0 00:00:00 ps -ef
root 2030 1862 0 02:07 pts/0 00:00:00 grep 1862
七、输入一条不存的命令,查看出错的shell提示
代码如下:
[root@localhost ~]$ asdf
bash: asdf: command not found
附:一条命令即可实现:
代码如下:
[root@localhost ~]$ ps -ef | grep `echo $$` | grep -v grep | grep -v ps
root 1862 1860 0 01:50 pts/0 00:00:00 -bash
上面就是Linux下查看使用的是哪种shell的方法的介绍了,如果你不知道你的电脑使用的是哪种shell,不妨试试上面介绍的方法吧。
浏览量:2
下载量:0
时间:
网站数据对我们对站长来说都是最宝贵的,备份好网站数据。这样可使我们数据库崩溃造成的损失大大降低,那么怎么备份远程mysql数据库的脚本文件?下面跟着读文网小编一起来了解一下吧。
在MySQL中进行数据备份的方法有两种:
1. mysqlhotcopy
这个命令会在拷贝文件之前会把表锁住,并把数据同步到数据文件中,以避免拷贝到不完整的数据文件,是最安全快捷的备份方法。
命令的使用方法是:
mysqlhotcopy -u root -p<rootpass> db1 db2 … dbn <output_dir>
如果需要备份全部数据库,可以加上–regexp=”.*”参数。
Mysqlhotcopy命令可自动完成数据锁定工作,备份时不用关闭服务器。它还可以刷新日志,使备份文件和日志文件的检查点能保持同步。
2. mysqldump
这个命令是用来把数据库倒成sql文件的,是非常古老的命令了。
命令的使用方法是:
mysqldump -u root -p<rootpass> –hex-blob db1 > db1.sql
加上–hex-blob参数以后,blob数据会被类似BASE64的方法转换为文本来存储在sql文件中,就不会导致sql文件格式问题了。经过测试,通过这种方法备份的blob数据再重新恢复回去能够完全正确。
如果要备份所有的数据库,可以加上–all-databases参数。
用mysqldump命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。重复执行可定期更新远程数据库。
% mysqladmin -h remote_host create testdb
% mysqldump –opt testdb | mysql -h remote_host testdb
另外还可通过ssh远程调用服务器上的程序,如:
% ssh remote_host mysqladmin create testdb
% mysqldump –opt testdb | ssh remote_host mysql testdb
2种数据库备份方式的优缺点:
使用mysqlhotcopy等程序备份速度快,因为它直接对系统文件进行操作,但是需人为协调数据库数据的备份前后一致性。
mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。
对于没有使用InnoDB的数据库,用mysqlhotcopy是最好的方法;否则必须采用mysqldump。不论如何,直接拷贝文件的备份方法应该被废弃了。
看过“ 怎么备份远程mysql数据库的脚本文件 ”
浏览量:3
下载量:0
时间:
Linux备份可以通过多种方法完成,那么你知道怎么通过shell脚本备份Linux系统吗?小编为大家分享了通过shell脚本备份Linux系统的解决方法,下面大家跟着读文网小编一起来了解一下吧。
脚本如下:
#!/bin/sh
#Automatic Backup Linux System Files
#Author wugk 2013-11-22
#Define Variable
SOURCE_DIR=(
$*
)
TARGET_DIR=/data/backup/
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
WEEK=`date +%u`
FILES=system_backup.tgz
CODE=$?
if
[ -z “$*” ];then
echo -e “Please Enter Your Backup Files or Directories
Example $0 /boot /etc 。”
exit
fi
#Determine Whether the Target Directory Exists
if
[ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
echo “This $TARGET_DIR is Created Successfully !”
fi
#EXEC Full_Backup Function Command
Full_Backup()
{
if
[ “$WEEK” -eq “7” ];then
rm -rf $TARGET_DIR/snapshot
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “These Full_Backup System Files Backup Successfully !”
fi
}
#Perform incremental BACKUP Function Command
Add_Backup()
{
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;
if
[ -f $TARGET_DIR/$YEAR/$MONTH/$DAY/$FILES ];then
read -p “These $FILES Already Exists, overwrite confirmation yes or no ? : ” SURE
if [ $SURE == “no” -o $SURE == “n” ];then
sleep 1 ;exit 0
fi
#Add_Backup Files System
if
[ $WEEK -ne “7” ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $$_$FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “These Add_Backup System Files Backup Successfully !”
fi
else
if
[ $WEEK -ne “7” ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “These Add_Backup System Files Backup Successfully !”
fi
fi
}
Full_Backup;Add_Backup
上面就是Linux使用shell脚本备份系统的方法介绍了,通过上面的脚本就能自动备份系统,但脚本可能还存在不足的地方,可自行改良优化。
看过“ 怎么通过shell脚本备份Linux系统 ”
浏览量:2
下载量:0
时间:
PowerShell是Win7操作系统中的一个命令工具,有些小伙伴说在系统里面找不到请问要怎么添加,那么win7怎么添加powershell呢?读文网小编分享了win7添加powershell的方法,希望对大家有所帮助。
1.下载微软的KB2506143更新,在网络之上搜索就可以获得更新支持包,其全称应当为Windows6.1-KB2506143-x64.msu 或 Windows6.1-KB2506143-x86.msu,前者对应雨林木风win7旗舰版64位操作系统,后者对于32位操作系统。
2.msu是针对于windows 7和windows vista推出的专用更新程序,下载之后双击运行windows 7可以自动帮助我们安装完成更新。
这种安装方式虽然简单,但是有可能会因为缺少其他组件而出现依赖问题,如果你是一个真正的windows操作系统管理员的话,请尝试按照下面步骤安装powershell。
1.搜索微软提供的windows management framewordk3.0,进入微软的官方站点。
windows management framewordk3.0是微软推出的针对于系统管理的工具库,其包含powershell,但是不仅仅有powershell,还有OData数据库支持,IIS支持等等。
2.点击Download,页面会弹出选择列表,根据自己的操作系统字长选择X64版本和X86版本,另外还有6.0和6.1两个版本我们可以选择,这里建议选择6.0版本。
下载之后用户所获得的同样是msu文件,和上一方法的步骤2一样,双击就是可以直接安装到windows7系统之中。
看过“win7怎么添加powershell”
浏览量:3
下载量:0
时间:
不少小伙伴在选择安全终端模拟软件的时候都会首选Xshell这个软件吧。小伙伴在下载Xshell并安装后,在使用过程中却发现服务器有中文乱码的情况,那么你知道win7使用Xshell出现乱码怎么办吗?下面是读文网小编整理的一些关于win7使用Xshell出现乱码的相关资料,供你参考。
Xshell出现中文乱码
图1:使用中文命名文档
现象
登录服务器查看中文却出现乱码
原因分析
使用的xshell是破解版,xshell中文版是没有这种现象的
解决方法
虽然是破解版的,但是也是可以修改的,具体的操作如下:
1、打开“属性”,然后在“类别”中选择“终端”,
Xshell出现中文乱码
图2:在编码中选择UTF-8
2、打开编码,选择Unicode(UTF-8),
此时再查看时会发现乱码已不再了。虽然也是可以处理这个问题,但是小编还是建议大家安装正式版的xshell,正式版的xshell不但是中文的而且个人版还是免费的。
浏览量:3
下载量:0
时间:
rsh命令用于连接到远程的指定主机并执行指定的命令。那么Linux中rsh怎么远程使用shell命令呢?读文网小编分享了Linux中rsh远程使用shell命令的方法,希望对大家有所帮助。
rsh有两种使用模式:
rsh $host : 远程登录,启动交互式进程。
rsh $host $command :远程执行命令,并显示输出。
rsh hosthostcommand
rsh $host $command的作用是:
1.在远程机器上执行命令$command
2.通过网络连接(socket)重定向当前进程和远端进程的标准输入和标准输出
3.远端rsh进程在远端进程结束后结束
4.本地rsh进程读取远端进程的标准输出直到结束(EOF)
深刻理解这个执行过程有助于理解各种“奇怪”的现象和用法。
代码如下:
+ Suspended (tty input)
$ rsh localhost infinite-loop &
[1] + Suspended (tty input) rsh pv007 infinite-loop
$ rsh -n localhost infinite-loop &
# 执行正常
后台执行rsh命令时,提示了和标准输入相关的错误信息。这是因为rsh默认会把当前窗口的标准输入重定向到远端进程。
而本地rsh进程作为后台程序运行的话,标准输入被“阻塞”了。
通过-n选项制定不需要重定向标准输入(stdin)。
远端进程的执行
执行命令
代码如下:
rsh somehost infinite-loop
在远端机器上查看相关进程:
代码如下:
$ pstree -a -p 3353
in.rshd,3353
└─csh,3363 -c infinite-loop
└─infinite-loop,3632 /u/szhang/bin/infinite-loop
可以看出,远端机器上的rshd进程负责启动远端进程。而且可以看出是通过csh -c的方式启动的(这里用户的默认Shell是C Shell)。
远端进程的标准IO
检查远端进程的文件描述符:
代码如下:
$ ls -l /proc/3363/fd /proc/3632/fd
/proc/3363/fd:
total 0
lrwx------. 1 Jul 30 23:47 16 -> socket:[1184748899]
lrwx------. 1 Jul 30 23:47 17 -> socket:[1184748899]
l-wx------. 1 Jul 30 23:47 18 -> pipe:[1184749092]
lrwx------. 1 Jul 30 23:47 19 -> socket:[1184748899]
代码如下:
/proc/3632/fd:
total 0
lrwx------. 1 Jul 30 23:47 0 -> socket:[1184748899]
lrwx------. 1 Jul 30 23:47 1 -> socket:[1184748899]
l-wx------. 1 Jul 30 23:47 2 -> pipe:[1184749092]
可以看出远端里程的标准输入输出是被重定向到socket上的:
1.stdin 和 stdout 共享一个socket连接
2.stderr 则通过一个pipe重定向(重定向到stdout ???)
3.rsh 的返回值
rsh程序自身的返回值表明的是rsh自身的运行状况,而不是远端进程的返回值。
获得远端进程的返回值
代码如下:
# 远端是C Shell
$ rsh $host "$command ; echo $status"
代码如下:
# 远端是Bash Shell
$ rsh $host "$command ; echo $?"
代码如下:
# 远端Shell类型不确定
$ rsh $host "sh -c '$command ; echo $?'"
启动远端进程所用的Shell
由于用于启动远端进程的Shell类型是未知的,而有些操作的语法在不同Shell里是不同的。
比如输入输出重定向、命令返回值等。
解决该问题的方法之一是通过明确指定的Shell来启动真正需要的里程。比如:
代码如下:
# 不确定远端Shell的类型,显式通过Bash Shell来启动需要的进程
$ rsh -n $host "sh -c '$command > /dev/null 2>&1'"
另一种思路,则是通过一个wrapper程序来启动真正的命令。
通过rsh在远端执行后台进程
想在远端机器上执行后台进程。命令rsh $host "$command &"是不起作用的,会导致本地的rsh进程不能结束。
背后的原因应该是,$command的标准输入输出通常仍然绑定在rsh连接的socket上,从而导致本地的rsh进程无法读取到文件结束符EOF。
知道了原因就知道该怎么办了,关键是关闭后台进程续定在rsh连接上的标准输入输出。
代码如下:
# 如果远端Shell是C Shell
$ rsh -n $host "$command >& /dev/null &"
代码如下:
# 如果远端Shell是Bash Shell
$ rsh -n $host "$command > /dev/null 2>&1 &"
代码如下:
# 不确定远端Shell的类型
$ rsh -n $host "sh -c '$command > /dev/null 2>&1 &'"
但上面这样重定向的办法有个缺点是不能得到任何远端进程的输出,而有时我们希望获得一些输出信息。
这时就需要远端进程能够以守护进程(daemon)的方式运行。
这种情况下,rsh命令可以简单地写作:$ rsh -n $host "$command &"
远端后台进程的内容用Tcl表示,大意如下:
代码如下:
#/bin/env tclsh
puts "I am a background job"
puts "This Can Be Seen by Remote rsh Process"
close stdout
close stderr
# rsh连接到此应该结束。
puts "This Can NOT Be Seen by Remote rsh Process"
更进就步,我们可以甚至忽略rsh命令中的后台运行符:$ rsh -n $host "$command"
这时远端进程需要通过fork的方式结束自己,并启动真正的后台进程(守护进程)。
rsh进程的阻塞和超时处理
在程序中调用rsh $host $command时可能由于各种奇怪的原因发生rsh进程的阻塞,这不是我们希望看到的。
我们希望设置一个超时(timeout)机制来解决这个问题。
在Tcl程序中的一种实现可以这样: TODO
TCP Connection连接数过多引起的rsh失败
监控邮件显示rsh $host $command命令失败,错误提示为“poll: protocol failure in circuit setup"
怀疑是网络连接数过多所引起。
rsh $host $command 的网络连接过程
命令rsh $host连接远程主机的513端口。
命令rsh $host $command则连接远程主机的514端口,并随后发送一个本地端口号给远程主机,要求远程主机建立一个新的TCP连接到这个端口(还不清楚这个新的连接有什么作用)。然后才是传送命令和等待命令结束。
这样做的结果就是在rsh $host $command进程过多时,本地开放的端口资源被消耗完了,从而导致新的rsh $host $command失败。
这是rsh $host的使用则依然正常。
这里提到的rsh的缺陷,也是建议尽量使用ssh的原因之一。
没有完全关闭的网络连接:
在远程主机上kill掉相关的rsh进程后,会导致TCP连接没有完全关闭。
netstat命令显示CLOSE_WAIT状态,端口资源并没有释放出来。
根据配置文件/proc/sys/net/ipv4/tcp_keepalive_time显示,需要等待2个小时,那些端口才会因为超时而被真正关闭,从而释放出来。
代码如下:
%> netstat -a | grep localhost
tcp 0 0 localhost:933 localhost:935 CLOSE_WAIT
%> cat /proc/sys/net/ipv4/tcp_keepalive_time
7200 ;# in seconds. = 2 hours
%> echo "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.con
看过“Linux中rsh怎么远程使用shell命令”
浏览量:3
下载量:0
时间:
对于如何在Windows系统上面怎么进行系统备份相信大家都知道,那么大家知道Linux通过shell脚本怎么备份系统吗?读文网小编分享了Linux通过shell脚本备份系统的方法,希望对大家有所帮助。
脚本如下:
#!/bin/sh
#Automatic Backup Linux System Files
#Author wugk 2013-11-22
#Define Variable
SOURCE_DIR=(
$*
)
TARGET_DIR=/data/backup/
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
WEEK=`date +%u`
FILES=system_backup.tgz
CODE=$?
if
[ -z “$*” ];then
echo -e “Please Enter Your Backup Files or Directories--------------------------------------------Example $0 /boot /etc 。。。。。。”
exit
fi
#Determine Whether the Target Directory Exists
if
[ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
echo “This $TARGET_DIR is Created Successfully !”
fi
#EXEC Full_Backup Function Command
Full_Backup()
{
if
[ “$WEEK” -eq “7” ];then
rm -rf $TARGET_DIR/snapshot
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “--------------------------------------------These Full_Backup System Files Backup Successfully !”
fi
}
#Perform incremental BACKUP Function Command
Add_Backup()
{
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;
if
[ -f $TARGET_DIR/$YEAR/$MONTH/$DAY/$FILES ];then
read -p “These $FILES Already Exists, overwrite confirmation yes or no ? : ” SURE
if [ $SURE == “no” -o $SURE == “n” ];then
sleep 1 ;exit 0
fi
#Add_Backup Files System
if
[ $WEEK -ne “7” ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $$_$FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “-----------------------------------------These Add_Backup System Files Backup Successfully !”
fi
else
if
[ $WEEK -ne “7” ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ “$CODE” == “0” ]&&echo -e “-------------------------------------------These Add_Backup System Files Backup Successfully !”
fi
fi
}
Full_Backup;Add_Backup
上面就是Linux使用shell脚本备份系统的方法介绍了,通过上面的脚本就能自动备份系统,但脚本可能还存在不足的地方,可自行改良优化。
看过“Linux通过shell脚本怎么备份系统”
浏览量:3
下载量:0
时间: