背景:一个低版本的CentOS系统的Crontab可能坏了,需要修复,于是下载了有9个ISO安装包,如何合并?
实践步骤:
一)mkdir CentOS-5.10-x86_64-bin-{1,2,3,4,5,6,7,8,9}of9 CentOS-5.10-x86_64-bin-rpms ,这是建立 shrike-i386-disc{1,2,3} 和 CentOS-5.10-x86_64-bin-rpms  这10个目录。
二)挂载 Centos原来的9个镜像文件 :
mount -o ro,loop CentOS-5.10-x86_64-bin-1of9.iso CentOS-5.10-x86_64-bin-1of9
mount -o ro,loop CentOS-5.10-x86_64-bin-2of9.iso CentOS-5.10-x86_64-bin-2of9
mount -o ro,loop CentOS-5.10-x86_64-bin-3of9.iso CentOS-5.10-x86_64-bin-3of9
mount -o ro,loop CentOS-5.10-x86_64-bin-4of9.iso CentOS-5.10-x86_64-bin-4of9
mount -o ro,loop CentOS-5.10-x86_64-bin-5of9.iso CentOS-5.10-x86_64-bin-5of9
mount -o ro,loop CentOS-5.10-x86_64-bin-6of9.iso CentOS-5.10-x86_64-bin-6of9
mount -o ro,loop CentOS-5.10-x86_64-bin-7of9.iso CentOS-5.10-x86_64-bin-7of9
mount -o ro,loop CentOS-5.10-x86_64-bin-8of9.iso CentOS-5.10-x86_64-bin-8of9
mount -o ro,loop CentOS-5.10-x86_64-bin-9of9.iso CentOS-5.10-x86_64-bin-9of9
三)拷贝RPM文件
首先, 复制CentOS-5.10-x86_64-bin-1of9)中的所有文件到 CentOS-5.10-x86_64-bin-rpms目录下然后, 只拷贝前1到9 中 Packages 目录下的所有RPM文件到  CentOS-5.10-x86_64-bin-rpms 目录下,
mv CentOS-5.10-x86_64-bin-{1,2,3,4,5,6,7,8,9}of9/CentOS CentOS-5.10-x86_64-bin-rpms

最后一个Mount时出现: mount -o ro,loop CentOS-5.10-x86_64-bin-9of9.iso  CentOS-5.10-x86_64-bin-9of9
mount: could not find any free loop device ,解决办法:解决方法:MAKEDEV -v /dev/loop
echo "MAKEDEV -v /dev/loop" >> /etc/rc.local
参阅文献:http://devnull.typepad.com/devnull/2012/09/rhel6-mount-could-not-find-any-free-loop-device.html

四)建立Rpm仓库索引,CentOS5在CentOS6系统上搭建YUM仓库时建立索引不大一样,否则centos在安装yum时无法使用:
createrepo --update -s sha1 -d -p -o /tmp /backup/yum.qr.XXX.net/centos/5/x86_64


------------------------------------------------------------------以下是来自网上的参考资料-----------------------------------------------------------

多个ISO文件怎样合并为一个ISO文件?我下载了几张比较小的ISO文件,想做进一张光盘里去,还要在光盘启动下运行?
解决办法:
1. 首先你必須要有一个很大的磁盘空间 大概要3.5g是空闲的 建立一个文件夹Createiso,然后把你的3个iso文件shrike-i386-disk1.iso,shrike-i386-disk2.iso,shrike-i386-disk3.iso放到Createiso中

2. 输入以下命令

   mkdir shrike-i386-disc{1,2,3} shrike-docs

   这是建立 shrike-i386-disc{1,2,3} 和 shrike-docs   这4个目录

3.将刚才放入Createiso中的3个iso镜像文件挂载到建立好的shrike-i386-disc{1,2,3} 这3个目录

mount -o ro,loop shrike-i386-disc1.iso shrike-i386-disc1

mount -o ro,loop shrike-i386-disc2.iso shrike-i386-disc2

mount -o ro,loop shrike-i386-disc3.iso shrike-i386-disc3

4 输入以下命令

   cp  -a shrike-i386-disc1/isolinux  shrike-i386-disc1/.discinfo  .

   这是copy shrike-i386-disc1里的isolinux和.discinfo这两个文档到此目录

5 编辑.discinfo文件  将第4行的 1 换成  1,2,3  以表示要用這三个disk iso

6 输入以下命令(以下整个是一条指令)

   mkisofs -o shrike-i386-dvd.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -m TRANS.TBL -x shrike-i386-disc1/.discinfo -x shrike-i386-disc1/isolinux -graft-points shrike-i386-disc1 .discinfo=.discinfo isolinux/=isolinux RedHat/=shrike-i386-disc2/RedHat RedHat/=shrike-i386-disc3/RedHat docs/=shrike-docs

最后生成shrike-i386-dvd.iso,大功告成.将shrike-i386-dvd.iso文件刻成DVD光盘,以后安装Red Hat 9.0时就不用换盘了,够酷吧!

注:mkisofs命令不是Linux系统自带的,用前需要先安装.文件名为

mkisofs-2.01.a19-0.i686.rpm 此文件可到以下地址下载:

http://rpmfind.net/linux/RPM/Pro ... edia_CD_Record.html

安装 rpm -ivh mkisofs-2.01.a19-0.i686.rpm 后,便可使用了!

来自:https://blog.csdn.net/dong_pongkk999/article/details/18137937

======================================================================================
合并 CentOS 6.8 的两个DVD镜像
1、创建相关目录:
mkdir -p /mnt/dvd1 /mnt/dvd2 /mnt/dvd3 /mnt/iso
说明:

/mnt/dvd1和/mnt/dvd2 用于挂载 Centos6.8原有的两个镜像ISO文件

/mnt/dvd3 合并后的镜像文件存放目录

/mnt/iso 制作号ISO镜像的存放目录

注意/ 目录磁盘空间是否够用,由于我这里磁盘不够,所以添加磁盘/dev/sdd,并挂载到/mnt/iso

2、挂载 Centos原来的两个镜像文件
mount /dev/sr0 /mnt/dev1  
     #/dev/sro 为原来镜像CentOS-6.8-x86_64-bin-DVD1


mount /dev/sr1 /mnt/dev2  
   #/dev/sr1 为原来镜像CentOS-6.8-x86_64-bin-DVD2

3、拷贝RPM文件
    首先, 复制第一张DVD(CentOS-6.8-x86_64-bin-DVD1)中的所有文件到 /mnt/dvd3 目录下然后, 只拷贝第二张 DVD 中 Packages 目录下的所有RPM文件到  /mnt/dvd3/Packages 目录下,由于第二张DVD(CentOS-6.8-x86_64-bin-DVD2)不能当做启动光盘,所以只需呀RPM文件即可。

cp  -av  /mnt/dvd1/*  /mnt/dvd3
cp  -v  /mnt/dvd2/Packages/*.rpm  /mnt/dvd3/Packages/

4、合并TRANS.TBL
cat  /mnt/dvd2/Packages/TRANS.TBL  >>  /mnt/dvd3/Packages/TRANS.TBL
mv  /mnt/dvd3/Packages/{TRANS.TBL,TRANS.TBL.BAK}
sort  /mnt/dvd3/Packages/TRANS.TBL.BAK  >  /mnt/dvd3/Packages/TRANS.TBL
rm  -rf  /mnt/dvd3/Packages/TRANS.TBL.BAK
dvd3已经是合并后的文件了,可以用作本地源和做成ISO使用。


5、备份原有YUM配置文件                                                                                                                

mkdir  /etc/yum.repo.d/repo.bak
cp /etc/yum.repo.d/*.repo  /etc/yum.repo.d/repo.bak

6、生成新的YUM配置文件
vim  /etc/yum.repos.d/base.repo
[base]
name=base
baseurl=file:///mnt/dvd3
gpgcheck=0
7、更新YUM源
yum clean all
yum upgrade

8、将 /mnt/dvd3/ 打包为 ISO
mkisofs  -l -J  -L  -r  -V  "CentOS-6.8-x86_64"  -o  /mnt/iso/CentOS-6.8-x86_64-DVD.iso  /mnt/dvd3
来自:http://www.178linux.com/74032
==========================================================================================

工具:UltraISO

1、修改CD1根目录下的.discinfo文件,其文件内容如下():
1047611055.799229
Red Hat Linux 9
i386
1(修改这一行,因为一共有3个CD,在1后面加上",2,3",引号不需要)
RedHat/base
RedHat/RPMS
RedHat/pixmaps

2、修改/RedHat/RPMS目录下的TRANS.TBL文件
此文件存放的是.rpm文件的信息,每张CD的/RedHat/RPMS目录下都有一个,修改的方法是将CD2、CD3中/RedHat/RPMS目录下的TRANS.TBL文件的内容复制到CD1中/RedHat/RPMS目录下的TRANS.TBL文件内容的后面,并用保存后的新文件替换掉CD1中TRANS.TBL原文件。

3、将CD2、CD3中/RedHat/RPMS目录下的所有.rpm格式的文件复制到CD1中/RedHat/RPMS目录下,最后保存就可以了

注意:修改CD1时最好先备份

来自: http://hi.baidu.com/aleonly/blog/item/4d08c8b43a3732788ad4b23c.html

合并 CentOS 6.8 的两个iso镜像:


背景:CentOS5.10出现Crontab运行僵死,是出现日志变大时发现的,原来是Crontab有问题了,怎么办?一是处理Sendmail的文件,http://jackxiang.com/post/2478/,二是处理卸载一下Crontab后再重新安装,可是版本太旧,找了一圈,发现CentOS的官方上还有旧的提供。可以一试。

CentOS5.10旧版本的镜像在:
http://vault.centos.org/5.10/os/x86_64/
cat /etc/yum.repos.d/dvd.repo

找一下这个vixie-cron,能找到,再找repodata,得出结论就是,位置在:http://vault.centos.org/5.10/os/x86_64/
为何在这个位置?因为有这个repodata的索引位置,一般就是指向它,RPMS放哪儿基本上无所谓,名字也可叫别的RPMS里的rpm包放repodata同级目录也成。
[DIR]  CentOS/  01-Jun-2016 15:56             -  
[DIR]  isolinux/  17-Oct-2013 19:26  -  
[DIR]  repodata/  14-Oct-2013 18:52  -  
yum clean all  
yum makecache

当然,也可自己要是有这个ISO的镜像可以挂到自己的repo仓库上面,用Nginx提供服务进行访问。
还是不行,下载地址变了:
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-1of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-2of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-3of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-4of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-5of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-6of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-7of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-8of9.iso
wget -c http://archive.kernel.org/centos-vault/5.10/isos/x86_64/CentOS-5.10-x86_64-bin-9of9.iso

如何将多个ISO文件怎样合并为一个ISO文件(Linux下的操作):http://jackxiang.com/post/9709/
https://blog.csdn.net/dong_pongkk999/article/details/18137937
http://blog.51cto.com/resting/241619

CentOS 5.x 多个ISO文件 安装方法(VMware):https://www.cnblogs.com/iluzhiyong/p/5011161.html
安装完第一个iso,却不知如何换第二个iso。 1 右下角的设备图标,弹出窗口选择CD/DVD2 connection--user iso image file--browse:换成第二个iso文件3 device status--勾上connectedOK,再进入安装界面就可以继续了,后面以此类推。
==============================================================================================

1、挂载光盘
Shell代码  收藏代码
mkdir -p /mnt/cdrom  
mount /dev/cdrom /mnt/cdrom  

2、 修改yum源配置文件(注文件名必须以.repo结尾,最好把原来的yum源配置文件备份到其他目录)
vi /etc/yum.repos.d/CentOS-DVD.repo  
#文件内容  
[ISO]  
name=CentOS-DVD  
baseurl=file:///mnt/cdrom/  
gpgcheck=1  
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5  
  

3、刷新yum源
yum clean all  


4、测试
yum search samba  



来自:https://www.ibm.com/developerworks/cn/linux/l-cn-yum/
         http://crazyidea.iteye.com/blog/798770




背景:Windows下的nmap想看看内网到底有哪些IP被DHCP分配,每次VPN断和网络分不开,有的不断有的断开,我估计和IP有关,除开网关 1 255仨外,252台机器找个低点的或高点的末尾IP试试。

https://nmap.org/download.html
https://nmap.org/dist/nmap-7.70-setup.exe
d:\Program Files\Nmap

nmap -p6379 -script redis-info 10.73.23*.1**    #扫redis的6379端口

一)nmap扫描网段内的所有IP
sudo nmap -sP -PI -PT 192.168.1.0/24
Windows下实践如下:
C:\Users\admin>nmap -sP -PI -PT 172.20.175.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2018-04-04 10:12 ?D1ú±ê×?ê±??
Nmap scan report for bogon (172.20.175.84)
Host is up (0.00s latency).
MAC Address: B0:83:FE:7C:78:21 (Dell)
Nmap scan report for bogon (172.20.175.85)
Host is up (0.00s latency).
MAC Address: 64:00:6A:07:11:0F (Dell)
Nmap scan report for bogon (172.20.175.86)
Host is up.
Nmap done: 256 IP addresses (81 hosts up) scanned in 36.24 seconds
只列出扫描存在的IP和MAc以及Dell品牌电脑,不存在的IP地址未列出。

二)扫描某IP打开了哪些端口:
nmap -p 1-65535 ip

三)扫描指定IP指定端口:
C:\Users\admin>nmap -sT -sV -p80,443,8080 -P0 -n 10.64.6.246
PORT     STATE    SERVICE    VERSION
80/tcp   open     http       Apache httpd 2.2.15 ((CentOS))
443/tcp  filtered https
8080/tcp filtered http-proxy
背景:辅库删除了一个用户,主库也删除了一个用户,于是出现辅库启动时候出现错误,show slave status少一个YES。
错误:2018-03-30T18:41:50.906499+08:00 10 [ERROR] Slave SQL for channel '': Error 'Can't find any matching row in the user table' on query. Default database: ''. Query: 'GRANT DELETE ON *.* TO 'mha_rep'@'10.70.%'', Error_code: 1133
跳过一次或跳过1133都可以,如下:
mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续
跳过错误有两种方式:
1.跳过指定数量的事务:
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务
mysql>slave start

2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误

来源:https://blog.csdn.net/seteor/article/details/17264633
孙思邈在太白山做隐士,是个修行有道之人。他擅长天象历法和摄生养性之术。显庆三年唐高宗召见他时,孙思邈已经九十多岁了,但是他的视力和听力一点都没有减弱。诗人卢照邻和当时的名士宋令文等人,都用对老师的礼节待孙思邈。阅读全文
tail -f  /var/log/messages

Mar 27 20:39:01 localhost systemd: Starting Session 17 of user root.
Mar 27 20:40:01 localhost systemd: Started Session 18 of user root.
Mar 27 20:40:01 localhost systemd: Starting Session 18 of user root.
Mar 27 20:40:01 localhost systemd: Started Session 19 of user root.
Mar 27 20:40:01 localhost systemd: Starting Session 19 of user root.
Mar 27 20:40:12 localhost systemd: Starting Cleanup of Temporary Directories...
Mar 27 20:40:12 localhost systemd: Started Cleanup of Temporary Directories.
Mar 27 20:41:01 localhost systemd: Started Session 20 of user root.
Mar 27 20:41:01 localhost systemd: Starting Session 20 of user root.
Mar 27 20:42:01 localhost systemd: Stopping System Logging Service...




#Restart Syslog
systemctl restart rsyslog

[root@localhost ~]# systemctl restart rsyslog
您在 /var/spool/mail/root 中有新邮件
来自:https://access.redhat.com/solutions/1564823
https://www.linuxquestions.org/questions/linux-security-4/systemd-started-session-of-user-root-in-var-log-messages-4175515978/
背景:向网关发送自己的IP和网卡,进而有包来后,网关都传给本机了。经常会有在线更换Linux服务器IP的操作,该操作带来的一个问题是: 我们已经执行了修改IP的操作,但由于网络上(网关)的ARP缓存暂未更新,导致在某一段时间内,该服务器会有网络不通的情况存在。因此,我们需要在变更IP的同时,通知网关刷新ARP缓存,假设你的eth0接口对应的ip为192.168.1.1,网关为192.168.1.254你就可以使用
arping -U -I eth0 -s 192.168.1.1 192.168.1.254

同理,用它注册VIP虚拟网卡地址也是有必要的,在Mysql和高可用VIP的切换上及时告诉网关我换到另一台机器了,且它是虚拟网卡:
http://jackxiang.com/post/8757/
/sbin/arping -I eth0 -c 1 -s 10.70.57.204 10.70.63.254  #Gateway:10.70.63.254  
-c<数据包的数目> 发送的数据包的数目  
-s 指定源IP地址  
-I<网卡> 使用指定的以太网设备,默认情况下使用eth0  
arp -a  
baigemha_mysql_bj_syq_10_70_61_106 (10.70.57.204) at 00:50:56:89:d2:18 [ether] on eth0

/sbin/arping -I eth0 -c 1 -s 10.70.57.204 10.70.63.254  #Gateway:10.70.63.254  

经常会有在线更换Linux服务器IP的操作,该操作带来的一个问题是: 我们已经执行了修改IP的操作,但由于网络上(网关)的ARP缓存暂未更新,导致在某一段时间内,该服务器会有网络不通的情况存在。

因此,我们需要在变更IP的同时,通知网关刷新ARP缓存。

首先清除本地ARP缓存:

/bin/ip neigh flush dev eth0
其次向网关发送本机的ip/mac地址

/usr/sbin/arping -v -c 2 -S 1.1.1.144 -s 00:17:a4:8d:0e:98 -p 1.1.1.1
1.1.1.144 为本机IP

00:17:a4:8d:0e:98 为本机MAC地址

1.1.1.1 为网关



转载自http://blog.chenxiaosheng.com/posts/2014-03-19/linux-arp-flush.html
阅读全文
mysql> RESET SLAVE ALL ;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
Empty set (0.00 sec)

摘自 :
执行reset slave;
mysql> stop slave;
Query OK, 0 rows affected (0.04 sec)

mysql> reset slave;
Query OK, 0 rows affected (0.02 sec)
在次执行会发现还是会有剩余配置信息
mysql> show slave status\G

最后,
执行reset slave all这个命令看看结果
mysql> reset slave all;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
Empty set (0.00 sec)

果然没有了.reset slave执行的时候会删除master.info和relay-log.info但是同步信息会保留.要想彻底清除可以使用reset slave all.^_^,今天先到这里了.
Linux下查看网关的命令还是很多的,不过如果IP是DHCP获取,那么有些命令是不适用的,当然也有通用的查询网关命令.
配置网关:
vi /etc/sysconfig/network
加入:
GATEWAY=192.168.0.1
完整的如下:
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.1


1.ifconfig -a 和 cat /etc/resolv.conf  (主要查看ip/netmask和dns)
2.netstat -rn
3.cat /etc/sysconfig/network
4.cat /etc/sysconfig/network-scripts/ifcfg-eth0
5.traceroute 第一行就是自己的网关
6.ip route show
7.route -n

以上几个是比较常用的查询网关的命令。下面是范例:

[root@www.ctohome.com]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
184.82.152.96   0.0.0.0         255.255.255.248 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         184.82.152.97   0.0.0.0         UG        0 0          0 eth0

[root@www.ctohome.com]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Intel Corporation 82567V-2 Gigabit Network Connection
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:1c:c0:f8:a1:ac
ONBOOT=yes
NETMASK=255.255.255.248
IPADDR=184.82.152.98
GATEWAY=184.82.152.97
TYPE=Ethernet


[root@www.ctohome.com]# ip route show
184.82.152.96/29 dev eth0  proto kernel  scope link  src 184.82.152.98
169.254.0.0/16 dev eth0  scope link
default via 184.82.152.97 dev eth0


[root@www.ctohome.com]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
184.82.152.96   0.0.0.0         255.255.255.248 U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         184.82.152.97   0.0.0.0         UG    0      0        0 eth0


[root@www.ctohome.com]#  ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:1C:C0:F8:A1:AC  
          inet addr:184.82.152.98  Bcast:184.82.152.103  Mask:255.255.255.248

来自:http://www.360doc.com/content/14/0610/18/203871_385471759.shtml
背景:使用ssh时有时会出现连接一个服务器的时候超慢,一般会显示一下信息,然后就卡在那不动了,发现原来是/etc/resolve.conf文件里的联通DNSIP无法访问导致的,而作了两个操作1)不解析DNS:vim /etc/ssh/sshd_config,设置UseDNS为no,直接重启ssd(sudo service sshd restart)就好了,并不影响当前连接,其它连接重新来就快了。2)更改/etc/ssh/sshd_config,GSSAPIAuthentication no。因为文件里的DNS因为出不了公网尽管修改了这两个项后,依然SSH挺慢的,于是,找网络安全值班的兄弟给加了SNAT,能出公网后,SSH连接就快了。
老外说:Use DNS = no does not prevent sshd from performing DNS lookups, it prevents it from rejecting clients when PTR records don't match.
-u0 prevents sshd from logging DNS names in the utmp struct.
lookups might still happen depending one what a user has in their authorized_keys.
See this for a decent explanation:
http://lists.freebsd.org/pipermail/freebsd-stable/2006-November/030886.html

实践捕获输出看慢哪儿了?
ssh -v -l xiangdong 192.168.111.**
debug1: identity file /home/xiangdong/.ssh/id_ecdsa-cert type -1  #卡这一行了
ll  /home/xiangdong/.ssh/id_ecdsa-cert   #没有这个文件
ls: cannot access /home/xiangdong/.ssh/id_ecdsa-cert: No such file or directory
查下:ssh debug1 identity file hangs
https://www.centos.org/forums/viewtopic.php?t=52538

strace ssh -T -l irdcops 10.70.36.191  捕获输出发现一直在找DNS进行确认,如下:



systemctl restart sshd.service
查看启动是否成功:
ps -ef|grep sshd|grep sbin
root      8503     1  0 Jan08 ?        00:00:00 /usr/sbin/sshd

即使之前连接着的,但是还是会不变,时间不变,为何要过滤掉那个时间,是想看是否真正重启了:
ps -ef|grep sshd




阅读全文
剪切板软件,一个就够了—Ditto:
Clibor – 来自日本的剪贴板辅助工具[Win]:
https://www.appinn.com/clibor/

安装路径:
D:\Program Files\clibor149_en1\Clibor.exe
_________________________________________________________________
干掉Ctrl C!Windows剪切板辅助工具推荐:
http://www.pcpop.com/doc/3/3435/3435118.shtml

Ditto - 不可不用的精品免费Windows剪贴板增强小工具,方便地复制粘贴多条记录:
https://www.iplaysoft.com/ditto.html
一)删除excel文件里从html格式粘贴过去的input文本控件:
Q:如何删除excel文件里从html格式粘贴过去的HtmlInput控件?
A:这是控件,不是什么html格式。直接删除即可。
操作:F5-定位-对象,然后删除。勾选空间就能选中input text控件了。

来自:https://zhidao.baidu.com/question/550606918.html



二)EXCEL保存就提示“此文档包含宏、ActiveX控件”的解除方法:
文件-》选项-》在弹出的窗口选择左侧的“信任中心”。-》在右侧出现选项中点击进入“信任中心设置”:
在新弹出的界面左侧点击“个人信息选项”,将右侧的“保存时从文件属性中删除个人信息”前的勾去掉。

来自:https://jingyan.baidu.com/article/ce09321b42511d2bff858f2a.html

背景:最近装了WinMerge好像出现在桌面点右键盘时会很慢,于是查了下,可以去掉右键,1是通过注册表 修改,二是优化大师。
展开到如下位置,HKEY_CLASSES_ROOT\Directory\Background\Shellex\ContextMenuHandlers ,将里面的没有用的删除掉,
特别是共享文件夹同步:Share,还有GForece显卡啥的,没有用的都干掉。

来自:https://jingyan.baidu.com/article/1876c8529c4ae2890b137690.html

背景:突然一台阿里云玩的低配机器的SSHD服务因缺少openssl-libs和krb5-libs两RPM包无法连接了,建议您使用管理控制台登陆远程,查看一下是否资源满了。
原因:是我自己升级CentOS7.4作yum update时不小心把  grep  的RPM包删除了,导致openssl-libs和krb5-libs被不小心yum remove掉了,引起了SSDH服务挂掉,wget和curl以及mount挂载都丢了,现在我修好了,关单了,如下操作:
      提了个单说用非SecureCRT的网页终端连接,试了一下果然,这个是串口连接的或是Lio。对于yum instal,yum localinstall  都无法用(libcrypto.so.10 找不到,也就是rpm -qf /usr/lib64/libcrypto.so.10 openssl-libs-1.0.2k-8.el7.x86_64包被卸载了导致的),而yum localinstall也不可用,Wget和Scp也都无法用,最后,还好有nc,采用了nc侦听端口,进而传RPM,然后,通过rpm2cpio xx.rpm|cpio -div解压后把,缺少的so全mv到原来rpm安装的位置,救活了系统的sshd和yum  install,说明这两个包太TM重要了不要删除,且在卸载rpm包时,特别是依赖这两个包有可能一并卸载时一定要睁大眼睛注意。

rpm -e grep-2.20-3.el7
rpm -e grep-2.20-3.el7 --noscripts
为依赖而移除:
coreutils                      x86_64                   8.22-18.el7                      @base                        14 M
krb5-libs                      x86_64                   1.15.1-8.el7                     installed                   1.9 M
openssl-libs                   x86_64                   1:1.0.2k-8.el7                   @base                       3.1 M
导致了,sshd,wget,curl,mount全给坍塌了,连接不上服务器了都。
yum remove grep  

1)正在处理依赖关系 grep,它被软件包 krb5-libs-1.15.1-8.el7.x86_64 需要:
rpm -q krb5-libs --requires|grep grep
grep
2)libgssapi_krb5.so.2()(64bit),它被软件包 1:openssl-libs-1.0.2k-8.el7.x86_64 需要
#rpm -q openssl-libs --requires|grep krb5
libgssapi_krb5.so.2()(64bit)
libkrb5.so.3()(64bit)
libkrb5.so.3(krb5_3_MIT)(64bit)
SO来自krb5-libs-1.15.1-8.el7.x86_64.rpm。
3)libcrypto.so.10()(64bit),它被软件包 coreutils-8.22-18.el7.x86_64 需要:
#rpm -q coreutils --requires|grep libcrypto
libcrypto.so.10()(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)


用到yumdownloader和rpm2cpio解压rpm包到目录的cpio -div:
yumdownloader krb5-libs-1.15.1-8.el7.x86_64      #krb5-libs-1.15.1-8.el7.x86_64.rpm

nc 101.200.228.13* 4444 < /tmp/krb5-libs-1.15.1-8.el7.x86_64.rpm
nc -l 4444 > /tmp/krb5-libs-1.15.1-8.el7.x86_64.rpm
rpm2cpio openssl-libs-1.0.2k-8.el7.x86_64.rpm | cpio -div
用到nc重定向后还用到挪动命令mv:mv usr/lib64/* /usr/lib64  #发现用cp都不行,额的个神。

#rpm -ql openssl-libs-1.0.2k-8.el7   #查看rpm包里有哪些文件
/usr/lib64/libssl.so.10
/usr/lib64/libcrypto.so.10

服务器有一个叫iLO远程管理的东西,阿里云的这个应该也是类似的,即使SSHD进程挂了用SecureCRT的SSH连接不上了,可以通过管理控制台登陆远程操作服务器,应该是基于Websocket做的,救急是很有用的,就像这次就是一个活生生的例子:
工程师 64515 号 :    您好,我们根据您的问题情况检查进度如下:
[ 问题现象 ] 无法连接远程
[ 问题实例 ]
[ 处理意见 ] 您好,建议您使用管理控制台登陆远程,查看一下是否资源满了。

阿里云售后提示您: 对于涉及到文件操作,磁盘扩容,磁盘重置,磁盘更换,配置调整等操作,建议您先通过控制台手动创建快照,以免误操作带来的数据丢失风险。  
在扩展程序里面点查看视图,就会到这个页面:
chrome-extension://kimcgbcdngdnggfmkjdmmjceijnkcjmd/index.html

它比Google Chrome自带的书签功能强点在可以批量全择后删除,尤其是一堆垃圾标签,且被Chrome账户关联起来了,这个书签工具不错。

里面就可以管理书签了,相关信息如下:
书签管理
0.0.13
在任何页面都可以通过书签关键字快速搜索打开书签,管理您的书签
ID:kimcgbcdngdnggfmkjdmmjceijnkcjmd
查看视图
index.html

地址:https://chrome.google.com/webstore/detail/%E4%B9%A6%E7%AD%BE%E7%AE%A1%E7%90%86/kimcgbcdngdnggfmkjdmmjceijnkcjmd?utm_source=www.crx4chrome.com

自带的结合着整理书签很有必要,Chrome版本 65.0.3325.146(正式版本) (32 位)的书签也还可以:
chrome://bookmarks/?id=720
背景:为何数组的首地址当指针传入函数时,得传入数组的长度?在函数体内的其实是通过数组名初始化的指针形参,故不能在函数中通过 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度。所以一般将数组名作为形参传入函数时,也会同时传递一个数组长度的参数。为何指针长度是8位,而不是4位?因为系统是64位的(8字节,64位系统)。

数组名一旦传入函数,再用sizeof(数组名,也就是首地址),其得出的值变为8了,不再是1024了,实践如下:
vi fwrite.c

#./fwrite
1)直接在变量申明段里访问数组长度值:sizeof的数组名buffer=1024
2)!!returnArrPointerLen函数返回buffer数组首地址到函数里后长度值就不等于1024了,等于:8
3)returnArrPointerLen函数传入指向数组buffer首地址返回buffer长度和申明数组长度不一样等于8
4)sizeof buf=8
5)strlen buf=44
6)sizeof buf=8
7)strlen buf=34

总之,一旦将数组首地址传入函数,那么其长度就变成了指针长度了,而32位系统和64位系统指针分别对应的是4和8:

#./sizeofarr
1)指向数组首地址,数组的长度是: 20
2)用指针指向数组的首地址长度是: 8
3)试图求下数组第一个键值的空间大小sizeof(number)=4
4)再试图通过sizeof(number)/sizeof(number[0]得出5? 5
数组的元素分别是:
1 2 3 4 5


在c/c++中我们一般都用 sizeof(数组名)/sizeof(数组元素类型) 来计算数组的长度,其中 sizeof(数组名) 计算的是数组占用的存储大小。同时,一般我们认为数组名和指针就是一回事,最近写程序时将数组名作为指针形参传入函数,想在函数中用 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度时却出了错,最后发现原来是sizeof(数组名)和sizeof(指针)的区别导致的,于是写了段代码测试了一下:



输出结果:

数组名:40
指针:8
指针引用:8
函数指针形参:8

可以看到,当sizeof的参数是数组名时,计算的是整个数组的存储大小;当sizeof的参数是指针时,计算的是指针的大小(8字节,64位系统)。而且,可以定义对指针的引用,但却不能用数组名来作为指针引用的右值,可见数组名和指针还是有区别的。同时,将数组名作为实参传入函数时,因为形参是指针,所以在函数体内的其实是通过数组名初始化的指针形参,故不能在函数中通过 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度。所以一般将数组名作为形参传入函数时,也会同时传递一个数组长度的参数。

来自:http://blog.csdn.net/u012707739/article/details/75732159


C语言fwrite怎么写入文件?
==================来自:https://zhidao.baidu.com/question/1893763120275364500.html==================
我设了一个字符串char rgb[3]; 然后用fwrite(&rgb,3,1,file)和fwrite(&rgb,1,3,file)写入一个bmp文件 这两个得到了相同的东西 而fwrite(&rgb,3,2,file)得到的是rgb的三个数据+三个CC(204) 请问fwrite是怎么读取rgb的数据的? 是不是按照首地址++? fwrite(&rgb,3,2,file)里前三个数读完了然后想要读取rgb[3] [4]和[5]但是读取的是乱码 所以默认显示为CC?
fwrite函数在写文件时是以二进制形式进行的。
函数原型:int fwrite(char *ptr, unsigned size, unsigned n, FILE *fp);

功       能:将ptr所指向的n*size个字节输出到fp所指向的文件中

返 回  值:写到fp文件中的数据项的个数

实践:
背景:主进程退出后,子进程没有退出,http://jackxiang.com/post/6937/
父进程退出后,子进程还在,怎么杀死,暂别说平滑过渡死,先杀死子进程得了,当父进程意外退出时,比如coredump了,根本没机会主动发送信号或pipe等消息的。用了prctl 这个调用,实践来自@http://blog.csdn.net/gavin_new/article/details/73432013:
1)子进程加上在子进程中给父进程设置当父进程退出时子进程收到的信号:
    /* 子进程中给父进程设置当父进程退出时子进程收到的信号 */
    prctl(PR_SET_PDEATHSIG, SIGHUP);
  
2)主进程退出退知子进程的信号量执行:
    if (sig == SIGHUP){  
          printf("child recv SIGHUP..\n");//主进程退出退知子进程  
          //kill_signal_master(sig);  //不要这行也成,&kill_signal_worker部分应该作了处理。
    }
3)实践是否真杀死了?
#ps -f -C  multepoolser
UID        PID  PPID  C STIME TTY          TIME CMD
root     14096 13713  0 15:58 pts/1    00:00:00 [httpmut: master process] master process
apache   14097 14096 99 15:58 pts/1    00:00:02 [httpmut: worker process] worker process
#kill -TERM 14096
#ps -f -C  multepoolser   #子进程也被杀死退出了。
UID        PID  PPID  C STIME TTY          TIME CMD
========================具体代码=========================
httpmut父进程处理kill信号:

处理函数:


子进程线号处理侦听函数:


子进程信号处理:


  Linux 中创建子进程是相当方便的,通过fork调用即可。当子进程退出时,要给父进程发送SIG_CHLD信号,是为了父进程回收子进程的资源,方便管理的目的。 但是当父进程退出后,一般是不会通知子进程的,父进程会将自己的所有子进程过继给init进程。

但是,在实际的项目中,我们有这样的需求: 如果父进程退出后,希望能通知子进程退出。

我们知道,可以利用进程间通信机制,在父进程退出前主动发送信号或pipe或其他手段告知子进程自己退出了。

但是,当父进程意外退出时,比如coredump了,根本没机会主动发送信号或pipe等消息的。

这时怎么办呢?

我们发现 prctl 这个调用, 通过man prctl:


据此, 我们可以在子进程中给父进程设置当父进程退出时子进程收到的信号。

代码如下:

通过测试,如果去掉 prctl调用,当父进程发生段错误退出后,子进程依然继续运行。 如果去掉signal调用,即子进程不捕获SIG_HUP信号,当父进程退出后依然会退出,只是退出的有些不优雅罢了。
来自:http://blog.csdn.net/gavin_new/article/details/73432013
实践如下:
#./prctl
in parent.
in child...
memcpy ...
child recv SIGHUP..
in child...
child exit...
段错误(吐核)


二、主进程退出对子线程的影响,线程退出是什么样的一个情况呢?源码来自:http://originlee.com/2015/04/08/influence-of-main-threads-exiting-to-child-thread/
cat ./pthreadtest.c

gcc -o pthreadtest pthreadtest.c -lpthread -lmemcached  
#./pthreadtest
child loops
child loops
child loops
child loops
child loops
...
child loops
child loops
child loops
main exit
运行上面的代码,会发现程序在打印一定数量的「child loops」和一句「main exit」之后退出,并且在退出之前的最后一句打印是「main exit」。

按照他们的逻辑,你看,因为主线程在打印完「main exit」后退出了,然后子线程也跟着退出了,所以随后就没有子线程的打印了。

但其实这里是混淆了进程退出和线程退出的概念了。实际的情况是主线程中的main函数执行完ruturn后弹栈,然后调用glibc库函数exit,exit进行相关清理工作后调用_exit系统调用退出该进程。所以,这种情况实际上是因为进程运行完毕退出导致所有的线程也都跟着退出了,并非是因为主线程的退出导致子线程也退出。
Linux线程模型
实际上,posix线程和一般的进程不同,在概念上没有主线程和子线程之分(虽然在实际实现上还是有一些区分),如果仔细观察apue或者unp等书会发现基本看不到「主线程」或者「子线程」等词语,在csapp中甚至都是用「对等线程」一词来描述线程间的关系。

在Linux 2.6以后的posix线程都是由用户态的pthread库来实现的。在使用pthread库以后,在用户视角看来,每一个tast_struct就对应一个线程(tast_struct原本是内核对应一个进程的结构),而一组线程以及他们所共同引用的一组资源就是进程。从Linux 2.6开始,内核有了线程组的概念,tast_struct结构中增加了一个tgid(thread group id)字段。getpid(获取进程号)通过系统调用返回的也是tast_struct中的tgid,所以tgid其实就是进程号。而tast_struct中的线程号pid字段则由系统调用syscall(SYS_gettid)来获取。

当线程收到一个kill致命信号时,内核会将处理动作施加到整个线程组上。为了应付「发送给进程的信号」和「发送给线程的信号」,tast_struct里面维护了两套signal_pending,一套是线程组共用的,一套是线程独有的。通过kill发送的致命信号被放在线程组共享的signal_pending中,可以任意由一个线程来处理。而通过pthread_kill发送的信号被放在线程独有的signal_pending中,只能由本线程来处理。

关于线程与信号,apue有这么几句:

每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变。这样如果一个线程选择忽略某个信号,而其他的线程可以恢复信号的默认处理行为,或者是为信号设置一个新的处理程序,从而可以撤销上述线程的信号选择。

如果信号的默认处理动作是终止该进程,那么把信号传递给某个线程仍然会杀掉整个进程。

例如一个程序a.out创建了一个子线程,假设主线程的线程号为9601,子线程的线程号为9602(它们的tgid都是9601),因为默认没有设置信号处理程序,所以如果运行命令kill 9602的话,是可以把9601和9602这个两个线程一起杀死的。如果不知道Linux线程背后的故事,可能就会觉得遇到灵异事件了。

另外系统调用syscall(SYS_gettid)获取的线程号与pthread_self获取的线程号是不同的,pthread_self获取的线程号仅仅在线程所依赖的进程内部唯一,在pthread_self的man page中有这样一段话:

Thread IDs are guaranteed to be unique only within a process. A thread ID may be reused after a terminated thread has been joined, or a detached thread has terminated.

所以在内核中唯一标识线程ID的线程号只能通过系统调用syscall(SYS_gettid)获取。

分页: 21/339 第一页 上页 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 下页 最后页 [ 显示模式: 摘要 | 列表 ]