unix

UNIX下的LD_PRELOAD环境变量

孤者浪人 提交于 2020-03-18 13:19:46
某厂面试归来,发现自己落伍了!>>> 前言 也许这个话题并不新鲜,因为 LD_PRELOAD 所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的 Unix 下的程序员的注意。 在开始讲述为什么要当心 LD_PRELOAD 环 境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局变量所存在的位置。一般来说,程序的链接分为静态链接和 动态链接,静态链接就是把所有所引用到的函数或变量全部地编译到可执行文件中。动态链接则不会把函数编译到可执行文件中,而是在程序运行时动态地载入函数 库,也就是运行链接。所以,对于动态链接来说,必然需要一个动态链接库。动态链接库的好处在于,一旦动态库中的函数发生变化,对于可执行程序来说是透明 的,可执行程序无需重新编译。这对于程序的发布、维护、更新起到了积极的作用。对于静态链接的程序来说,函数库中一个小小的改动需要整个程序的重新编译、 发布,对于程序的维护产生了比较大的工作量。 当 然,世界上没有什么东西都是完美的,有好就有坏,有得就有失。动态链接所带来的坏处和其好处一样同样是巨大的。因为程序在运行时动态加载函数,这也就为他 人创造了可以影响你的主程序的机会。试想,一旦,你的程序动态载入的函数不是你自己写的,而是载入了别人的有企图的代码

unix文件操作函数

拈花ヽ惹草 提交于 2020-03-18 08:16:17
1. fopen函数 1 #include <stdio.h> 2 FILE *fopen(const char *path, const char *mode) 返回:文件顺利打开后,指向该流的文件就会被返回。如何文件打开失败则返回NULL,并把错误代码存在 errno 中。 参数说明:   mode: 1)r 以只读方式打开文件,该文件必须存在。      2) r+ 以可读写方式打开文件,该文件必须存在。      3) rb+ 以读写打开一个二进制文件,允许读写数据,文件必须存在。      4) rw+ 打开一个文本文件,允许读和写。 5) w 打开只写文件,若文件存在则文件长度清为0,即该文件内容消失,若文件不存在则创建该文件。      6) w+ 打开可读写文件,若文件存在则文件长度清为0,即文件文件内容会消失。若文件不存在则创建文件文件。       7) a 以附加的方式打开只写文件,若文件不存在,则会创建文件文件,如果文件存在,则写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)       8) a+ 以附加的方式打开可读写文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据 会被添加到文件尾,即文件碑的内容会被保留。(原来的EOF符不保留) 9) wb 只写打开或新建 一个二进制文件。只允许写数据。 10)wb+

cut or awk command to print first field of first row

感情迁移 提交于 2020-03-17 03:48:51
问题 I am trying print the first field of the first row of an output. Here is the case. I just need to print only SUSE from this output. # cat /etc/*release SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 2 Tried with cat /etc/*release | awk {'print $1}' but that print the first string of every row SUSE VERSION PATCHLEVEL 回答1: Specify NR if you want to capture output from selected rows: awk 'NR==1{print $1}' /etc/*release An alternative ( ugly ) way of achieving the same would

Using AWK to merge unique rows based on column one

僤鯓⒐⒋嵵緔 提交于 2020-03-17 03:19:23
问题 I am trying to write an AWK script to summarize data on a large text file. The order of the resulting data is important so i can't use sort. I have tried different variations of FNR==NR but haven't had any luck Input file Height 3.5 Weight 12.3 Age 23 : : Height 4.5 Weight 15.5 Age 31 : : Expected Output Height 3.5 4.5 Weight 12.3 15.5 Age 23 31 回答1: With awk: awk '{a[$1]=a[$1] FS $2} END{for(i in a) print i a[i]}' file Output: Weight 12.3 15.5 Height 3.5 4.5 : Age 23 31 Derived from: how to

开发人员行走Unix的随身四艺

自闭症网瘾萝莉.ら 提交于 2020-03-15 07:56:05
Unix系统永远只会越来越多,开发人员就没必要特意学习它们的安装、配置和管理了,就全部交给集成人员吧。 但开发人员行走于Unix之间,依然有四样东西要熟练。 一、VI 虽然Unix上的文本编辑器已经越来越好用,但不在Console前面,网速也不够连XWindows的时候,还是要依赖VI。 回想VI的时代背景,发现VI对开发人员已经周到得离谱了,热键多到你双手不离键盘就能完成大半编辑工作。 建议自己制作一张自己认为有用,但又经常忘记的命令的sheet,拿出考试的力气把它背熟。 二、文本处理 开发人员在Unix下干得最多的除了Make和除Bug外,大概就是处理日志文件、业务文件进行查错和统计了。 只会more和grep是不够的,开发老手会把awk,sed,grep,sort,unique,wc这些文本处理命令,通过管道玩具式的拆卸拼装,最后完成一件原本以为非编写大段代码不可的工作。周到的参数设定,让人再一次感叹那个简单的年代,复杂到极致的设计.......怪不得《Unix 编程艺术》的作者有那么骄傲的自觉。 比如车东的每月访问TOP10 统计脚本: awk -F ' t' '{ print $ 4 }' 2004_2 . txt| grep chedong . com / tech / | sort |uniq -c| sort -rn|head - 10 awk -F '/t'

How do you append to an indirect parameter expansion of an array in BASH?

六月ゝ 毕业季﹏ 提交于 2020-03-15 05:47:47
问题 I know you can create an indirect parameter expansion to an array like so: var1="target" var2="arrayname" targetarrayname=( "one" "two" "three" ) builtarrayname="${var1}${var2}[@]" echo ${!builtarrayname} # prints "one two three" But I can't figure out how to append to this indirect reference, as I normally would directly with targetarrayname+=('foo') . I've tried: !builtarrayname+=('foo') # gives "Syntax error near unexpected token `'foo''" and some other random assorted attempts which are

How do you append to an indirect parameter expansion of an array in BASH?

一笑奈何 提交于 2020-03-15 05:47:10
问题 I know you can create an indirect parameter expansion to an array like so: var1="target" var2="arrayname" targetarrayname=( "one" "two" "three" ) builtarrayname="${var1}${var2}[@]" echo ${!builtarrayname} # prints "one two three" But I can't figure out how to append to this indirect reference, as I normally would directly with targetarrayname+=('foo') . I've tried: !builtarrayname+=('foo') # gives "Syntax error near unexpected token `'foo''" and some other random assorted attempts which are

什么是 Unix 以及它为什么这么重要?

心不动则不痛 提交于 2020-03-14 09:46:10
大多数操作系统可以被划分到两个不同的家族。除了微软的基于Windows NT的操作系统外,几乎所有其他的都可以追溯到Unix。 Linux,Mac OS X,Android,iOS,Chrome OS,PlayStaion 4上运行的Orbis OS,运行在路由器上的各种固件,所有这些操作系统通常都被称为“类Unix”操作系统。 Unix的设计现在都还在应用 Unix在20世纪60年代中晚期诞生于AT&T的贝尔实验室中。最初发布的Unix中的一些重要设计因素到如今都还在使用。 其中一个设计是“Unix哲学”,建立小的模块化的应用,只做一件事情并把它做好。如果你对Linux终端很熟悉的话,应该对这个不陌生-系统提供了大量的应用,可以通过 管道或其他特性 形成不同的组合来完成更复杂的任务。甚至图形界面程序也经常会在后台调用更简单的应用去做比较耗时的任务。这种模式也让 建立终端脚本 更为简单,通过文本把一些简单工具结合起来去做复杂的事情。 Unix还设计了一个单一的文件系统,程序可以通过它互相通讯。这也是 为什么在Linux里说“一切都是文件” -包括硬件设备文件,和提供系统信息及其他数据的特殊文件。这也是为什么只有Windows系统中才有磁盘盘符,这是从DOS继承过来的-在其他操作系统中,所有文件都是一个单一目录结构中的一部分。 那些从Unix派生出的系统

Shell脚本常用unix命令

匆匆过客 提交于 2020-03-14 03:45:24
在shell脚本中可以使用三类命令: 1)Unix 命令:   虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能    echo "some text": 将文字内容打印在屏幕上   ls: 文件列表   wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数   cp sourcefile destfile: 文件拷贝   mv oldname newname : 重命名文件或移动文件   rm file: 删除文件    grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt   cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令   cat file.txt: 输出文件内容到标准输出设备(屏幕)上    file somefile: 得到文件类型    read var: 提示用户输入,并将输入赋值给变量   sort file.txt: 对file.txt文件中的行进行排序   uniq:

nginx与php-fpm通信的两种方式

China☆狼群 提交于 2020-03-12 16:30:49
简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。 unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。 tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。 windows系统只能使用tcp socket的通信方式 配置方法 tcp socket:tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。 location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } unix socket:unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。 //service php-fpm start生成.sock文件 location ~ \.php$ { include