[再次重现]NFS 客户端机运行"df"命令后死掉(没有反应) -- 解决
Unix/LinuxC技术 jackxiang 2017-6-27 22:53
背景:发现df 特别慢,用strace df -h ,发现卡在/mnt/backup,想cd /mnt卡住了,于是,怎么办?发现NFS的Server端都宕机了。
cat /proc/mounts
umount -lf /mnt/backup
umount: only root can do that
Root:
umount -lf /mnt/backup
More: http://justwinit.cn/post/6800/
-------------------------------------------------------------------------------------
这个问题是第二次遇到了。这次一定要记下来,免得日后麻烦!!
问题描述:
有两台服务器,其中一台向另一台通过nfs共享分区,如下:
server A: nfs server
server B: nfs Client
事件发生: Server A,B 因故障同时重启。 重启后,用putty登陆到server A ,运行‘df’命令:
$ df
$ Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 80632188 8899080 67636940 12% /
none 4086484 0 4086484 0% /dev/shm
/dev/sda2 201582252 32076524 159265900 17% /opt
/dev/sda3 201582252 44511180 146831244 24% /fs
/dev/sda7 20161172 332916 18804116 2% /usr/local
/dev/sda8 20161172 78360 19058672 1% /tmp
$(没有出现这个命令提示符)
无奈,只好再用putty 登陆Server A ,将 df 进程kill......
只好尝试重新mount
$mount -t nfs B:/data /mnt/data
failed: RPC Error: Program not registered
哦~~~ ,原来B的nfs 服务没有start... 登陆B:
$serive nfs restart
重新再A上运行df,仍然死掉...
想到先卸载,在挂载:
$umount /mnt/data
device is busy 。
运行fuser -mk /mnt/data 杀掉访问/mnt/data所有进程。
/mnt/data: Stale NFS file handle
在server A 运行 A , ok ~~~
重新mount -t nfs B:/data /mnt/data 打完收工。
来自:http://blog.csdn.net/daniel_cao_/article/details/4584443
cat /proc/mounts
umount -lf /mnt/backup
umount: only root can do that
Root:
umount -lf /mnt/backup
More: http://justwinit.cn/post/6800/
-------------------------------------------------------------------------------------
这个问题是第二次遇到了。这次一定要记下来,免得日后麻烦!!
问题描述:
有两台服务器,其中一台向另一台通过nfs共享分区,如下:
server A: nfs server
server B: nfs Client
事件发生: Server A,B 因故障同时重启。 重启后,用putty登陆到server A ,运行‘df’命令:
$ df
$ Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 80632188 8899080 67636940 12% /
none 4086484 0 4086484 0% /dev/shm
/dev/sda2 201582252 32076524 159265900 17% /opt
/dev/sda3 201582252 44511180 146831244 24% /fs
/dev/sda7 20161172 332916 18804116 2% /usr/local
/dev/sda8 20161172 78360 19058672 1% /tmp
$(没有出现这个命令提示符)
无奈,只好再用putty 登陆Server A ,将 df 进程kill......
只好尝试重新mount
$mount -t nfs B:/data /mnt/data
failed: RPC Error: Program not registered
哦~~~ ,原来B的nfs 服务没有start... 登陆B:
$serive nfs restart
重新再A上运行df,仍然死掉...
想到先卸载,在挂载:
$umount /mnt/data
device is busy 。
运行fuser -mk /mnt/data 杀掉访问/mnt/data所有进程。
/mnt/data: Stale NFS file handle
在server A 运行 A , ok ~~~
重新mount -t nfs B:/data /mnt/data 打完收工。
来自:http://blog.csdn.net/daniel_cao_/article/details/4584443
背景:jenkins有一个好处是可以对多个项目进行用户登录集成发布,而自己搞就是Git钩子触发写的脚本去rsync部署一下,这样没有配置管理的概念,说实话配置管理对于程序员来讲可能刚开始并不理解,但它的存在也有它的道理,没有用为何还催生了配置管理员了呢?是吧。
git hook 加一个rsync脚本就可以完成了,在500块钱的VPS上面搞jenkins,不如在本地搞?
放本地没时间呐,我就下班在地铁上弄弄,网络的好控制。
http://www.tuicool.com/articles/yyEfu2u
--------2017年干点正事---------
跳梁者(73465XX) 10:20:46
你看看你们这些人
顾问好不容易 不去群里逗你们了 办点正事儿 也不支持
赶紧弄点难得 让顾问多忙会儿
Persi(62832XX) 10:22:09
给swoole加几个功能啊,这个事就够他忙的了
git hook 加一个rsync脚本就可以完成了,在500块钱的VPS上面搞jenkins,不如在本地搞?
放本地没时间呐,我就下班在地铁上弄弄,网络的好控制。
http://www.tuicool.com/articles/yyEfu2u
--------2017年干点正事---------
跳梁者(73465XX) 10:20:46
你看看你们这些人
顾问好不容易 不去群里逗你们了 办点正事儿 也不支持
赶紧弄点难得 让顾问多忙会儿
Persi(62832XX) 10:22:09
给swoole加几个功能啊,这个事就够他忙的了
maybe this
$parts = isset($structure->parts) ? $structure->parts : false ;
From:http://stackoverflow.com/questions/10143172/notice-undefined-property-how-do-i-avoid-that-message-in-php/10143274
rpm安装出现问题,提示lock:warning: waiting for transaction lock on /var/lib/rpm/__db.000
Unix/LinuxC技术 jackxiang 2017-6-27 22:36
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
[磁盘问题]Linux下出现Read-only file system/Could not create lock at /xxx/xxx, Read-only file system
Unix/LinuxC技术 jackxiang 2017-6-27 22:33
fsck
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: recovering journal
Error reading block 105417495 (Attempt to read block from filesystem resulted in short read). Ignore error<y>? yes
Force rewrite<y>? yes
fsck.ext4: Bad magic number in super-block while trying to re-open /dev/sda3
e2fsck: io manager magic bad!
============================================
尽管上面没有啥文件,我选了Yes,于是出了问题:
fsck
-bash: /sbin/fsck: Input/output error
-------------------------------------------------
要选No:
尝试执行了一下fsck 直接出现了 修复提示,无任何异常!
如果出现这样的提示,就需要小心:
root@test ~]# fsck
fsck 1.35 (28-Feb-2004)
e2fsck 1.35 (28-Feb-2004)
/dev/sda1 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? no
check aborted.
[root@test ~]#
一定要选择NO,先拆卸文件系统,否则 对文件系统造成毁灭性的打击。
来自:http://blog.csdn.net/snowfoxmonitor/article/details/19121531
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: recovering journal
Error reading block 105417495 (Attempt to read block from filesystem resulted in short read). Ignore error<y>? yes
Force rewrite<y>? yes
fsck.ext4: Bad magic number in super-block while trying to re-open /dev/sda3
e2fsck: io manager magic bad!
============================================
尽管上面没有啥文件,我选了Yes,于是出了问题:
fsck
-bash: /sbin/fsck: Input/output error
-------------------------------------------------
要选No:
尝试执行了一下fsck 直接出现了 修复提示,无任何异常!
如果出现这样的提示,就需要小心:
root@test ~]# fsck
fsck 1.35 (28-Feb-2004)
e2fsck 1.35 (28-Feb-2004)
/dev/sda1 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? no
check aborted.
[root@test ~]#
一定要选择NO,先拆卸文件系统,否则 对文件系统造成毁灭性的打击。
来自:http://blog.csdn.net/snowfoxmonitor/article/details/19121531
zookeeper崩溃后修复之[myid:] - ERROR [main:Util@239] - Last transaction was partial.
Unix/LinuxC技术 jackxiang 2017-6-27 22:30
从网上搜索到方法进行解决:
cat /etc/zookeeper/conf/zoo.cfg
找到dataDir=/var/lib/zookeeper
切换到路径/var/lib/zookeeper
cd /var/lib/zookeeper
查看目录下的文件:
ls
存在version-2
删除version-2
mv ./version-2 ./version-2.bak
然后在zookeeper的实例中添加角色主机,启动成功。
看了老外的文章,下面是处理方法:
more /etc/zookeeper/conf.dist/zoo.cfg
找到datadir
[root@slave2 zookeeper]# pwd
/var/lib/zookeeper
[root@slave2 zookeeper]# ls
myid version-2 version-2.bak
清空version-2目录下的所有文件
来自:http://www.linuxdiyf.com/linux/16941.html
cat /etc/zookeeper/conf/zoo.cfg
找到dataDir=/var/lib/zookeeper
切换到路径/var/lib/zookeeper
cd /var/lib/zookeeper
查看目录下的文件:
ls
存在version-2
删除version-2
mv ./version-2 ./version-2.bak
然后在zookeeper的实例中添加角色主机,启动成功。
看了老外的文章,下面是处理方法:
more /etc/zookeeper/conf.dist/zoo.cfg
找到datadir
[root@slave2 zookeeper]# pwd
/var/lib/zookeeper
[root@slave2 zookeeper]# ls
myid version-2 version-2.bak
清空version-2目录下的所有文件
来自:http://www.linuxdiyf.com/linux/16941.html
安装没有遇到问题,TortoiseGit更新需要卸载时出现的问题,网上说把Exporer给停止掉再重启,发现不行。
再就是有人说那个文件夹C:\Windows\TEMP的权限不对引起,经过一阵折腾,发现的的确是那个问题引起的:
在目录上->右键->属性->安全->组或用户名->TrustedInstaller 权限全给勾上即可。
http://www.win7china.com/html/24965.html
http://www.win7china.com/html/24965.html
方法/步骤
把鼠标放到Win8屏幕的最左下角,等待Win8 Metro界面的缩略图出现后点击鼠标右键,在弹出的菜单中选择“命令提示符(管理员)”
打开的“命令提示符(管理员)”
找到自己将要安装的程序路径,比如:我要安装的这个程序在D盘的Others文件夹下
点击路径那一栏,把路径复制出来,然后再复制程序名称
在“命令提示符(管理员)”中输入 msiexec /package 你将要安装的程序的完整路径及程序名 (注意空格),比如:我是要安装D盘Others文件夹下的msxml
然后按回车键,安装程序就会自动启动,此时,你在安装的过程中就不会碰到2502、2503的错误了
再就是有人说那个文件夹C:\Windows\TEMP的权限不对引起,经过一阵折腾,发现的的确是那个问题引起的:
在目录上->右键->属性->安全->组或用户名->TrustedInstaller 权限全给勾上即可。
http://www.win7china.com/html/24965.html
http://www.win7china.com/html/24965.html
方法/步骤
把鼠标放到Win8屏幕的最左下角,等待Win8 Metro界面的缩略图出现后点击鼠标右键,在弹出的菜单中选择“命令提示符(管理员)”
打开的“命令提示符(管理员)”
找到自己将要安装的程序路径,比如:我要安装的这个程序在D盘的Others文件夹下
点击路径那一栏,把路径复制出来,然后再复制程序名称
在“命令提示符(管理员)”中输入 msiexec /package 你将要安装的程序的完整路径及程序名 (注意空格),比如:我是要安装D盘Others文件夹下的msxml
然后按回车键,安装程序就会自动启动,此时,你在安装的过程中就不会碰到2502、2503的错误了
Linux Pmap 命令 - 查看进程用了多少内存
Unix/LinuxC技术 jackxiang 2017-6-27 22:29
pmap -p pid
linux下如何查看最后登陆的几位用户的详细信息?
Unix/LinuxC技术 jackxiang 2017-6-27 22:23
背景:突然Mount的磁盘脱落挂载了,是不是有人上去做过安全给搞丢了?想看看都是谁?
last -20
lastlog |less
Linux下查看用户登陆历史记录,可以用root用户下的last命令查看:
1.查看单个用户的操作历史
[root@DB-Server ~]# cat /home/username/.bash_history
#username要查看的用户名
2.使用root登陆可查看用户登陆历史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10
root pts/1 :0.0 Wed Dec 18 09:54 still logged in
root pts/4 :0.0 Wed Dec 18 09:43 - 09:48 (00:04)
root pts/1 :0.0 Wed Dec 18 09:43 - 09:48 (00:05)
root pts/3 192.168.103.79 Wed Dec 18 09:41 - 12:40 (02:59)
root pts/4 :0.0 Wed Dec 18 09:28 - 09:30 (00:01)
root pts/3 :0.0 Wed Dec 18 09:27 - 09:30 (00:02)
root pts/2 192.168.103.29 Wed Dec 18 09:27 still logged in
root pts/1 :0.0 Wed Dec 18 09:27 - 09:42 (00:15)
root pts/2 :0.0 Wed Dec 18 09:23 - 09:25 (00:01)
root pts/1 :0.0 Wed Dec 18 09:22 - 09:25 (00:02)
#查看最近10次用户历史操作记录
last 命令:
功能说明:列出目前与过去登入系统的用户相关信息。
语 法:last [-adRx][-f ][-n ][帐号名称…][终端机编号…]
参 数:
-a 把从何处登入系统的主机名称或IP地址,显示在最后一行;
-d 将IP地址转换成主机名称;
-f 指定记录文件;
-n 或- 设置列出名单的显示列数;
-R 不显示登入系统的主机名称或IP地址;
-x 显示系统关机,重新开机,以及执行等级的改变等信息;
lastlog可简单查看所有用户最后一次的登陆时间。
来自:https://zhidao.baidu.com/question/91897351.html
last -20
lastlog |less
Linux下查看用户登陆历史记录,可以用root用户下的last命令查看:
1.查看单个用户的操作历史
[root@DB-Server ~]# cat /home/username/.bash_history
#username要查看的用户名
2.使用root登陆可查看用户登陆历史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10
root pts/1 :0.0 Wed Dec 18 09:54 still logged in
root pts/4 :0.0 Wed Dec 18 09:43 - 09:48 (00:04)
root pts/1 :0.0 Wed Dec 18 09:43 - 09:48 (00:05)
root pts/3 192.168.103.79 Wed Dec 18 09:41 - 12:40 (02:59)
root pts/4 :0.0 Wed Dec 18 09:28 - 09:30 (00:01)
root pts/3 :0.0 Wed Dec 18 09:27 - 09:30 (00:02)
root pts/2 192.168.103.29 Wed Dec 18 09:27 still logged in
root pts/1 :0.0 Wed Dec 18 09:27 - 09:42 (00:15)
root pts/2 :0.0 Wed Dec 18 09:23 - 09:25 (00:01)
root pts/1 :0.0 Wed Dec 18 09:22 - 09:25 (00:02)
#查看最近10次用户历史操作记录
last 命令:
功能说明:列出目前与过去登入系统的用户相关信息。
语 法:last [-adRx][-f ][-n ][帐号名称…][终端机编号…]
参 数:
-a 把从何处登入系统的主机名称或IP地址,显示在最后一行;
-d 将IP地址转换成主机名称;
-f 指定记录文件;
-n 或- 设置列出名单的显示列数;
-R 不显示登入系统的主机名称或IP地址;
-x 显示系统关机,重新开机,以及执行等级的改变等信息;
lastlog可简单查看所有用户最后一次的登陆时间。
来自:https://zhidao.baidu.com/question/91897351.html
lam是用php写的,所以使用时需要php支持很多模块,像对ldap的支持,对zip的支持。
php安装模块见http://fffo.blog.163.com/blog/static/211913068201401464238334/
1、官网下载
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.3.tar.bz2?download
2、解压
tar -xjf ldap-account-manager-4.3.tar.bz2
3、直接移动到apache 根目录
mv ldap-account-manager-4.3 /usr/local/apache/htdocs/lam
4、给它可以访问的权限
chmod 777 -R /usr/local/apache/htdocs/lam
5、进入配置目录
cd /usr/local/apache/htdocs/lam/config
6、创建主参数文件
cp config.cfg_sample config.cfg
7、创建连接ldap服务器参数文件
cp lam.conf_sample lam.conf
vim lam.conf
修改 所有的dc=1v,dc=cn
8、web访问
http://203.195.187.200/lam/templates/login.php
上面的模式是只限管理员登录模式。现在切换到用户登录模式
点击LAM配置——>编辑服务器配置文件——>默认密码是lam(可修改)——>通用设置——>安全设定
From:http://blog.csdn.net/u012461550/article/details/42608781
我的是在:
/usr/local/lam/etc/unix.conf
php安装模块见http://fffo.blog.163.com/blog/static/211913068201401464238334/
1、官网下载
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.3.tar.bz2?download
2、解压
tar -xjf ldap-account-manager-4.3.tar.bz2
3、直接移动到apache 根目录
mv ldap-account-manager-4.3 /usr/local/apache/htdocs/lam
4、给它可以访问的权限
chmod 777 -R /usr/local/apache/htdocs/lam
5、进入配置目录
cd /usr/local/apache/htdocs/lam/config
6、创建主参数文件
cp config.cfg_sample config.cfg
7、创建连接ldap服务器参数文件
cp lam.conf_sample lam.conf
vim lam.conf
修改 所有的dc=1v,dc=cn
8、web访问
http://203.195.187.200/lam/templates/login.php
上面的模式是只限管理员登录模式。现在切换到用户登录模式
点击LAM配置——>编辑服务器配置文件——>默认密码是lam(可修改)——>通用设置——>安全设定
From:http://blog.csdn.net/u012461550/article/details/42608781
我的是在:
/usr/local/lam/etc/unix.conf
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed
$git pull
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 14), reused 3 (delta 1)
error: insufficient permission for adding an object to repository database .git/objects
首先,得是Root:
#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
然后:到那个出现 错的项目目录下面,它下面有一个.git这是肯定的,
1)对这个.git目录权限给斧正:
chmod 755 .git
chown -R xiangdong.irdcops .git
2)给它下面的文件和文件夹的权限斧正:
cd .git
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
参考:http://blog.sina.com.cn/s/blog_87b9bbc70102uyo3.html
fatal: failed to write object
fatal: unpack-objects failed
$git pull
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 14), reused 3 (delta 1)
error: insufficient permission for adding an object to repository database .git/objects
首先,得是Root:
#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
然后:到那个出现 错的项目目录下面,它下面有一个.git这是肯定的,
1)对这个.git目录权限给斧正:
chmod 755 .git
chown -R xiangdong.irdcops .git
2)给它下面的文件和文件夹的权限斧正:
cd .git
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
参考:http://blog.sina.com.cn/s/blog_87b9bbc70102uyo3.html
通过Strace定位故障原因之connect() failed (110: Connection timed out) while connecting to upstream
Unix/LinuxC技术 jackxiang 2017-6-27 22:18
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
git commit -am"" #提交除开没有Add的文件外的所有修改,如:git rm ,git mv,git add....
-----------
背景:一般是自己领先master几个版本,二是自己落后master几个版本,三是自己无论落后还是先进都和Master对齐(比如:分支,git checkout -b feature,修改index.html,再转到git checkout master,再合并分支到master,git merge feature...,最后,解决冲突并git add index.html,当然也可以commit -am....,提交并无误的情况下,删除git的特征分支:git branch -d feature ),如何解决上面三种冲突并能正常提交呢?
零、关于从暂存区回退方面的文章见:https://justwinit.cn/post/9253/
一、Git服务端版本领先问题参考:https://justwinit.cn/post/9300/
二、Git服务端版本落后问题本文解决:
#git push
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
! [rejected] master -> master (fetch first)
error: 无法推送一些引用到 'git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
[root@levoo-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/tmp/gitstudy/conflict/spec.boosh.com.cn]
#git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
展开对象中: 100% (3/3), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
c333506..47f275b master -> origin/master
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。
====================git status 提示双方修改:README.md====================
#git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 1 和 1 处不同的提交。
(使用 "git pull" 来合并远程分支)
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: README.md
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
=====================查看文件=================================
#cat README.md
<<<<<<< HEAD
conflict 9:57 modify
=======
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
>>>>>>> 47f275befbc4fcd306eb4978fb75dde0545b040b
==================解决README.md文件===============
cat README.md
conflict 9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
================再查看该文件并pull一下查看状态================
git pull
error: Pull is not possible because you have unmerged files.
提示:请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记
提示:解决方案并提交。
fatal: Exiting because of an unresolved conflict.
===理解修改尚未加入提交(使用 "git add" 和/或 "git commit -a")=====
git commit-m与-am的区别:https://segmentfault.com/q/1010000005900988
标识:也就是说得理解那几个区,这个-a 是指虽然跟踪了,但是没有git add纳入暂存区(自己已经纳入了,但是因为冲突了,别人修改了,它并没有在自己这边的暂存区里的意思。还得通过git add一次纳入自己本地的暂存区,或直接-a就能把本地合并冲突的文件直接纳入到暂存区,有点绕,应该就是这个意思,就可以git push解决这个冲突了。)
[注意]git commit -am可以写成git commit -a -m,但不能写成git commit -m -a,如果里面有一些草稿文件也就是并不需要提交的其它的文件本就在里面,会被一并提交上暂存区,这个一定要注意用-am时要把它们都删除掉,只留下需要入暂存区的文件,否则,会把所有的没有用的文件纳入后,再git push一下就会出现把很多没有用的文件提交上git服务器上去了。
==========实践上面的理解=============================================
git commit -am"解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。"
[master 0006642] 解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。
============解决冲突后放到暂存区后,再Git push也就成功能======================================
git push
对象计数中: 6, 完成.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 873 bytes | 0 bytes/s, 完成.
Total 6 (delta 0), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
47f275b..0006642 master -> master
最后,果然提交成功,在那个老王的git目录下,再 git pull无问题,查看内容也就下来了:
git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
展开对象中: 100% (6/6), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
47f275b..0006642 master -> origin/master
更新 47f275b..0006642
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
cat README.md
conflict 9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
三、git reset revert 回退回滚取消提交返回上一版本,最常用的是合并feature 分支的冲突解决:
一般没有别人开发出现冲突,是因自己回退引起的,
git reset revert 回退回滚取消提交返回上一版本:http://justwinit.cn/post/9253/
解决冲突合并分支:
http://m.toutiao.org/group/6407171134127472898/?iid=8936996522&app=news_article&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
实践成功如下步骤,注意,这种合并都是基于那个暂存库:
显示本地分支:
git branch
* master
新建分支
准备新的feature1分支,继续我们的新分支开发:
#git checkout -b feature #它是建立并进入到刚进入的分支。
切换到一个新分支 'feature'
再次建立的提示:
git checkout -b feature
fatal: 一个分支名 'feature' 已经存在。
查看分支的建立情况,有了:
git branch
* feature
master
修改文件 修改index.html:
#echo conflict >> index.html
vi index.html
hello jack ,write by feature...
在feature分支上提交:
git add index.html
git commit -m"提交到分支" ./index.html
===================================================================================================
切换回master分支:
git checkout master
A index.html
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
master分支修改:
在master分支上修改index.html:
echo master_conflict >> index.html
vi index.html
add by jack from master...
提交到暂存库:
git commit -am"写两个字试一试吧~"
分支合并
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature
自动合并 index.html
冲突(内容):合并冲突于 index.html
自动合并失败,修正冲突然后提交修正的结果。
#cat index.html
create confilict with feature branch
master_conflict
<<<<<<< HEAD
add by jack from master...
=======
jackX
hello jack ,write by feature...
>>>>>>> feature
#git status #这儿注意了:用git commit -am"" 还是用git add index再git commit -m"" index.html的区别,前面有讲到。
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: index.html
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
#git commit -am"直接am实现不用git add 就提交到master的暂存库里"
[master 386a151] 直接am实现不用git add 就提交到master的暂存库里
#git push
对象计数中: 12, 完成.
压缩对象中: 100% (11/11), 完成.
写入对象中: 100% (12/12), 1.20 KiB | 0 bytes/s, 完成.
Total 12 (delta 5), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
e171ea5..386a151 master -> master
最后,删除feature分支:
# git branch -d feature
已删除分支 feature(曾为 4bcdf8e)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
想从线上获取并覆盖本地:
git reset --hard
git pull
实践如下:
git reset --hard
HEAD 现在位于 a7e4eed rollo back
git log
commit a7e4eed0755b8b8c28de63ecc735565169466f8d
Author: 詹金斯 <17080156868@163.com>
Date: Mon Mar 27 20:55:07 2017 +0800
rollo back
再想回退是不行的:
git revert 0b82ab0dd0c898e0b7c18714a8b81b417f80a7bb zookeeper-3.4.9.el6.x86_64.spec
fatal: bad revision 'zookeeper-3.4.9.el6.x86_64.spec'
查看状态:
git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 2 和 2 处不同的提交。
(使用 "git pull" 来合并远程分支)
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
再从Git服务器上拉取:
git pull
自动合并 centos7/zookeeper-3.4.9.el6.x86_64.spec
冲突(内容):合并冲突于 centos7/zookeeper-3.4.9.el6.x86_64.spec
自动合并失败,修正冲突然后提交修正的结果。
=======================================================
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
在CODE上查看代码片派生到我的代码片
git checkout HEAD file/to/restore
参考自:http://blog.chinaunix.net/uid-10415985-id-4142896.html
http://blog.csdn.net/iefreer/article/details/7679631
-----------
背景:一般是自己领先master几个版本,二是自己落后master几个版本,三是自己无论落后还是先进都和Master对齐(比如:分支,git checkout -b feature,修改index.html,再转到git checkout master,再合并分支到master,git merge feature...,最后,解决冲突并git add index.html,当然也可以commit -am....,提交并无误的情况下,删除git的特征分支:git branch -d feature ),如何解决上面三种冲突并能正常提交呢?
零、关于从暂存区回退方面的文章见:https://justwinit.cn/post/9253/
一、Git服务端版本领先问题参考:https://justwinit.cn/post/9300/
二、Git服务端版本落后问题本文解决:
#git push
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
! [rejected] master -> master (fetch first)
error: 无法推送一些引用到 'git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
[root@levoo-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/tmp/gitstudy/conflict/spec.boosh.com.cn]
#git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
展开对象中: 100% (3/3), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
c333506..47f275b master -> origin/master
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。
====================git status 提示双方修改:README.md====================
#git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 1 和 1 处不同的提交。
(使用 "git pull" 来合并远程分支)
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: README.md
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
=====================查看文件=================================
#cat README.md
<<<<<<< HEAD
conflict 9:57 modify
=======
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
>>>>>>> 47f275befbc4fcd306eb4978fb75dde0545b040b
==================解决README.md文件===============
cat README.md
conflict 9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
================再查看该文件并pull一下查看状态================
git pull
error: Pull is not possible because you have unmerged files.
提示:请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记
提示:解决方案并提交。
fatal: Exiting because of an unresolved conflict.
===理解修改尚未加入提交(使用 "git add" 和/或 "git commit -a")=====
git commit-m与-am的区别:https://segmentfault.com/q/1010000005900988
标识:也就是说得理解那几个区,这个-a 是指虽然跟踪了,但是没有git add纳入暂存区(自己已经纳入了,但是因为冲突了,别人修改了,它并没有在自己这边的暂存区里的意思。还得通过git add一次纳入自己本地的暂存区,或直接-a就能把本地合并冲突的文件直接纳入到暂存区,有点绕,应该就是这个意思,就可以git push解决这个冲突了。)
[注意]git commit -am可以写成git commit -a -m,但不能写成git commit -m -a,如果里面有一些草稿文件也就是并不需要提交的其它的文件本就在里面,会被一并提交上暂存区,这个一定要注意用-am时要把它们都删除掉,只留下需要入暂存区的文件,否则,会把所有的没有用的文件纳入后,再git push一下就会出现把很多没有用的文件提交上git服务器上去了。
==========实践上面的理解=============================================
git commit -am"解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。"
[master 0006642] 解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。
============解决冲突后放到暂存区后,再Git push也就成功能======================================
git push
对象计数中: 6, 完成.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 873 bytes | 0 bytes/s, 完成.
Total 6 (delta 0), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
47f275b..0006642 master -> master
最后,果然提交成功,在那个老王的git目录下,再 git pull无问题,查看内容也就下来了:
git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
展开对象中: 100% (6/6), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
47f275b..0006642 master -> origin/master
更新 47f275b..0006642
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
cat README.md
conflict 9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
三、git reset revert 回退回滚取消提交返回上一版本,最常用的是合并feature 分支的冲突解决:
一般没有别人开发出现冲突,是因自己回退引起的,
git reset revert 回退回滚取消提交返回上一版本:http://justwinit.cn/post/9253/
解决冲突合并分支:
http://m.toutiao.org/group/6407171134127472898/?iid=8936996522&app=news_article&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
实践成功如下步骤,注意,这种合并都是基于那个暂存库:
显示本地分支:
git branch
* master
新建分支
准备新的feature1分支,继续我们的新分支开发:
#git checkout -b feature #它是建立并进入到刚进入的分支。
切换到一个新分支 'feature'
再次建立的提示:
git checkout -b feature
fatal: 一个分支名 'feature' 已经存在。
查看分支的建立情况,有了:
git branch
* feature
master
修改文件 修改index.html:
#echo conflict >> index.html
vi index.html
hello jack ,write by feature...
在feature分支上提交:
git add index.html
git commit -m"提交到分支" ./index.html
===================================================================================================
切换回master分支:
git checkout master
A index.html
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
master分支修改:
在master分支上修改index.html:
echo master_conflict >> index.html
vi index.html
add by jack from master...
提交到暂存库:
git commit -am"写两个字试一试吧~"
分支合并
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature
自动合并 index.html
冲突(内容):合并冲突于 index.html
自动合并失败,修正冲突然后提交修正的结果。
#cat index.html
create confilict with feature branch
master_conflict
<<<<<<< HEAD
add by jack from master...
=======
jackX
hello jack ,write by feature...
>>>>>>> feature
#git status #这儿注意了:用git commit -am"" 还是用git add index再git commit -m"" index.html的区别,前面有讲到。
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: index.html
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
#git commit -am"直接am实现不用git add 就提交到master的暂存库里"
[master 386a151] 直接am实现不用git add 就提交到master的暂存库里
#git push
对象计数中: 12, 完成.
压缩对象中: 100% (11/11), 完成.
写入对象中: 100% (12/12), 1.20 KiB | 0 bytes/s, 完成.
Total 12 (delta 5), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
e171ea5..386a151 master -> master
最后,删除feature分支:
# git branch -d feature
已删除分支 feature(曾为 4bcdf8e)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
想从线上获取并覆盖本地:
git reset --hard
git pull
实践如下:
git reset --hard
HEAD 现在位于 a7e4eed rollo back
git log
commit a7e4eed0755b8b8c28de63ecc735565169466f8d
Author: 詹金斯 <17080156868@163.com>
Date: Mon Mar 27 20:55:07 2017 +0800
rollo back
再想回退是不行的:
git revert 0b82ab0dd0c898e0b7c18714a8b81b417f80a7bb zookeeper-3.4.9.el6.x86_64.spec
fatal: bad revision 'zookeeper-3.4.9.el6.x86_64.spec'
查看状态:
git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 2 和 2 处不同的提交。
(使用 "git pull" 来合并远程分支)
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
再从Git服务器上拉取:
git pull
自动合并 centos7/zookeeper-3.4.9.el6.x86_64.spec
冲突(内容):合并冲突于 centos7/zookeeper-3.4.9.el6.x86_64.spec
自动合并失败,修正冲突然后提交修正的结果。
=======================================================
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
在CODE上查看代码片派生到我的代码片
git checkout HEAD file/to/restore
参考自:http://blog.chinaunix.net/uid-10415985-id-4142896.html
http://blog.csdn.net/iefreer/article/details/7679631
[实践OK]cat | wc -l 少一行的问题,linux的wc -l 命令统计文件少一行(一般是windows文件)。
Php/Js/Shell/Go jackxiang 2017-6-27 22:13
背景:用Windows下的Excel,再倒腾成Txt,在Linux下统计发现少一行,最后,用vi对最后一行的行尾按回车后再加一行,后删除这一行,再统计就对了,具体原因如下。
今天从一个服务器列表来批量执行expect脚本进行Tivoli Endpoint Client的安装,从excel表格中拷贝出服务器名导入到txt文件上传到服务器后,执行wc -l统计发现少了一行,反复对比确认不存在遗失的条目,那么为什么wc -l少一行呢?
查询帮助文件:
[root@managevm1 ~]# wc --help
-l, --lines print the newline counts
-l用来统计新行的个数,那么用什么来标记新行的开始呢?对了!用换行符\n。于是用 vi编辑器打开txt文件,在最后一行的行尾回车下,然后ESC推出到命令模式,dd删除自然生成的最后一个空行。保存退出再次运行wc -l统计,这样就和excel中的行数一样了。
=============================================================
先简单介绍
wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
格式:wc file
命令参数:
-c 统计Bytes数(字节数),并显示文件名
-l 统计行数:使用换行符‘\n’作为行结束标志,实际是统计换行符个数
-m 统计字符数。这个标志不能与 -c标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息
实例:
wc test.txt
6 24 132test.txt
默认输出:行,字数,字节数
test.txt内容
Cat test.txt
test1 name1 age1 sex1
test2 name2 age2 sex2
test3 name3 age3 sex3
test4 name4 age4 sex4
test5 name5 age5 sex5
test6 name6 age6 sex6
问题:wc 统计行数时少一行:
因为wc ?l是按\n作为行结束符统计行数,所以最后一行如果没有\n的话会统计丢失。
实例:比如,在windows下生成同上面test.txt相同的文件testtt.txt,上传到linux下:
cat testtt.txt
test1 name1 age1 sex1
test2 name2 age2 sex2
test3 name3 age3 sex3
test4 name4 age4 sex4
test5 name5 age5 sex5
test6 name6 age6 sex6[wizad@srv26 lmj]$
可以看出结尾有点奇怪。这是因为文件末尾无\n,而是直接用了文件结束符EOF。这样文件使用wc统计就会少一行:
wc -l testtt.txt
5 24 136 testtt.txt
使用管道也不行:
cat testtt.txt | wc -l
5
为什么linux下没有这样的问题?
因为vim编辑器会自动在文件结尾加上\n,在加上文件结束符EOF。(linux下文本文件主要按处理,所以vim会末行自动加\n)
而对windows文件用dos2unix转化也不行:
[wizad@srv26 lmj]$ dos2unix testtt.txt
dos2unix: converting file testtt.txt toUNIX format ...
[wizad@srv26 lmj]$ wc testtt.txt
5 24131 testtt.txt
可以看出windows文件在linux下还是有兼容问题的。文件字数没变24,byte数少5个是windows下行结束符是回车\r+换行\n。而linux下只是换行\n
Vim二进制可以看到不同,\n显示为.,文件结尾没有
来自:http://blog.csdn.net/sws9999/article/details/7942074
今天从一个服务器列表来批量执行expect脚本进行Tivoli Endpoint Client的安装,从excel表格中拷贝出服务器名导入到txt文件上传到服务器后,执行wc -l统计发现少了一行,反复对比确认不存在遗失的条目,那么为什么wc -l少一行呢?
查询帮助文件:
[root@managevm1 ~]# wc --help
-l, --lines print the newline counts
-l用来统计新行的个数,那么用什么来标记新行的开始呢?对了!用换行符\n。于是用 vi编辑器打开txt文件,在最后一行的行尾回车下,然后ESC推出到命令模式,dd删除自然生成的最后一个空行。保存退出再次运行wc -l统计,这样就和excel中的行数一样了。
=============================================================
先简单介绍
wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
格式:wc file
命令参数:
-c 统计Bytes数(字节数),并显示文件名
-l 统计行数:使用换行符‘\n’作为行结束标志,实际是统计换行符个数
-m 统计字符数。这个标志不能与 -c标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息
实例:
wc test.txt
6 24 132test.txt
默认输出:行,字数,字节数
test.txt内容
Cat test.txt
test1 name1 age1 sex1
test2 name2 age2 sex2
test3 name3 age3 sex3
test4 name4 age4 sex4
test5 name5 age5 sex5
test6 name6 age6 sex6
问题:wc 统计行数时少一行:
因为wc ?l是按\n作为行结束符统计行数,所以最后一行如果没有\n的话会统计丢失。
实例:比如,在windows下生成同上面test.txt相同的文件testtt.txt,上传到linux下:
cat testtt.txt
test1 name1 age1 sex1
test2 name2 age2 sex2
test3 name3 age3 sex3
test4 name4 age4 sex4
test5 name5 age5 sex5
test6 name6 age6 sex6[wizad@srv26 lmj]$
可以看出结尾有点奇怪。这是因为文件末尾无\n,而是直接用了文件结束符EOF。这样文件使用wc统计就会少一行:
wc -l testtt.txt
5 24 136 testtt.txt
使用管道也不行:
cat testtt.txt | wc -l
5
为什么linux下没有这样的问题?
因为vim编辑器会自动在文件结尾加上\n,在加上文件结束符EOF。(linux下文本文件主要按处理,所以vim会末行自动加\n)
而对windows文件用dos2unix转化也不行:
[wizad@srv26 lmj]$ dos2unix testtt.txt
dos2unix: converting file testtt.txt toUNIX format ...
[wizad@srv26 lmj]$ wc testtt.txt
5 24131 testtt.txt
可以看出windows文件在linux下还是有兼容问题的。文件字数没变24,byte数少5个是windows下行结束符是回车\r+换行\n。而linux下只是换行\n
Vim二进制可以看到不同,\n显示为.,文件结尾没有
来自:http://blog.csdn.net/sws9999/article/details/7942074
[替换实战]sed模拟替换,sed -i (先sed -n匹配模拟替换输出加p模拟替换显示后)实现*.conf批量替换文件中的控制字符(特别是模拟替换),以替换PHP-FPM的PHP-SOCK位置为例子。
Php/Js/Shell/Go jackxiang 2017-6-27 11:08
核心是模拟替换,用
记住,斜杠要转意,再就是是 sed -n 's#abc#def#p' replcee.txt ==> sed -i 's#abc#def#' replcee.txt 不要有g,如: sed -i #abc#def#g replcee.txt,出现没有被替换:
sed -n "s#,'pdo-mysql-php70-7.0.5'#123#p" ./*.yml #单引不行用双引,sed -n 's#,\'pdo-mysql-php70-7.0.5\'#123#p' ./*.yml
真实的替换将123给去了:
&符号也要转义:
正确替换为:
PHP.ini替换示例:
sed -n "s#stream_socket_server,#333#p" php.ini
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,333fsocket
批量替换包含某些内容的sed结合grep脚本:
sed -i "s#localhost#10.71.182.128#g" grep -rl "localhost" ./
上面也可以实现先模拟替换,再真实替换,更靠谱一些:
sed -n 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#p' *.yml
真的替换:
sed -i 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#' *.yml
nginx.lua2内容,给$upstream_response_time变量加上引号:
'"upstream_response_time":$upstream_response_time,'
sed -n 's@:$upstream_response_time@:"$upstream_response_time"@p' /usr/local/share/lua/5.1/kong/templates/nginx.lua2
'"upstream_response_time":"$upstream_response_time",'
替换一下PHP的SOCK文件位置,/usr/local/php/var/run/php-fpm.sock ===> /dev/shm/php-fcgi.sock:
cat /usr/local/php/etc/php-fpm.conf |grep php-fpm.sock
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fpm.sock
新的:
cat /usr/local/php/etc/php-fpm.conf |grep php-fcgi.sock
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fcgi.sock
启动Nginx和PHP成功后删除软链接的sock文件:
ls -lart /usr/local/php/var/run/php-fpm.sock
rm -rf /usr/local/php/var/run/php-fpm.sock
ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/php/etc/php-fpm.conf"
cp -rf /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf.bak.04.20
sed -i "s/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g" /usr/local/php/etc/php-fpm.conf
diff /usr/local/php/etc/php-fpm.conf.bak.04.20 /usr/local/php/etc/php-fpm.conf
service php-fpm restart
替换Nginx的配置文件:
批量测试:
ansible jack_vedio_upload -a"curl -i -H"Host:u.jackxiang.com" http://127.0.0.1/simpleupload.php"|grep 200 -B 2 > simpleupload.php.test.response.200.log
批量:
ansible 10.71.182.6 -a"sed -i 's/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g' /usr/local/php/etc/php-fpm.conf && service php-fpm restart"
换成#号:
ansible 192.168.112.161 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#g' /usr/local/php/etc/php-fpm.conf"
sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm\.sock#\/dev\/shm\/php-fcgi\.sock#p' /usr/local/nginx/conf/vhost/*.conf
用ansible尝试批量替换#p ,注意显示内容:
ansible 10.71.182.6 -a"sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#p' /usr/local/nginx/conf/vhost/*.conf"
正式开始批量替换:
ansible 10.71.182.6 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou_api -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou_my -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
<H2 class=post-title>用<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现批量替换文件中的控制字符</H2><DIV class=post-body> 有时候会遇到这样一个问题,就是把文件ftp上传到AIX系统以后,发现文件中包含了一些特殊的控制字符,例如最常见的^M。如果文件只是一个两个,那直接用vi打开文件,把文件中的控制字符替换掉就可以了。但如果文件数量很多的话,这样一个个去改就会变得很麻烦。这时候我们可以通过<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现对多个文件的批量处理,具体步骤如下:
1)假设需要修改的文件放在/tmp/test1目录下,然后新建一个目录,如/tmp/test2目录,这个目录用来存放修改后的文件。
ls -1 * | <FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT> '{print "sed 's/^M//g' "$1" >/tmp/test2/"$1}' > sed.sh
生成的脚本文件如下所示:<BR><div class=code>sed s/^M//g test.txt >/tmp/test2/test.txt
sed s/^M//g test2.txt >/tmp/test2/test2.txt
3)执行生成的脚本文件:
就会在/tmp/test2目录下生成去掉控制字符^M后的文件。
一些其他的方法可以参考以下的文章:
<U><FONT color=#0000ff>用sed批量替换文件中的字符</FONT></U></A>
<U><FONT color=#0000ff>批量修改文件</FONT></U></A>
<U><FONT color=#0000ff>sed的in-place edit选项,和RTFM</FONT></U></A>
方法1:
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“替换为”http://localhost:8081/nexus/content/groups/public“.
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g'这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
方法2:
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换为huinanma,执行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
实例代码:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
记住,斜杠要转意,再就是是 sed -n 's#abc#def#p' replcee.txt ==> sed -i 's#abc#def#' replcee.txt 不要有g,如: sed -i #abc#def#g replcee.txt,出现没有被替换:
sed -n "s#,'pdo-mysql-php70-7.0.5'#123#p" ./*.yml #单引不行用双引,sed -n 's#,\'pdo-mysql-php70-7.0.5\'#123#p' ./*.yml
真实的替换将123给去了:
&符号也要转义:
正确替换为:
PHP.ini替换示例:
sed -n "s#stream_socket_server,#333#p" php.ini
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,333fsocket
批量替换包含某些内容的sed结合grep脚本:
sed -i "s#localhost#10.71.182.128#g" grep -rl "localhost" ./
上面也可以实现先模拟替换,再真实替换,更靠谱一些:
sed -n 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#p' *.yml
真的替换:
sed -i 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#' *.yml
nginx.lua2内容,给$upstream_response_time变量加上引号:
'"upstream_response_time":$upstream_response_time,'
sed -n 's@:$upstream_response_time@:"$upstream_response_time"@p' /usr/local/share/lua/5.1/kong/templates/nginx.lua2
'"upstream_response_time":"$upstream_response_time",'
替换一下PHP的SOCK文件位置,/usr/local/php/var/run/php-fpm.sock ===> /dev/shm/php-fcgi.sock:
cat /usr/local/php/etc/php-fpm.conf |grep php-fpm.sock
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fpm.sock
新的:
cat /usr/local/php/etc/php-fpm.conf |grep php-fcgi.sock
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fcgi.sock
启动Nginx和PHP成功后删除软链接的sock文件:
ls -lart /usr/local/php/var/run/php-fpm.sock
rm -rf /usr/local/php/var/run/php-fpm.sock
ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/php/etc/php-fpm.conf"
cp -rf /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf.bak.04.20
sed -i "s/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g" /usr/local/php/etc/php-fpm.conf
diff /usr/local/php/etc/php-fpm.conf.bak.04.20 /usr/local/php/etc/php-fpm.conf
service php-fpm restart
替换Nginx的配置文件:
批量测试:
ansible jack_vedio_upload -a"curl -i -H"Host:u.jackxiang.com" http://127.0.0.1/simpleupload.php"|grep 200 -B 2 > simpleupload.php.test.response.200.log
批量:
ansible 10.71.182.6 -a"sed -i 's/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g' /usr/local/php/etc/php-fpm.conf && service php-fpm restart"
换成#号:
ansible 192.168.112.161 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#g' /usr/local/php/etc/php-fpm.conf"
sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm\.sock#\/dev\/shm\/php-fcgi\.sock#p' /usr/local/nginx/conf/vhost/*.conf
用ansible尝试批量替换#p ,注意显示内容:
ansible 10.71.182.6 -a"sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#p' /usr/local/nginx/conf/vhost/*.conf"
正式开始批量替换:
ansible 10.71.182.6 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou_api -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
ansible xiyou_my -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"
<H2 class=post-title>用<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现批量替换文件中的控制字符</H2><DIV class=post-body> 有时候会遇到这样一个问题,就是把文件ftp上传到AIX系统以后,发现文件中包含了一些特殊的控制字符,例如最常见的^M。如果文件只是一个两个,那直接用vi打开文件,把文件中的控制字符替换掉就可以了。但如果文件数量很多的话,这样一个个去改就会变得很麻烦。这时候我们可以通过<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现对多个文件的批量处理,具体步骤如下:
1)假设需要修改的文件放在/tmp/test1目录下,然后新建一个目录,如/tmp/test2目录,这个目录用来存放修改后的文件。
ls -1 * | <FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT> '{print "sed 's/^M//g' "$1" >/tmp/test2/"$1}' > sed.sh
生成的脚本文件如下所示:<BR><div class=code>sed s/^M//g test.txt >/tmp/test2/test.txt
sed s/^M//g test2.txt >/tmp/test2/test2.txt
3)执行生成的脚本文件:
就会在/tmp/test2目录下生成去掉控制字符^M后的文件。
一些其他的方法可以参考以下的文章:
<U><FONT color=#0000ff>用sed批量替换文件中的字符</FONT></U></A>
<U><FONT color=#0000ff>批量修改文件</FONT></U></A>
<U><FONT color=#0000ff>sed的in-place edit选项,和RTFM</FONT></U></A>
方法1:
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“替换为”http://localhost:8081/nexus/content/groups/public“.
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g'这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
方法2:
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换为huinanma,执行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
实例代码:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
创建规则容易,如何取消规则?
------------------------------------------
开始-----规则---下拉菜单中选择管理规则和通知。
勾选需要取消的规格,将其删除,确定。
来自:http://wenda.so.com/q/1459278170727172?src=140
创建规则:http://wenda.so.com/q/1369953110068210
------------------------------------------
开始-----规则---下拉菜单中选择管理规则和通知。
勾选需要取消的规格,将其删除,确定。
来自:http://wenda.so.com/q/1459278170727172?src=140
创建规则:http://wenda.so.com/q/1369953110068210
MySQL 5.6 警告信息 command line interface can be insecure 修复
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
在命令行输入密码,就会提示这些安全警告信息。
Warning: Using a password on the command line interface can be insecure.
注: mysql -u root -pPASSWORD 或 mysqldump -u root -pPASSWORD 都会输出这样的警告信息.
1、针对mysql
mysql -u root -pPASSWORD 改成mysql -u root -p 在输入密码即可.
2、mysqldump就比较麻烦了,通常都写在scripts脚本中。
解决方法:
对于 mysqldump 要如何避免出现(Warning: Using a password on the command line interface can be insecure.) 警告信息呢?
vim /etc/mysql/my.cnf
[mysqldump]
user=your_backup_user_name
password=your_backup_password
修改完配置文件后, 只需要执行mysqldump 脚本就可以了。备份脚本中不需要涉及用户名密码相关信息。
来自:http://880314.blog.51cto.com/4008847/1348413
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
在命令行输入密码,就会提示这些安全警告信息。
Warning: Using a password on the command line interface can be insecure.
注: mysql -u root -pPASSWORD 或 mysqldump -u root -pPASSWORD 都会输出这样的警告信息.
1、针对mysql
mysql -u root -pPASSWORD 改成mysql -u root -p 在输入密码即可.
2、mysqldump就比较麻烦了,通常都写在scripts脚本中。
解决方法:
对于 mysqldump 要如何避免出现(Warning: Using a password on the command line interface can be insecure.) 警告信息呢?
vim /etc/mysql/my.cnf
[mysqldump]
user=your_backup_user_name
password=your_backup_password
修改完配置文件后, 只需要执行mysqldump 脚本就可以了。备份脚本中不需要涉及用户名密码相关信息。
来自:http://880314.blog.51cto.com/4008847/1348413