利用wireshark观察tcp传输乱序与sack可选项
Unix/LinuxC技术 jackxiang 2015-6-22 21:01
http://blog.chinaunix.net/uid-24830931-id-3376798.html
[实践OK] fopen , fread fwrite 函数读写二进制文件 问题总结
Unix/LinuxC技术 jackxiang 2015-6-22 17:36
被复制的文件情况:
[root@iZ25dcp92ckZ multepoolserver]# stat seven.mp4
文件:"seven.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:7878 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:45.913756498 +0800
最近更改:2015-06-16 16:58:26.000000000 +0800
最近改动:2015-06-16 17:17:17.910047316 +0800
根据上面的大小8573191 编写代码,writeTest.c:
编译此文件:
[root@iZ25dcp92ckZ multepoolserver]# gcc writeTest.c -g -o writeTest
[root@iZ25dcp92ckZ multepoolserver]# ./writeTest
对写入的文件进行md5比对:
[root@iZ25dcp92ckZ multepoolserver]# md5sum sevenCopy.mp4
cf9dc79b01388037577e0a13e261cbe6 sevenCopy.mp4
[root@iZ25dcp92ckZ multepoolserver]# md5sum seven.mp4
cf9dc79b01388037577e0a13e261cbe6 seven.mp4
[root@iZ25dcp92ckZ multepoolserver]# stat seven.mp4
文件:"seven.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:7878 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:45.913756498 +0800
最近更改:2015-06-16 16:58:26.000000000 +0800
最近改动:2015-06-16 17:17:17.910047316 +0800
创建时间:-
[root@iZ25dcp92ckZ multepoolserver]# stat sevenCopy.mp4
文件:"sevenCopy.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:9791 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:56.458192181 +0800
最近更改:2015-06-22 17:31:45.919756746 +0800
最近改动:2015-06-22 17:31:45.919756746 +0800
创建时间:-
阅读全文
[root@iZ25dcp92ckZ multepoolserver]# stat seven.mp4
文件:"seven.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:7878 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:45.913756498 +0800
最近更改:2015-06-16 16:58:26.000000000 +0800
最近改动:2015-06-16 17:17:17.910047316 +0800
根据上面的大小8573191 编写代码,writeTest.c:
编译此文件:
[root@iZ25dcp92ckZ multepoolserver]# gcc writeTest.c -g -o writeTest
[root@iZ25dcp92ckZ multepoolserver]# ./writeTest
对写入的文件进行md5比对:
[root@iZ25dcp92ckZ multepoolserver]# md5sum sevenCopy.mp4
cf9dc79b01388037577e0a13e261cbe6 sevenCopy.mp4
[root@iZ25dcp92ckZ multepoolserver]# md5sum seven.mp4
cf9dc79b01388037577e0a13e261cbe6 seven.mp4
[root@iZ25dcp92ckZ multepoolserver]# stat seven.mp4
文件:"seven.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:7878 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:45.913756498 +0800
最近更改:2015-06-16 16:58:26.000000000 +0800
最近改动:2015-06-16 17:17:17.910047316 +0800
创建时间:-
[root@iZ25dcp92ckZ multepoolserver]# stat sevenCopy.mp4
文件:"sevenCopy.mp4"
大小:8573191 块:16752 IO 块:4096 普通文件
设备:ca01h/51713d Inode:9791 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-06-22 17:31:56.458192181 +0800
最近更改:2015-06-22 17:31:45.919756746 +0800
最近改动:2015-06-22 17:31:45.919756746 +0800
创建时间:-
阅读全文
Linux查看文件中间行
Unix/LinuxC技术 jackxiang 2015-6-17 14:15
背景:有时看个bin-log的sql语句时间,想看文件的中间,怎么看,文件还挺大的,这儿有个办法,太大上G的这个命令还是有些玄乎,看不了。
Linux查看文件中间行:
从第3000行开始,显示1000行。即显示3000~3999行:
【一】cat filename | tail -n +3000 | head -n 1000
【二】cat filename| head -n 3999 | tail -n +3000
*注意两种方法的顺序
【三】用sed命令
sed -n '3000,3999'p filename 可以只查看文件的第3000行到第3999行。
知识点:
1,tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行
2,Sed命令是linux下的一个非常有用的命令,
sed -n '2'p filename 打印文件的第二行。
sed -n '1,3'p filename 打印文件的1到3行。
sed -n '/Neave/'p filename 打印匹配Neave的行(模糊匹配)
sed -n '4,/The/'p filename 在第4行查询模式The
sed -n '1,$'p filename 打印整个文件,$表示最后一行。
摘自 :http://blog.163.com/nancainvmao_bq/blog/static/1065737420131084545205/
Linux查看文件中间行:
从第3000行开始,显示1000行。即显示3000~3999行:
【一】cat filename | tail -n +3000 | head -n 1000
【二】cat filename| head -n 3999 | tail -n +3000
*注意两种方法的顺序
【三】用sed命令
sed -n '3000,3999'p filename 可以只查看文件的第3000行到第3999行。
知识点:
1,tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行
2,Sed命令是linux下的一个非常有用的命令,
sed -n '2'p filename 打印文件的第二行。
sed -n '1,3'p filename 打印文件的1到3行。
sed -n '/Neave/'p filename 打印匹配Neave的行(模糊匹配)
sed -n '4,/The/'p filename 在第4行查询模式The
sed -n '1,$'p filename 打印整个文件,$表示最后一行。
摘自 :http://blog.163.com/nancainvmao_bq/blog/static/1065737420131084545205/
[实践OK]make: 警告:检测到时钟错误。您的创建可能是不完整的。
Unix/LinuxC技术 jackxiang 2015-6-8 14:54
背景:从windows上用editplus编写一个文件rz上去后,在make时,出现make: 警告:检测到时钟错误。您的创建可能是不完整的。后面make clean;问题依旧。
引起原因:是因为windows上的文件可以时间比较旧,需要给touch一个新时间,让make认为是很新的文件,即可。
解决办法:
touch multepoolser.c
于是编译就没提示这个问题了。
——————————————————————————————————————————————————————
我在make的时候也出现了同样的问题,不过不是什么大问题,这个不影响编译结果
分析原因可能是:
服务器上的文件最后修改时间比当前时钟要晚
解决办法:
用touch 命令把源程序的时间戳改一下
find . -type f -exec touch {} \;
或者
touch *一下再重新编译
From:http://blog.csdn.net/maopig/article/details/6599660
引起原因:是因为windows上的文件可以时间比较旧,需要给touch一个新时间,让make认为是很新的文件,即可。
解决办法:
touch multepoolser.c
于是编译就没提示这个问题了。
——————————————————————————————————————————————————————
我在make的时候也出现了同样的问题,不过不是什么大问题,这个不影响编译结果
分析原因可能是:
服务器上的文件最后修改时间比当前时钟要晚
解决办法:
用touch 命令把源程序的时间戳改一下
find . -type f -exec touch {} \;
或者
touch *一下再重新编译
From:http://blog.csdn.net/maopig/article/details/6599660
[实践OK]dd到更大盘后扩大磁盘的命令方法(理论上应该有其它图形gparted工具扩大),用Linux下的dd命令拷贝整张磁盘,创建一个2G的文件(Linux命令dd) ,或销毁磁盘数据,Linux使用dd命令快速生成大文件。拷贝盘整盘到镜像文件到方法。
Unix/LinuxC技术 jackxiang 2015-6-1 16:17
dd到更大盘后扩大磁盘的命令方法(理论上应该有其它图形gparted工具扩大):https://blog.csdn.net/daicooper/article/details/86150138
用Linux下的dd命令拷贝整张磁盘的方法:
fdisk -l 能看到两块盘,不是分区,如下:
dd if=/dev/sda of=/dev/sdb bs=4096k
fdisk -l
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
iostat -x 1或 iostat -d 2 -m , 来自:https://jackxiang.com/post/5671/
有120M左右的写入速度,1T = 1000G = 1000000M
1000000/100/3600=2.77小时,实际上不会时刻在100M以上,估计得3个小时。
用orico硬件拷贝可能要快一点, 但感觉不出来快多少,dd命令运行中可以Ctrl+C中断的。
背景:有vps到期后想换一台vps时,其旧的vps的数据是怎么样实现完全删除的哩? 或是怎么处理的,我现在把vps搬到淘宝vps了,有这个问题。兄弟们是怎么使用的dd。如果我想删除: /data/htdocs 是要dd多少次?d27就可以了。
全盘拷贝的命令:
dd if=/dev/sdb of=/dev/sdc
分区拷贝:
dd bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sdb of=name.img
以上为例:
dd bs=512 count=15002048 if=/dev/sdb of=ghost_linux_latelee.img
由于ghost_linux_latelee.img会很大,可以在拷贝时将其压缩:
dd bs=512 count=15002048 if=/dev/sdb | gzip -9 > ghost_linux_latelee.img.gz
上面所做的,就是传说的系统“备份”,或叫“系统克隆”。
对应的,有系统恢复的操作。命令如下:
dd if=ghost_linux_latelee.img of=/dev/sda
如果是压缩包,则命令为:
gzip -c -d ghost_linux_latelee.img.gz | dd of=/dev/sda
在上面的拷贝过程中,并不知道拷贝了多少,只有最终结束时才显示出时间、拷贝速度。为了查看进度,可以在另一个终端输入(记得用root):
watch -n 5 killall -USR1 dd
(注:killall并不是传说中把进程kill掉,而是发送一个指定的信号到指定的进程)
之后,就能执行dd的终端看到进度了,如:
58299+0 records in58298+0 records out29848576 bytes (30 MB) copied, 4.67728 s, 6.4 MB/s161403+0 records in161402+0 records out82637824 bytes (83 MB) copied, 9.69359 s, 8.5 MB/s238651+0 records in238650+0 records out122188800 bytes (122 MB) copied, 14.7105 s, 8.3 MB/s
备注:
用dd的方式,得到的镜像文件十分庞大——取决于所要做的系统的大小。比如,拷贝4GB的分区,真的就是拷贝4GB,即使是用gzip压缩,也压缩不了多少,文件依然很大。
另外dd的方式也消除了我之前的担心,因为现在的Linux发行版的分区使用硬盘uuid作为标识,而不是/dev/sda1这种格式,据说uuid更好。但用dd拷贝,竟然连硬盘的uuid也一一拷贝,毫无变化,这的确让我吃惊。不过,目前看没什么时间研究dd了。
PS:使用dd命令,可以读取硬盘的mbr扇区,示例如下:
dd if=/dev/sdb of=mbr.bin bs=512 count=1
来自:https://blog.csdn.net/qq_32693119/article/details/79986438阅读全文
用Linux下的dd命令拷贝整张磁盘的方法:
fdisk -l 能看到两块盘,不是分区,如下:
dd if=/dev/sda of=/dev/sdb bs=4096k
fdisk -l
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
iostat -x 1或 iostat -d 2 -m , 来自:https://jackxiang.com/post/5671/
有120M左右的写入速度,1T = 1000G = 1000000M
1000000/100/3600=2.77小时,实际上不会时刻在100M以上,估计得3个小时。
用orico硬件拷贝可能要快一点, 但感觉不出来快多少,dd命令运行中可以Ctrl+C中断的。
背景:有vps到期后想换一台vps时,其旧的vps的数据是怎么样实现完全删除的哩? 或是怎么处理的,我现在把vps搬到淘宝vps了,有这个问题。兄弟们是怎么使用的dd。如果我想删除: /data/htdocs 是要dd多少次?d27就可以了。
全盘拷贝的命令:
dd if=/dev/sdb of=/dev/sdc
分区拷贝:
dd bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sdb of=name.img
以上为例:
dd bs=512 count=15002048 if=/dev/sdb of=ghost_linux_latelee.img
由于ghost_linux_latelee.img会很大,可以在拷贝时将其压缩:
dd bs=512 count=15002048 if=/dev/sdb | gzip -9 > ghost_linux_latelee.img.gz
上面所做的,就是传说的系统“备份”,或叫“系统克隆”。
对应的,有系统恢复的操作。命令如下:
dd if=ghost_linux_latelee.img of=/dev/sda
如果是压缩包,则命令为:
gzip -c -d ghost_linux_latelee.img.gz | dd of=/dev/sda
在上面的拷贝过程中,并不知道拷贝了多少,只有最终结束时才显示出时间、拷贝速度。为了查看进度,可以在另一个终端输入(记得用root):
watch -n 5 killall -USR1 dd
(注:killall并不是传说中把进程kill掉,而是发送一个指定的信号到指定的进程)
之后,就能执行dd的终端看到进度了,如:
58299+0 records in58298+0 records out29848576 bytes (30 MB) copied, 4.67728 s, 6.4 MB/s161403+0 records in161402+0 records out82637824 bytes (83 MB) copied, 9.69359 s, 8.5 MB/s238651+0 records in238650+0 records out122188800 bytes (122 MB) copied, 14.7105 s, 8.3 MB/s
备注:
用dd的方式,得到的镜像文件十分庞大——取决于所要做的系统的大小。比如,拷贝4GB的分区,真的就是拷贝4GB,即使是用gzip压缩,也压缩不了多少,文件依然很大。
另外dd的方式也消除了我之前的担心,因为现在的Linux发行版的分区使用硬盘uuid作为标识,而不是/dev/sda1这种格式,据说uuid更好。但用dd拷贝,竟然连硬盘的uuid也一一拷贝,毫无变化,这的确让我吃惊。不过,目前看没什么时间研究dd了。
PS:使用dd命令,可以读取硬盘的mbr扇区,示例如下:
dd if=/dev/sdb of=mbr.bin bs=512 count=1
来自:https://blog.csdn.net/qq_32693119/article/details/79986438阅读全文
[实践OK]printf("填充: %10s", $str); //指定填充符为%字符串宽度为10 printf格式输出数字,位数不够前面补0,适用与输出编号
Unix/LinuxC技术 jackxiang 2015-5-25 16:00
字符s,整数d:
printf格式输出:%[flags][width][.perc][F|N|h|l]type
用到了flags中的 0 (注意是零不是欧) ,其百科描述为:将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)
width 即表示需要输出的位数。
也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;
来自:http://blog.chinaunix.net/uid-26295753-id-2981750.html
printf格式输出:%[flags][width][.perc][F|N|h|l]type
用到了flags中的 0 (注意是零不是欧) ,其百科描述为:将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)
width 即表示需要输出的位数。
也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;
来自:http://blog.chinaunix.net/uid-26295753-id-2981750.html
在CentOS7下的gdb中run出现的Missing separate debuginfos, use: debuginfo-install
Unix/LinuxC技术 jackxiang 2015-5-22 17:19
背景:试着在centos7里调试一下c程序,出现,Missing separate debuginfos, use: debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 glibc-2.17-78.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
问题:
Missing separate debuginfos, use: debuginfo-install glib
解决方法:
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
实践如下过程:
uname -rsp
Linux 3.10.0-229.1.2.el7.x86_64 x86_64
http://debuginfo.centos.org/7/x86_64/
(例如本机uname -r 3.10.0-229.1.2 只能选 kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
)
安装debuginfo
rpm -ivh kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm
rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
配置yum源
or this to work, you need to have the debuginfo repository defined. For CentOS 5, put the following in /etc/yum.repos.d/CentOS-Base-debuginfo.repo:
[base-debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0
enabled=0
protect=1
priority=1
利用debuginfo-install安装glibc
debuginfo-install glibc
注意事项
安装debuginfo 去http://debuginfo.centos.org寻找和你内核完全匹配的rpm包。
详细:http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html
————————————————————————————————————
自己实践如下:
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kernel-debuginfo-common-x86_64-3.################################# [100%]
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
软件包 kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64 已经安装
再安装:
debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
问题:
Missing separate debuginfos, use: debuginfo-install glib
解决方法:
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
实践如下过程:
uname -rsp
Linux 3.10.0-229.1.2.el7.x86_64 x86_64
http://debuginfo.centos.org/7/x86_64/
(例如本机uname -r 3.10.0-229.1.2 只能选 kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
)
安装debuginfo
rpm -ivh kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm
rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
配置yum源
or this to work, you need to have the debuginfo repository defined. For CentOS 5, put the following in /etc/yum.repos.d/CentOS-Base-debuginfo.repo:
[base-debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0
enabled=0
protect=1
priority=1
利用debuginfo-install安装glibc
debuginfo-install glibc
注意事项
安装debuginfo 去http://debuginfo.centos.org寻找和你内核完全匹配的rpm包。
详细:http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html
————————————————————————————————————
自己实践如下:
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kernel-debuginfo-common-x86_64-3.################################# [100%]
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
软件包 kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64 已经安装
再安装:
debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
GDB调试断点的基本用法之多个文件时设置断点,断点后指定文件名加函数,也可指定文件名加行号。
Unix/LinuxC技术 jackxiang 2015-5-22 16:12
背景:多个文件时设置断点时,可以在断点后指定文件名加函数,也可指定文件名加行号,还可以断点后跟偏移量,摘录下其他网站的。
设置断点:
——————————————————————————————————————————————————————————
(gdb) break 断点
程序运行后,到达断点就会自动暂停运行。此时就可以查看该时刻的变量值,显示栈针,重新设置断点或者重新运行等。
断点可以通过函数名,文件内的行号来设置,也可以先指定文件名再指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。
(gdb) break 函数名
(gdb) break 行号
(gdb) break 文件名:行号
(gdb) break 文件名:函数名
(gdb) break +偏移量
(gdb) break -偏移量
(gdb) break *地址
在设置断点的时候,如果不指定断点位置,就在下一行代码上设置断点。
条件断点
(gdb) break 断点 if 条件
仅在特定条件下中断。对于已存在的断点,可使用condition为其添加条件。
(gdb) break 断点编号 条件
而删除指定编号断点的触发条件同样使用condition。
(gdb) condition 断点编号
阅读全文
设置断点:
——————————————————————————————————————————————————————————
(gdb) break 断点
程序运行后,到达断点就会自动暂停运行。此时就可以查看该时刻的变量值,显示栈针,重新设置断点或者重新运行等。
断点可以通过函数名,文件内的行号来设置,也可以先指定文件名再指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。
(gdb) break 函数名
(gdb) break 行号
(gdb) break 文件名:行号
(gdb) break 文件名:函数名
(gdb) break +偏移量
(gdb) break -偏移量
(gdb) break *地址
在设置断点的时候,如果不指定断点位置,就在下一行代码上设置断点。
条件断点
(gdb) break 断点 if 条件
仅在特定条件下中断。对于已存在的断点,可使用condition为其添加条件。
(gdb) break 断点编号 条件
而删除指定编号断点的触发条件同样使用condition。
(gdb) condition 断点编号
阅读全文
如何禁用TaobaoProtect进程?如果删除不掉有程序在使用怎么办,unlock来解锁。
Unix/LinuxC技术 jackxiang 2015-5-21 13:35
每次在电脑上安装支付宝安全控件时,默认都会强行安装与运行TaobaoProtect这个进程(如图)。电脑上装了这个程序以后,在我玩游戏时它总是会令我正在运行的程序自动跳出,使游戏最小化到任务栏上。令我感觉特别烦人!特别受骚扰!可是在淘宝上购物不安装支付宝又不行。最可恶的是购物以后我将支付宝安全控件卸载了然而这个该死的TaobaoProtect进程依然存在。阿里旺旺怎么净干这磋事啊?谁有办法禁用这个该死的进程啊?
1)首先删除C:\Users\“用户名”\AppData\Roaming\TaobaoProtect下的TaobaoProtect.exe和TaobaoProtectSE.dll。然后新建一个txt文件,重命名为TaobaoProtect.exe,右键属性设置只读打勾。目前最完美的解决方案了。
2)如果删除不掉有程序在使用怎么办,unlock来解锁:
http://www.anxz.com/down/1600.html
1)首先删除C:\Users\“用户名”\AppData\Roaming\TaobaoProtect下的TaobaoProtect.exe和TaobaoProtectSE.dll。然后新建一个txt文件,重命名为TaobaoProtect.exe,右键属性设置只读打勾。目前最完美的解决方案了。
2)如果删除不掉有程序在使用怎么办,unlock来解锁:
http://www.anxz.com/down/1600.html
Git分支模型及版本控制
Unix/LinuxC技术 jackxiang 2015-5-12 17:31
Git分支模型及版本控制:
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
Firebug 的日志已达上限。 176 条未显示。
Unix/LinuxC技术 jackxiang 2015-5-12 14:34
extensions.firebug.console.logLimit 配置的。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
来自:https://www.cnblogs.com/Eivll0m/p/4921829.html
一)他怎么知道缓存在那个目录呢?
You can add a line in wp-config.php like below:
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');
root@101.200.228.135:/data/htdocs/jackxiang.com# grep -r "RT_WP_NGINX_HELPER_CACHE_PATH" ./
./wp-content/plugins/nginx-helper/nginx-helper.php: define('RT_WP_NGINX_HELPER_CACHE_PATH', '/var/run/nginx-cache');
./wp-content/plugins/nginx-helper/purger.php: if (!defined('RT_WP_NGINX_HELPER_CACHE_PATH')) {
./wp-content/plugins/nginx-helper/readme.txt:`define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/');`
vim打开上面文件替换:
%s/\/var\/run\/nginx-cache/\/data\/cache\/ngx_fcgi_cache2/g
二)总配置:/conf/nginx.conf
三)分配置:/conf/vhost/jackxiang.conf 阅读全文
一)他怎么知道缓存在那个目录呢?
You can add a line in wp-config.php like below:
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');
root@101.200.228.135:/data/htdocs/jackxiang.com# grep -r "RT_WP_NGINX_HELPER_CACHE_PATH" ./
./wp-content/plugins/nginx-helper/nginx-helper.php: define('RT_WP_NGINX_HELPER_CACHE_PATH', '/var/run/nginx-cache');
./wp-content/plugins/nginx-helper/purger.php: if (!defined('RT_WP_NGINX_HELPER_CACHE_PATH')) {
./wp-content/plugins/nginx-helper/readme.txt:`define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/');`
vim打开上面文件替换:
%s/\/var\/run\/nginx-cache/\/data\/cache\/ngx_fcgi_cache2/g
二)总配置:/conf/nginx.conf
三)分配置:/conf/vhost/jackxiang.conf 阅读全文
[实践OK]CentOS7下编译apache的依赖链接库时解决编译libiconv时的'gets' undeclared here错误
Unix/LinuxC技术 jackxiang 2015-5-7 16:56
wget -c http://www.itkb.ro/userfiles/file/libiconv-glibc-2.16.patch.gz
cd libiconv-1.14/srclib
patch -p1 stdio.in.h
俺运行patch后好久都没有反应 :( 最后人肉修改
这个补丁的内容如上,用unzip包解压后rz上CentOS7上去,修改成下面这样:
/data/software/libiconv-1.14/srclib/stdio.in.h
参考来自:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
cd libiconv-1.14/srclib
patch -p1 stdio.in.h
俺运行patch后好久都没有反应 :( 最后人肉修改
这个补丁的内容如上,用unzip包解压后rz上CentOS7上去,修改成下面这样:
/data/software/libiconv-1.14/srclib/stdio.in.h
参考来自:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
2015年web应用漏洞解析培训的安全技术课程笔记
Unix/LinuxC技术 jackxiang 2015-5-5 11:47
背景:开发web程序来讲,凡是用户输入都不可信的原则,加强web应用的安全性培训笔记,主要是有这个安全的意识至关重要,形成梯队、纵深、层层防御体系至关重要。
1=1注入,主要是输入过滤:
数字型:?ID=120 and 1=1
字符型:单引号保障其完整性,闭合,形成完整查询。
搜索型:模糊搜索,like,test=adb%abc%。
信息泄漏
拖库
执行恶意代码获取administrator。
如何杜绝sql inject:参数化,检测非法字符,安全api。
身份认证,会话管理(放服务器验证别放前台)。
提升用户不存在,密码错误(弱密码)。撞库。
验证码饶过:网站回退,验证码名称和图片名一致;把验证码放session验证。
xss攻击:网站用户。输入js代码盗取cookie。javascript 尖括号过滤。跨站脚本主要是对用户的攻击,对服务器没有用。
越权漏洞:我可以修改你的资料。
春秋航空,update?id=xxx xxx变yyy。
垂直越权:访问更高级别的用户权限。
test 访问到了管理界面,发现按钮是灰色,F12 直接修改去disable,可点击,后没添加按钮,div disable=none,打开后就可以修改了(输入必填项),成功后再次登录,成功越权。
不安全的直接对象引用(xia z):
任意文件引用~下载路径:.. 上一路径。
查看到系统的路径,网站源码。修复:只让输入.xml的,下源码%00终结符号:password=a.php%00download.xml
Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
影响版本:
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
而新漏洞的利用方式是:
/test.jpg%00.php
对应fastcgi_script_name的匹配正则,我们会发现是匹不到这个漏洞的,所以非常杯具,以前被老nginx漏洞黑过的肉鸡还能被重新黑一次。
一般这个漏洞需要在能够上传文件的应用中才能被利用,所以论坛首当其冲,象discuz论坛的两个文件就能非常方便的识别这个漏洞。
解决方法:升级Nginx
摘录自:http://www.unhonker.com/bug/153.html
——————————————————————————————————————————————————————————————————
重定向漏洞:
redirect 检验refer。
上传漏洞:
只前台校验后缀。
可以用工具干掉那块校验的js,截包工具,fiddler2,再查查。传shell啥的,控制主机。
未验证的访问重定向:
?url=http://api.开放平台网址.cn/gettoken?code=xxxx 对跳转地址输入处(浏览器参数)做验证(用户填写的申请的网站回调获取code的url地址),其它地址不让他跳转。
1=1注入,主要是输入过滤:
数字型:?ID=120 and 1=1
字符型:单引号保障其完整性,闭合,形成完整查询。
搜索型:模糊搜索,like,test=adb%abc%。
信息泄漏
拖库
执行恶意代码获取administrator。
如何杜绝sql inject:参数化,检测非法字符,安全api。
身份认证,会话管理(放服务器验证别放前台)。
提升用户不存在,密码错误(弱密码)。撞库。
验证码饶过:网站回退,验证码名称和图片名一致;把验证码放session验证。
xss攻击:网站用户。输入js代码盗取cookie。javascript 尖括号过滤。跨站脚本主要是对用户的攻击,对服务器没有用。
越权漏洞:我可以修改你的资料。
春秋航空,update?id=xxx xxx变yyy。
垂直越权:访问更高级别的用户权限。
test 访问到了管理界面,发现按钮是灰色,F12 直接修改去disable,可点击,后没添加按钮,div disable=none,打开后就可以修改了(输入必填项),成功后再次登录,成功越权。
不安全的直接对象引用(xia z):
任意文件引用~下载路径:.. 上一路径。
查看到系统的路径,网站源码。修复:只让输入.xml的,下源码%00终结符号:password=a.php%00download.xml
Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
影响版本:
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
而新漏洞的利用方式是:
/test.jpg%00.php
对应fastcgi_script_name的匹配正则,我们会发现是匹不到这个漏洞的,所以非常杯具,以前被老nginx漏洞黑过的肉鸡还能被重新黑一次。
一般这个漏洞需要在能够上传文件的应用中才能被利用,所以论坛首当其冲,象discuz论坛的两个文件就能非常方便的识别这个漏洞。
解决方法:升级Nginx
摘录自:http://www.unhonker.com/bug/153.html
——————————————————————————————————————————————————————————————————
重定向漏洞:
redirect 检验refer。
上传漏洞:
只前台校验后缀。
可以用工具干掉那块校验的js,截包工具,fiddler2,再查查。传shell啥的,控制主机。
未验证的访问重定向:
?url=http://api.开放平台网址.cn/gettoken?code=xxxx 对跳转地址输入处(浏览器参数)做验证(用户填写的申请的网站回调获取code的url地址),其它地址不让他跳转。
[转载]Linux下 input/output error(原创)
Unix/LinuxC技术 jackxiang 2015-5-4 09:55
背景:今天一链接测试机,执行ls时出现:Input/output error,-bash: /bin/df: Input/output error,-bash: /usr/bin/uptime: Input/output error......
今天在linux下执行umount时无意用了远程目录而不是本地目录,结果悲剧了,当前用户出错,直接进入bash,不管输入什么命令都提示:input/output error。-bash: /home/myhome/.bash_profile: Input/output error
-bash-3.2$
用root账户进去,发现自己的目录变成这样:
d????????? ? ? ? ? ? myhome
在网上一搜都说可能是硬盘错误,一身汗~~
最后想起之前umount命令好像有问题,在root下重新执行:
# umount /home/myhome
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)
以前也经常出现" Device or resource busy"这种问题,到网上再搜,查到一段话:
“有些时候,可能某些设备(通常是 CD-ROM)正忙或无法响应。此时,大多数用户的解决办法是重新启动计算机。我们大可不必这么做。例如,如果 umount /dev/hdc 失败的话,您可以试试“lazy” umount。语法十分简单:
umount -l <挂载点|设备>
此命令将会断开设备并关闭打开该设备的全部句柄。通常,您可以使用 eject <挂载点|设备>命令弹出碟片。所以,如果 eject 命令失效而您又不想重新启动,请使用 lazy umount。”
再次执行后搞定,谢天谢地!!记下以备忘!
转:http://bbs.c114.net/thread-564376-1-1.html
今天在linux下执行umount时无意用了远程目录而不是本地目录,结果悲剧了,当前用户出错,直接进入bash,不管输入什么命令都提示:input/output error。-bash: /home/myhome/.bash_profile: Input/output error
-bash-3.2$
用root账户进去,发现自己的目录变成这样:
d????????? ? ? ? ? ? myhome
在网上一搜都说可能是硬盘错误,一身汗~~
最后想起之前umount命令好像有问题,在root下重新执行:
# umount /home/myhome
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)
以前也经常出现" Device or resource busy"这种问题,到网上再搜,查到一段话:
“有些时候,可能某些设备(通常是 CD-ROM)正忙或无法响应。此时,大多数用户的解决办法是重新启动计算机。我们大可不必这么做。例如,如果 umount /dev/hdc 失败的话,您可以试试“lazy” umount。语法十分简单:
umount -l <挂载点|设备>
此命令将会断开设备并关闭打开该设备的全部句柄。通常,您可以使用 eject <挂载点|设备>命令弹出碟片。所以,如果 eject 命令失效而您又不想重新启动,请使用 lazy umount。”
再次执行后搞定,谢天谢地!!记下以备忘!
转:http://bbs.c114.net/thread-564376-1-1.html
Linux系统,使用C语言如何产生UUID
Unix/LinuxC技术 jackxiang 2015-4-28 15:52
背景:生成唯一编码的uuid值,标识一个资源是很有必要的。
1.执行uuidgen命令,可以生成一个uuid数
2.sudo apt-get install uuid-dev,调用uuid_generate函数
来自:http://blog.csdn.net/sruru/article/details/8137871
Linux & Windows上生成UUID/GUID:
http://blog.csdn.net/ghlfllz/article/details/17128393
1.执行uuidgen命令,可以生成一个uuid数
2.sudo apt-get install uuid-dev,调用uuid_generate函数
来自:http://blog.csdn.net/sruru/article/details/8137871
Linux & Windows上生成UUID/GUID:
http://blog.csdn.net/ghlfllz/article/details/17128393
linux shell 脚本实现tcp/upd协议通讯(重定向应用)
Unix/LinuxC技术 jackxiang 2015-4-26 18:02
背景:有时像硬件测试,比如SIM900a,如果你有一台公网ip服务器,想开一个tcp上的ip端口,在Windows下有tcp/ip的调试助手的界面软件,而linux下没有这样的玩意,怎么办呢?shell有这个功能,好像nc也有类似的模拟client去连接服务器的功能,咱就先找个shell的,Linux 下有兄弟好像写了一个debian下的的deb包:http://blog.chinaunix.net/uid-21977056-id-4310527.html 如下。
bash socket 编程 :
在bash环境中,你可以打开一个socket,并通过它发送数据. 并不需要安装curl或者lynx等程序.
通过两个特殊的设备文件, 可以打开网络socket
/dev/tcp/host/port
如果 host是一个有效的主机名或者IP地址, 端口号是一个整数或者常见的服务名(如dns, http), 那么bash将打开一个TCP连接
/dev/udp/host/port
打开到host:port的UDP连接
(echo >/dev/tcp/localhost/80) &>/dev/null && echo “TCP port 80 open” || echo “TCP port 80 close”
/dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。如果主机以及端口存在,就建立一个socket 连接。将在,/proc/self/fd目录下面,有对应的文件出现。
用来判断本机的80端口是否打开
另外, 一段crontab脚本
!/bin/bash
exec 8<>/dev/tcp/zhiwei.li/80
if [ $? -eq 0 ] ; then
printf "GET /status HTTP/1.0rn" >&8
printf "Host: zhiwei.lirn" >&8
printf "User-Agent: Mozilla/5.0rn" >&8
printf "rn" >&8
while read -u 8 -r -t 2 block;
do
echo $block
echo "$(date) - web server is running."
while read -u 8 line ;
do
echo $line
done
exec 8&-
exit
done
fi
echo “need reboot”
….
来自:http://my.oschina.net/panzhc/blog/182843#OSC_h1_1
参考资料:
http://xpt.sourceforge.net/techdocs/nix/shell/gsh05-ShBash/ar01s28.html
http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.html
————————————————————————————————————————————
一)如果出于效率的话还是选择工具的好shell不怎么合适做这个^_^,但作测试足够了:
直接在交互shell下
exec 3</dev/tcp/localhost/80
exec 3</dev/tcp/localhost/25
lsof -p $$
我开了httpd和sendmail服务,因此80和25端口有响应。
可以看到当前shell只打开了25这个端口。
二)如何查看这个shell是否真正打开了这个80端口?
一、安装nmap
yum install nmap #输入y安装
二、使用nmap
nmap localhost #查看主机当前开放的端口
nmap -p 1024-65535 localhost#查看主机端口(1024-65535)中开放的端口
nmap -PS 192.168.21.163 #探测目标主机开放的端口
nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口
nmap -O 192.168.21.163 #探测目标主机操作系统类型
nmap -A 192.168.21.163 #探测目标主机操作系统类型
nmap --help #更多nmap参数请查询帮助信息
三、关闭或者打开主机端口
1、nmap localhost #查看主机当前开放端口
2、ntsysv #打开系统服务器管理器(需要先安装yum install ntsysv),选择要关闭或者打开的服务
摘自:http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8442.html
nmap localhost
Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-26 18:07 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 992 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
443/tcp open https
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp open http-proxy
三)测试:用telnet就行了。
——————————————————————————————————————————————————————————
http://www.csdn.net/article/2012-02-28/312483
时间 2014-03-17 22:04:04 向东博客
原文 http://jackxiang.com/post/7098/
阅读全文
bash socket 编程 :
在bash环境中,你可以打开一个socket,并通过它发送数据. 并不需要安装curl或者lynx等程序.
通过两个特殊的设备文件, 可以打开网络socket
/dev/tcp/host/port
如果 host是一个有效的主机名或者IP地址, 端口号是一个整数或者常见的服务名(如dns, http), 那么bash将打开一个TCP连接
/dev/udp/host/port
打开到host:port的UDP连接
(echo >/dev/tcp/localhost/80) &>/dev/null && echo “TCP port 80 open” || echo “TCP port 80 close”
/dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。如果主机以及端口存在,就建立一个socket 连接。将在,/proc/self/fd目录下面,有对应的文件出现。
用来判断本机的80端口是否打开
另外, 一段crontab脚本
!/bin/bash
exec 8<>/dev/tcp/zhiwei.li/80
if [ $? -eq 0 ] ; then
printf "GET /status HTTP/1.0rn" >&8
printf "Host: zhiwei.lirn" >&8
printf "User-Agent: Mozilla/5.0rn" >&8
printf "rn" >&8
while read -u 8 -r -t 2 block;
do
echo $block
echo "$(date) - web server is running."
while read -u 8 line ;
do
echo $line
done
exec 8&-
exit
done
fi
echo “need reboot”
….
来自:http://my.oschina.net/panzhc/blog/182843#OSC_h1_1
参考资料:
http://xpt.sourceforge.net/techdocs/nix/shell/gsh05-ShBash/ar01s28.html
http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.html
————————————————————————————————————————————
一)如果出于效率的话还是选择工具的好shell不怎么合适做这个^_^,但作测试足够了:
直接在交互shell下
exec 3</dev/tcp/localhost/80
exec 3</dev/tcp/localhost/25
lsof -p $$
我开了httpd和sendmail服务,因此80和25端口有响应。
可以看到当前shell只打开了25这个端口。
二)如何查看这个shell是否真正打开了这个80端口?
一、安装nmap
yum install nmap #输入y安装
二、使用nmap
nmap localhost #查看主机当前开放的端口
nmap -p 1024-65535 localhost#查看主机端口(1024-65535)中开放的端口
nmap -PS 192.168.21.163 #探测目标主机开放的端口
nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口
nmap -O 192.168.21.163 #探测目标主机操作系统类型
nmap -A 192.168.21.163 #探测目标主机操作系统类型
nmap --help #更多nmap参数请查询帮助信息
三、关闭或者打开主机端口
1、nmap localhost #查看主机当前开放端口
2、ntsysv #打开系统服务器管理器(需要先安装yum install ntsysv),选择要关闭或者打开的服务
摘自:http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8442.html
nmap localhost
Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-26 18:07 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 992 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
443/tcp open https
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp open http-proxy
三)测试:用telnet就行了。
——————————————————————————————————————————————————————————
http://www.csdn.net/article/2012-02-28/312483
时间 2014-03-17 22:04:04 向东博客
原文 http://jackxiang.com/post/7098/
阅读全文