如何捕获MySQL数据库中的低效SQL语句:
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改。
MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句:
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
3,slow_query_log_file
记录日志的文件名。
4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
配置好上述几个参数后,我们就可以监视日志,然后着手进行解决了。
来自:http://www.zeuux.com/group/himysql/bbs/content/55137/
中小型MySQL数据库集群方案:
对于中小型MySQL数据库集群,有以下几个特点或需求:
1,数据库写入操作并不密集,单台服务器足以支持。
2,数据库读取操作频繁,需要能够轻松扩展。
3,业务对数据库依赖性强,对于数据库的可用性有较高的要求。
4,应用普遍已经支持数据库读写分离。
5,要求架构简单,不能引入复杂或者不可靠的技术组件。
针对这些特点和需求,我认为合适的架构如下:
1,数据库主库采用DRBD磁盘复制方案,并配合Heartbeat来达到HA的效果。
2,多台数据库辅库使用DR模式的LVS来达到负载均衡和HA的效果。
这样的架构简单且可靠,我认为是中小型MySQL数据库集群比较理想的方案。
你觉得呢?
来自:http://www.zeuux.com/group/himysql/bbs/content/55127/
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改。
MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句:
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
3,slow_query_log_file
记录日志的文件名。
4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
配置好上述几个参数后,我们就可以监视日志,然后着手进行解决了。
来自:http://www.zeuux.com/group/himysql/bbs/content/55137/
中小型MySQL数据库集群方案:
对于中小型MySQL数据库集群,有以下几个特点或需求:
1,数据库写入操作并不密集,单台服务器足以支持。
2,数据库读取操作频繁,需要能够轻松扩展。
3,业务对数据库依赖性强,对于数据库的可用性有较高的要求。
4,应用普遍已经支持数据库读写分离。
5,要求架构简单,不能引入复杂或者不可靠的技术组件。
针对这些特点和需求,我认为合适的架构如下:
1,数据库主库采用DRBD磁盘复制方案,并配合Heartbeat来达到HA的效果。
2,多台数据库辅库使用DR模式的LVS来达到负载均衡和HA的效果。
这样的架构简单且可靠,我认为是中小型MySQL数据库集群比较理想的方案。
你觉得呢?
来自:http://www.zeuux.com/group/himysql/bbs/content/55127/
php setcookie时value为null或空字符串,会删除此cookie
Php/Js/Shell/Go jackxiang 2013-11-15 11:58
背景:Set Cookie时出现两个相同的cookie的key和一样value值 送出,用Cookie::delete('language1');出现第一个给删除了,第二个送出,删除了会在浏览器上提示:值为”deleted”, 过期时间为 Thu, 01-Jan-1970 08:00:01 CST 或者说是 Thu, 01-Jan-1970 00:00:01 GMT
看实现:
上面用的是NULL,于是找到一篇文章讲这个的:
php setcookie时value为null或空字符串,会删除此cookie:
http://www.zhaokunyao.com/archives/4346
看实现:
上面用的是NULL,于是找到一篇文章讲这个的:
php setcookie时value为null或空字符串,会删除此cookie:
http://www.zhaokunyao.com/archives/4346
STRICT_TRANS_TABLES:https://www.cnblogs.com/lxwphp/p/9054971.html
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
背景:线上数据库报:mysql STRICT_TRANS_TABLES严格模式下提示Field 'ip' doesn't have a default value,线下测试机没有报错,外包开发时代码没法保证SQL全写运行无问题。
failed to execute the SQL statement:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect
datetime value: '0000-00-00 00:00:00' for column 'updated_at' at row 1
如果想宽松模式,则注意一下修改一下sql_mode,如下:
这样干的问题:
INNODB加入后,还是不行:
innodb_strict_mode = 1
mysql> show variables like "%str%";
+--------------------+----------------+
| Variable_name | Value |
+--------------------+----------------+
| innodb_strict_mode | ON |
+--------------------+----------------+
1 row in set (0.00 sec)
外网的SQL有问题,内网的测试机db无问题,如下:
REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99')
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
看似找到了,其实不然,和版本无关---另一台测试的db是13的,也是同样ip不能为空,但也不提示:Field 'ip' doesn't have a default value。
找到了:
这个我在我的虚拟机mysql5.6.12 上分别把线上的sql给建立和线下也建立,同时这个+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | OFF |
+--------------------+-------+,
虚拟机是会报没有ip的,所以,得出是mysql的版本造成的。5.6.11(测试),5.6.12(我的虚拟机),5.6.13线上。 12,13是一样的结果,得证。
我这个关系不大:innodb_strict_mode
尽管线上打开了,但是我的虚拟机配置没打开这个,依旧能提示:Field 'ip' doesn't have a default value。
______后来,1)打开my.ini,加入:
#Add Mysql's Innodb strict sql insert mode by:jackxiang date:2013-01-06
2)重启:
[root@localhost mysql]# ./bin/mysqld_safe --defaults-file=conf/my.cnf &
3)再插入OK有提示了:
mysql> REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99');
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
mysql> quit
实践参考两篇文章:
mysql STRICT_TRANS_TABLES严格模式下提示Field 'id' doesn't have a default value:
http://www.zui88.com/blog/view-411.html
Mysql Field * doesn't have a default value解决方法:
http://blog.sina.com.cn/s/blog_43ed7f260100fk6h.html
EOF Add:2014-01-06
——————————————————————————————————————————————————————————————
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
[sql] view plaincopy
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
如果想一劳永逸,那就直接把数据库配置文件my.ini中的相关参数设置为
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
——————————————————————————————————————————————————————————————
解决办法:关闭MySQL的strict mode。具体做法:找到MySQL目录下的my.ini,
将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务。
MySQL 严格模式 sql_mode 收藏
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
非严格模式:会对语法的限制降到最低,导致很多不规范的语句都可以执行,会导致歧义.
严格模式:可以实现严格校检,使错误数据不能插入,从而保证数据准确性.
来自:http://blog.sina.com.cn/s/blog_505d197c0100l1bs.html
来自:http://blog.csdn.net/ldb2741/article/details/5317803
官网:http://forums.mysql.com/read.php?11,581356,581356#msg-581356
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
背景:线上数据库报:mysql STRICT_TRANS_TABLES严格模式下提示Field 'ip' doesn't have a default value,线下测试机没有报错,外包开发时代码没法保证SQL全写运行无问题。
failed to execute the SQL statement:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect
datetime value: '0000-00-00 00:00:00' for column 'updated_at' at row 1
如果想宽松模式,则注意一下修改一下sql_mode,如下:
这样干的问题:
INNODB加入后,还是不行:
innodb_strict_mode = 1
mysql> show variables like "%str%";
+--------------------+----------------+
| Variable_name | Value |
+--------------------+----------------+
| innodb_strict_mode | ON |
+--------------------+----------------+
1 row in set (0.00 sec)
外网的SQL有问题,内网的测试机db无问题,如下:
REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99')
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
看似找到了,其实不然,和版本无关---另一台测试的db是13的,也是同样ip不能为空,但也不提示:Field 'ip' doesn't have a default value。
找到了:
这个我在我的虚拟机mysql5.6.12 上分别把线上的sql给建立和线下也建立,同时这个+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | OFF |
+--------------------+-------+,
虚拟机是会报没有ip的,所以,得出是mysql的版本造成的。5.6.11(测试),5.6.12(我的虚拟机),5.6.13线上。 12,13是一样的结果,得证。
我这个关系不大:innodb_strict_mode
尽管线上打开了,但是我的虚拟机配置没打开这个,依旧能提示:Field 'ip' doesn't have a default value。
______后来,1)打开my.ini,加入:
#Add Mysql's Innodb strict sql insert mode by:jackxiang date:2013-01-06
2)重启:
[root@localhost mysql]# ./bin/mysqld_safe --defaults-file=conf/my.cnf &
3)再插入OK有提示了:
mysql> REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99');
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
mysql> quit
实践参考两篇文章:
mysql STRICT_TRANS_TABLES严格模式下提示Field 'id' doesn't have a default value:
http://www.zui88.com/blog/view-411.html
Mysql Field * doesn't have a default value解决方法:
http://blog.sina.com.cn/s/blog_43ed7f260100fk6h.html
EOF Add:2014-01-06
——————————————————————————————————————————————————————————————
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
[sql] view plaincopy
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
如果想一劳永逸,那就直接把数据库配置文件my.ini中的相关参数设置为
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
——————————————————————————————————————————————————————————————
解决办法:关闭MySQL的strict mode。具体做法:找到MySQL目录下的my.ini,
将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务。
MySQL 严格模式 sql_mode 收藏
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
非严格模式:会对语法的限制降到最低,导致很多不规范的语句都可以执行,会导致歧义.
严格模式:可以实现严格校检,使错误数据不能插入,从而保证数据准确性.
来自:http://blog.sina.com.cn/s/blog_505d197c0100l1bs.html
来自:http://blog.csdn.net/ldb2741/article/details/5317803
官网:http://forums.mysql.com/read.php?11,581356,581356#msg-581356
PHP 5.4不兼容内容
Php/Js/Shell/Go jackxiang 2013-11-12 14:17
陸 一鳴<lu.yiming@outlook.com> 下午 04:11:38
https://gist.github.com/luxixing/7411156
PHP5.3向更高版本迁移的内容基本写完了
感兴趣的看看,有不足之处请在下面的评论反馈,
我会尽量完善
有些内容如果需要优化示例或者新增示例的话也反馈下
https://gist.github.com/luxixing/7411156
https://gist.github.com/luxixing/7411156
PHP5.3向更高版本迁移的内容基本写完了
感兴趣的看看,有不足之处请在下面的评论反馈,
我会尽量完善
有些内容如果需要优化示例或者新增示例的话也反馈下
https://gist.github.com/luxixing/7411156
实践有问题解决如下:
时不时访问不到切换下。这个是别人写的,有个缺点:
里面的中文编码不对,直接打开host文件是中文乱码。
不过,C:\Windows\System32\drivers\etc\hosts
编码修改成utf8就OK了。
——————————————————————————
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
https://github.com/oldj/SwitchHosts/downloads
Windows 绿色版本下载:https://github.com/oldj/SwitchHosts/downloads。
来自:http://oldj.net/article/switchhosts/
百度下载:http://pan.baidu.com/share/link?shareid=150951&uk=3607385901#dir/path=%2Fshare%2FSwitchHosts!
时不时访问不到切换下。这个是别人写的,有个缺点:
里面的中文编码不对,直接打开host文件是中文乱码。
不过,C:\Windows\System32\drivers\etc\hosts
编码修改成utf8就OK了。
——————————————————————————
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
https://github.com/oldj/SwitchHosts/downloads
Windows 绿色版本下载:https://github.com/oldj/SwitchHosts/downloads。
来自:http://oldj.net/article/switchhosts/
百度下载:http://pan.baidu.com/share/link?shareid=150951&uk=3607385901#dir/path=%2Fshare%2FSwitchHosts!
Linux操作系统上lsof命令详解-使用 lsof 查找打开的文件的进程编号,fuser -v和fuser -m。lsof其它常规用法,及如何强制umount出现device is busy,查看是哪些程序占用。当-f强制不行,还得-l ,也就是lazy选项合用才行,再不行只有杀死对应的占用目录的进程。强制卸载。
Unix/LinuxC技术 jackxiang 2013-11-11 11:58
linux umount 时出现device is busy 的处理方法--fuser,20253进程在使用,退出或杀死:
* 查询: fuser -m /media/share #/media/share 是挂载在本地的目录
* fuser -m 找出其所有进程:fuser -m /dev/ttyACM0 | awk '{for(i=1;i<=NF;i++) if($i ~ /^[0-9]+$/) print "ps -p " $i}'|sh
* 显示: /media/share: 25023c #25023c 是进程编号,25023是进程PID。用ps aux|grep 25023进行查看是哪个进程导致出现device is busy
问:lsof -p 1498 | grep ttyACM0
没有输出任何内容,是它有可能打开过,可能并闭了是么,内核会记录下来,我只是查到当时打开过,是这个意思吗
答:是的,你的理解是正确的。即使进程已经打开了一个文件,但在某些情况下,它可能会在后来将其关闭。在这种情况下,`lsof`命令可能不会显示任何与该进程相关的文件描述符。内核确实会记录文件的打开和关闭事件,但是通常情况下,这些记录是暂时的,一般情况下不会保留太长时间。
如果你想要更详细地追踪设备的使用情况,你可能需要使用其他工具或技术,如系统日志(`/var/log/messages`或`/var/log/syslog`),来查看设备的活动历史记录。
—————————————————————某个文件是谁在读取,反查进程有用———————————————————————————————
umount /data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp
/data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp was not found in /proc/mounts 解决办法:
解决:
umount 时使用 -l 命令。
umount /img1/bbs/img1.bbs.cctv.com -f -l #当-f强制不行,还得-l ,也就是lazy选项合用才行,再不行只有杀死对应的占用目录的进程。
sudo umount -l /data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp
-l Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as
soon as it is not busy anymore. (Requires kernel 2.4.11 or later.)
来自:https://blog.csdn.net/robertsong2004/article/details/41346629
[root@iZ25dcp92ckZ multepoolserver]# ps aux|grep hhvm
www 15801 0.0 14.0 826616 142904 ? Sl 14:15 0:00 /usr/bin/hhvm --mode server --user www --config /etc/hhvm/server.ini --config /etc/hhvm/php.ini --config /etc/hhvm/config.hdf
www 15804 0.0 0.1 115212 1404 ? S 14:15 0:00 bash -c ! fuser /data/runsock/hhvm.sock
www 15805 0.0 0.0 107904 828 ? R 14:15 0:00 fuser /data/runsock/hhvm.sock
root 15807 0.0 0.0 110224 904 pts/0 S+ 14:15 0:00 grep --color=auto hhvm
[root@iZ25dcp92ckZ multepoolserver]# fuser /data/runsock/hhvm.sock
/data/runsock/hhvm.sock: 15801
——————————————————————————————————————————————————————————————
我的日志文件太大了,一直在写,但关了还有程序在写,能反查到是谁在写么?
du -sh Remote-20131216.log
4.3G Remote-20131216.log
lsof abc.txt 显示开启文件abc.txt的进程:
lsof Remote-20131216.log .
安装lsof包(yum install lsof),安装完成可以使用lsof命令。
没有:
回忆未来-向东-Jàck 下午 03:41:05
我就是要这个啊哈哈。
没有囁。
大侠江 下午 03:42:36
COMMAND 有没有进程记录
如过没有就没有了
回忆未来-向东-Jàck 下午 03:44:20
我这边是加载的NFS,Linux都挂载到日志上了。
可能是这个原因吧?NFS网络挂载的。
linux中TOP命令显示出COMMAND进程名?
top 后有一个
http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
大侠江 下午 03:48:40
lsof 显示的的COMMAND
回忆未来-向东-Jàck 下午 03:49:51
好几列啊,就lsof lsof |grep xxxx.avi 虽然有点慢,但是可以用。
lsof -f 不行的,先用grep试试吧。那就去掉-f,直接+文件试一试?
不行的。还是 grep 吧 lsof 加上-n貌似会快一点。
确实快了很多,瞬间返回。
这个lsof是啥原理,是扫整个系统的打开文件句柄了?
遍历 /proc/实现的。
fuser
fuser -v file
使用-v选项将显示更全的信息:
# fuser -v /root
USER PID ACCESS COMMAND
/root: root 17923 ..c.. bash
root 24869 ..c.. atop
root@119.10.*.23:~# fuser -v -n tcp 80
用户 进程号 权限 命令
80/tcp: root 7717 F.... nginx
www 7718 F.... nginx
www 7719 F.... nginx
来自:http://www.cnblogs.com/bangerlee/articles/2460614.html
http://www.cnblogs.com/yuboyue/archive/2011/07/18/2109838.html
方法:
lsof-4.82-4.el6.x86_64
[root@localhost htdocs]# rpm -qa|grep lsof
lsof-4.82-4.el6.x86_64
/usr/sbin/lsof|grep "Remote-20131216.log"
阅读全文
less中百分比和数字计算:
我用的格式如下,可能还有其他格式,欢迎补充
注意:括号中间的运算符两边必须有空格,否则结果不对,亲测坑爹啊
margin-left:calc(~"(100% - 225px)");
阅读全文
我用的格式如下,可能还有其他格式,欢迎补充
注意:括号中间的运算符两边必须有空格,否则结果不对,亲测坑爹啊
margin-left:calc(~"(100% - 225px)");
阅读全文
[实践Ok]Sed 正则替换代码中的日志开关、错误级别值修改、注释代码备案。
Php/Js/Shell/Go jackxiang 2013-11-7 10:24
背景:多个项目进行代码的日志打印级别统一替换时,如果文件庞大,数目多,一个个去做显然力不从心,得通过脚本,这种替换sed最适合不过了。
paste imgid.txt times.txt |awk -F"." '{print $1}'|awk -F'T' '{print $1" "$2}'|sed "s/[-:]//g"| paste imgid.txt times.txt |awk -F"." '{print $1}'|awk -F'T' '{print $1" "$2}'|sed "s/[-]//g;s/://g"
[28-Jan-2019 20:22:33 Asia/Shanghai] PHP Warning: Redis::connect(): connect() failed: Cannot assign requested address in /root/a.php on line 6
[28-Jan-2019 20:22:33 Asia/Shanghai] PHP Fatal error: Uncaught RedisException: Redis server went away in /root/a.php:7
Stack trace:
CentOS6和7都要打开,模糊替换:
linux地址重用 net.ipv4.tcp_tw_reuse:
https://blog.csdn.net/pzqingchong/article/details/53580732
sed实现去注释,加中间小横:
#BuildRequires: %{_php_fpm}%{php_version}
#Requires: %{_php_fpm}%{php_version}
fpm}%{php ==替换成=> fpm}-%{php:
如题:
I:
我想把:log_threshold =N;
替换为:log_threshold =1;
我想把:show_debug_errors=AnyWord;
替换为:show_debug_errors=false;
II:
error_reporting(E_ALL ^ E_NOTICE); 变:
//error_reporting(E_ALL ^ E_NOTICE);
I):日志开关,错误级别修改:
一、Sed替换方法如下(该处由scottjiang兄弟提供,后面我发挥了一下下:-)):
二、如果不想备份直接替换:
三、多个项目的index.php都要统一用sed替换:
II):sed实现对PHP代码某特征给注释一行(如:项目上线时不想让其打开错误报告给用户):
如想:
error_reporting(E_ALL ^ E_NOTICE); 变:
//error_reporting(E_ALL ^ E_NOTICE);
sed替换方法:
而:也可结合上面三实现批量替换实现多个文件包含上面串的该行给予注释掉:
四、替换由mysqldump出的自境长字段为0:
情形:Mysqldump出的线下自增长字段,会有默认值,而放到外网则需要从线上开始,此SQL也需要替换的(http://jackxiang.com/post/1188/)
deo` VALUES (1121,NULL,'
用sed替换:
sed -i "s/([0-9]*/(0/g" /tmp/result.sql
替换后,为0,上线插入时则从线上默认增长,而不是上面的1121:
_video` VALUES (0,NULL,'2'
sed -i 's/([0-9]*,/(0,/g' //文件名替换(12122, ==>(0,
paste imgid.txt times.txt |awk -F"." '{print $1}'|awk -F'T' '{print $1" "$2}'|sed "s/[-:]//g"| paste imgid.txt times.txt |awk -F"." '{print $1}'|awk -F'T' '{print $1" "$2}'|sed "s/[-]//g;s/://g"
[28-Jan-2019 20:22:33 Asia/Shanghai] PHP Warning: Redis::connect(): connect() failed: Cannot assign requested address in /root/a.php on line 6
[28-Jan-2019 20:22:33 Asia/Shanghai] PHP Fatal error: Uncaught RedisException: Redis server went away in /root/a.php:7
Stack trace:
CentOS6和7都要打开,模糊替换:
linux地址重用 net.ipv4.tcp_tw_reuse:
https://blog.csdn.net/pzqingchong/article/details/53580732
sed实现去注释,加中间小横:
#BuildRequires: %{_php_fpm}%{php_version}
#Requires: %{_php_fpm}%{php_version}
fpm}%{php ==替换成=> fpm}-%{php:
如题:
I:
我想把:log_threshold =N;
替换为:log_threshold =1;
我想把:show_debug_errors=AnyWord;
替换为:show_debug_errors=false;
II:
error_reporting(E_ALL ^ E_NOTICE); 变:
//error_reporting(E_ALL ^ E_NOTICE);
I):日志开关,错误级别修改:
一、Sed替换方法如下(该处由scottjiang兄弟提供,后面我发挥了一下下:-)):
二、如果不想备份直接替换:
三、多个项目的index.php都要统一用sed替换:
II):sed实现对PHP代码某特征给注释一行(如:项目上线时不想让其打开错误报告给用户):
如想:
error_reporting(E_ALL ^ E_NOTICE); 变:
//error_reporting(E_ALL ^ E_NOTICE);
sed替换方法:
而:也可结合上面三实现批量替换实现多个文件包含上面串的该行给予注释掉:
四、替换由mysqldump出的自境长字段为0:
情形:Mysqldump出的线下自增长字段,会有默认值,而放到外网则需要从线上开始,此SQL也需要替换的(http://jackxiang.com/post/1188/)
deo` VALUES (1121,NULL,'
用sed替换:
sed -i "s/([0-9]*/(0/g" /tmp/result.sql
替换后,为0,上线插入时则从线上默认增长,而不是上面的1121:
_video` VALUES (0,NULL,'2'
sed -i 's/([0-9]*,/(0,/g' //文件名替换(12122, ==>(0,
缩进使用4个空格,而不是 tab。这是PHP编程规范手册中的一句话。
之所以这样,是因为tab在不同的编辑器代表的空格是不一样的,为了排版不出现混乱,规范中建议直接使用空格。
但是直接用空格的话,我们在写代码的时候经常会需要缩进,不用TAB的话工作量是巨大的。
其实,我们完全可以用EditPlus解决这个问题。
写代码的时候放心去用TAB,写完代码后,用鼠标选择全部代码,右击->format(格式)->tabs to spaces(制表符转为空格),这样就可以把所有的tab改为spaces了。
来自:http://hi.baidu.com/amenmen/item/e7c9588eca8f48d65f0ec120
———————————————————————————————————
1.视图->缩进指示。
2.视图->空白->空格。
之所以这样,是因为tab在不同的编辑器代表的空格是不一样的,为了排版不出现混乱,规范中建议直接使用空格。
但是直接用空格的话,我们在写代码的时候经常会需要缩进,不用TAB的话工作量是巨大的。
其实,我们完全可以用EditPlus解决这个问题。
写代码的时候放心去用TAB,写完代码后,用鼠标选择全部代码,右击->format(格式)->tabs to spaces(制表符转为空格),这样就可以把所有的tab改为spaces了。
来自:http://hi.baidu.com/amenmen/item/e7c9588eca8f48d65f0ec120
———————————————————————————————————
1.视图->缩进指示。
2.视图->空白->空格。
背景:有时IE浏览器在访问页面时会缓存,而在多语言的网页设计时往往就会出现切换语言后还是以前的页面,是因为此时多语言页面根本没有去服务器请求,而(1)从本地cache里读取的缘故,同时cookie必须能及时设置成某种语言,不要因Js太多导致在切换语言时没执行到,进而切换了还是没有切换成功的问题。
(2)服务器在这时必须关闭对IE等各种浏览器的cache指示输出才行,否则也会出现因为cookie改变了,服务器还是用以前的html文档给输出,语言没有变。
(3)再就是对CSS等得同一套CSS,输出的各种语言的Html不同,加载上了同一css文件的不同片段进而实现了排版功能。
IE很聪明,如果缓存里面拥有该URL,那就从Cache里面读取数据。
但是有时候我们不希望浏览器读取缓存。IE的聪明就反被聪明误了。
JS实现:
代码
每次页面加载 清空缓存:
来自:http://www.douban.com/note/231598561/
http://bbs.csdn.net/topics/350158157
(2)服务器在这时必须关闭对IE等各种浏览器的cache指示输出才行,否则也会出现因为cookie改变了,服务器还是用以前的html文档给输出,语言没有变。
(3)再就是对CSS等得同一套CSS,输出的各种语言的Html不同,加载上了同一css文件的不同片段进而实现了排版功能。
IE很聪明,如果缓存里面拥有该URL,那就从Cache里面读取数据。
但是有时候我们不希望浏览器读取缓存。IE的聪明就反被聪明误了。
JS实现:
代码
每次页面加载 清空缓存:
来自:http://www.douban.com/note/231598561/
http://bbs.csdn.net/topics/350158157
[实践Ok]Linux下用awk拼接Post字符串、实现一列变成一行的方法也就是列变行及awk 多列变多行的转换, sed和awk实现打印奇数行和偶数行。
Unix/LinuxC技术 jackxiang 2013-11-4 10:19
背景:有时用wireshark抓到的post数据时,需要把一列并成一行形成CUrl格式的数据进行模拟Post请求,用awk快速实现一列变一行。
一、一列变成一行的AWK实现方法:
请教!怎么把一个文本的一列,换成一行?
在vi中能做吗?
sed可以做到
是吗?请教sed怎么实现呢?谢谢!
也就是一个文件是这样的:
oplasttr
dsprjord
accontsup106
alprjinfo
holiday
把它替换成oplasttr dsprjord accontsup106 alprjinfo holiday
cat test.txt | awk '{printf "%s ",$0}'
AWK可以取出任何一列并形成行:
例子:
[root@WANGJIAN ~]# cat file
a 13
b 1
c 23
d 234
[root@WANGJIAN ~]# awk '{printf "%s", $1}' file
abcd
把a、b、c、d与相应的值放到file里,然后通过awk语句实现列变行的转换。
实践如下:
[root@test tmp]# vi test
You have new mail in /var/spool/mail/root
[root@test tmp]# cat test | awk '{printf "%s ",$0}'
oplasttr dsprjord accontsup106 alprjinfo holiday
[root@test tmp]# cat test | awk '{printf "%s ",$1}'
oplasttr dsprjord accontsup106 alprjinfo holiday
而用wireshark导出的Post或Get参数时是以如下形式进行分布的:
Content-Disposition: form-data; name="playlist"
20362
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="user_name"
20120926173632167912
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="email"
21240168
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
用editplus处理下就形成下面的格式了:
1)Content-Disposition: form-data; name=" 全部替换掉。
2)"$ 用正则把后面的"给去掉。
3)------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6 替换掉。
4)用^[\t ]*\n 正则把空行去掉。
形成下面的结构,再用awk处理一下就形成了post的格式(数据多时这样做最省力,少了就自己拼吧):
playlist
20362
user_name
20120926173632167912
email
21240168
如下处理:
自己的实践下要多行,问了下scottjiang兄弟一行搞定:
来自:http://linux.sheup.com/linux/linux5480.htm
二、sed和awk实现打印奇数行和偶数行
假设文件为test.txt
1.奇数行:
awk实现:awk '{if (NR%2==1) print $0}' test.txt
sed实现:sed -n 'p;n' test.txt
2.偶数行:
awk实现:awk '{if (NR%2==0) print $0}' test.txt
sed实现:sed -n 'n;p' test.txt
来自:http://blog.chinaunix.net/uid-7845870-id-3203124.html
三、awk 多列变多行的转换:
tony@tony-LIFEBOOK-LH532:~$ cat test
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
怎么变成
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
——————————————————————
AWK:
实践如下:
[root@test tmp]# vi test
[root@test tmp]# cat test|awk '{for(i=1;i<=NF;i++)a[i]=a[i]?a[i]" "$i:$i}END{for(i=1;i<=NF;i++)print a[i]}'
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4078467
一、一列变成一行的AWK实现方法:
请教!怎么把一个文本的一列,换成一行?
在vi中能做吗?
sed可以做到
是吗?请教sed怎么实现呢?谢谢!
也就是一个文件是这样的:
oplasttr
dsprjord
accontsup106
alprjinfo
holiday
把它替换成oplasttr dsprjord accontsup106 alprjinfo holiday
cat test.txt | awk '{printf "%s ",$0}'
AWK可以取出任何一列并形成行:
例子:
[root@WANGJIAN ~]# cat file
a 13
b 1
c 23
d 234
[root@WANGJIAN ~]# awk '{printf "%s", $1}' file
abcd
把a、b、c、d与相应的值放到file里,然后通过awk语句实现列变行的转换。
实践如下:
[root@test tmp]# vi test
You have new mail in /var/spool/mail/root
[root@test tmp]# cat test | awk '{printf "%s ",$0}'
oplasttr dsprjord accontsup106 alprjinfo holiday
[root@test tmp]# cat test | awk '{printf "%s ",$1}'
oplasttr dsprjord accontsup106 alprjinfo holiday
而用wireshark导出的Post或Get参数时是以如下形式进行分布的:
Content-Disposition: form-data; name="playlist"
20362
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="user_name"
20120926173632167912
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="email"
21240168
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
用editplus处理下就形成下面的格式了:
1)Content-Disposition: form-data; name=" 全部替换掉。
2)"$ 用正则把后面的"给去掉。
3)------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6 替换掉。
4)用^[\t ]*\n 正则把空行去掉。
形成下面的结构,再用awk处理一下就形成了post的格式(数据多时这样做最省力,少了就自己拼吧):
playlist
20362
user_name
20120926173632167912
21240168
如下处理:
自己的实践下要多行,问了下scottjiang兄弟一行搞定:
来自:http://linux.sheup.com/linux/linux5480.htm
二、sed和awk实现打印奇数行和偶数行
假设文件为test.txt
1.奇数行:
awk实现:awk '{if (NR%2==1) print $0}' test.txt
sed实现:sed -n 'p;n' test.txt
2.偶数行:
awk实现:awk '{if (NR%2==0) print $0}' test.txt
sed实现:sed -n 'n;p' test.txt
来自:http://blog.chinaunix.net/uid-7845870-id-3203124.html
三、awk 多列变多行的转换:
tony@tony-LIFEBOOK-LH532:~$ cat test
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
怎么变成
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
——————————————————————
AWK:
实践如下:
[root@test tmp]# vi test
[root@test tmp]# cat test|awk '{for(i=1;i<=NF;i++)a[i]=a[i]?a[i]" "$i:$i}END{for(i=1;i<=NF;i++)print a[i]}'
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4078467
背景:上一家是长城宽代,老是出现劫持右下角的广告,现在换成了联通ADSL,妈的变本加厉啊,直接弹出垃圾黄色页面。于是查一下路由DSN等,发现:路由器变成了121.165.95.229,备用变成了114.114.114.114。网上还有人反馈过。
阅读全文
阅读全文
[实践OK]php的register_shutdown_function函数详解
Php/Js/Shell/Go jackxiang 2013-11-1 16:56
背景:处理网站访问时后面才进行写日志,常看到类似的类里在单例中这样使,好多都是说类中,而没有谈到类中是单例的使用方法,如下:
简单实践:
运行情况:
---------- 调试PHP ----------
注册完shutdown函数
做数据链接,写入日志内容但不写在shutdown:clean_exit时写。
干完所有事情了,立即退出
clean_exit时写在web运行完后在这儿做写日志等的操作,单例模式注册日志先放前面数组,后面在这儿写。
输出完成 (耗时 0 秒) - 正常终止
阅读全文
简单实践:
运行情况:
---------- 调试PHP ----------
注册完shutdown函数
做数据链接,写入日志内容但不写在shutdown:clean_exit时写。
干完所有事情了,立即退出
clean_exit时写在web运行完后在这儿做写日志等的操作,单例模式注册日志先放前面数组,后面在这儿写。
输出完成 (耗时 0 秒) - 正常终止
阅读全文
Firebug下查看Html元素绑定了什么事件
一、用Firefox下的Firebug选择这个元素,然后样式选项卡最右边有个“DOM”,打开,可以看到这个元素绑定的一些事件。
二、在火狐上装了FireQuery插件,一直没去注意它 的用途。就只发现在FireBug的HTML Tab下的HTML代码层次上多了些事件代码,可以点击查看对应的绑定事件。最近的一些使用,发现了FireQuery的好处,特别是在测试动态生成 DOM以及数据测试上很是方便。(1)Firebug->控制台->勾选上Show internal Jquery data。
装好后就会自动引入jQuery.Lint.js对页面代码测试: Firebug->控制台->勾选上引入(2)Jquery Lint ,Show internal Jquery data。
在Console Tab的下拉菜单中启用引入,重新刷新页面后会动态地引入jQuery.Lint.js插件,此时对页面中出现的错误进行输出提示。
下载地址:http://james.padolsey.com/javascript/jquery-lint/
FireQuery的好处,特别是在测试动态生成 DOM以及数据测试上很是方便的文章来源:
http://www.cnblogs.com/yuzhongwusan/archive/2012/01/31/2332606.html
Codes DownLoad:
https://github.com/padolsey/jquery.lint--old/blob/master/jquery.lint.js
_____________________________________________________________
全文来自:
http://www.cnblogs.com/yuzhongwusan/archive/2012/01/31/2332606.html
firequery下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/firequery/
Firequery Test Page:http://firequery.binaryage.com/test/
一、用Firefox下的Firebug选择这个元素,然后样式选项卡最右边有个“DOM”,打开,可以看到这个元素绑定的一些事件。
二、在火狐上装了FireQuery插件,一直没去注意它 的用途。就只发现在FireBug的HTML Tab下的HTML代码层次上多了些事件代码,可以点击查看对应的绑定事件。最近的一些使用,发现了FireQuery的好处,特别是在测试动态生成 DOM以及数据测试上很是方便。(1)Firebug->控制台->勾选上Show internal Jquery data。
装好后就会自动引入jQuery.Lint.js对页面代码测试: Firebug->控制台->勾选上引入(2)Jquery Lint ,Show internal Jquery data。
在Console Tab的下拉菜单中启用引入,重新刷新页面后会动态地引入jQuery.Lint.js插件,此时对页面中出现的错误进行输出提示。
下载地址:http://james.padolsey.com/javascript/jquery-lint/
FireQuery的好处,特别是在测试动态生成 DOM以及数据测试上很是方便的文章来源:
http://www.cnblogs.com/yuzhongwusan/archive/2012/01/31/2332606.html
Codes DownLoad:
https://github.com/padolsey/jquery.lint--old/blob/master/jquery.lint.js
_____________________________________________________________
全文来自:
http://www.cnblogs.com/yuzhongwusan/archive/2012/01/31/2332606.html
firequery下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/firequery/
Firequery Test Page:http://firequery.binaryage.com/test/
JS获取flash版本号
Php/Js/Shell/Go jackxiang 2013-10-31 18:04
这个是同事写的,在这里备注一下:
[实践Ok]SecureCRT 开多个tab时每个tab显示每台机器的标签设定,让secureCRT支持标签跟随 / 不跟随,及Linux/Centos目录看不清的解决办法,查看并勾选会话标签页选项。CentOS服务器定时长时间连结不上检查Wifi命令之nmcli device show wlp2s0 |grep 'GENERAL.STATE',如果不存在则重新连接。
Unix/LinuxC技术 jackxiang 2013-10-30 10:08
/home/irdcops/shell/hiwifi/hiwificonn.sh
chmod +x /home/irdcops/shell/hiwifi/hiwificonn.sh
yum remove NetworkManager
上在这样是不行的,有可能是网IP还在,只是访问有问题:
/home/irdcops/shell/nmcli/nmcli.sh
*/1 * * * * /home/irdcops/shell/nmcli/nmcli.sh >> /data/logs/nmcli/nmcli.log
sh /home/irdcops/shell/nmcli/nmcli.sh
123.125.114.144 Ping is successful.
114.114.114.114 Ping is successful.
111.161.64.48 Ping is successful.
Crontab:
简单的判断Wifi的那个:
/home/irdcops/shell/nmcli/nmcli.sh
Crontab:
实践发现,这块如果是xterm会显示,好像linux不显示这个标签,这块应该可以设置:http://jackxiang.com/post/3474/里,让标签显示文件路径,有描述:
让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录。
==========================================================
实践OK如下:
vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;仿真机\a"
再登录出现如下提示:
-bash: /etc/sysconfig/bash-prompt-xterm: Permission denied
加上权限:
一)CentOS6最终这样写,以eth0网卡为例:
阿里私有云取Eth0:
/sbin/ifconfig eth0|grep "inet"|awk -F' ' '{print $2}'
二)CentOS7,因ifconfig的返回ip格式有变得这样:
echo -ne "\e]2;K8S仿真机-老武在上面测试@$(/sbin/ifconfig eth0|grep "inet"|cut -f2 -d:|awk '{print $2}')\a"
sh /etc/sysconfig/bash-prompt-xterm
Docker仓库机@CentOS7@10.71.182.163
实践发现即使unset进入了,还是会出现SecureCRT的标签没有变化(PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm ,没有进入到默认的分支里去),于是自己 在/etc/bashrc 在判读的前面加了几行Shell,解决了问题,如下:AddTime:2018/05/03
进了这里面去了,但是标签没有变化:
-------------------------------------------------加上可执行权限---------------------------------------------------------
-bash: /etc/sysconfig/bash-prompt-xterm: 权限不够
root@101.200.228.135:~# chmod a+x /etc/sysconfig/bash-prompt-xterm
[/codes]
———————————————————————————————————————————————————————————————
有时会不小心在ctrl+B时误按成Ctrl+V后发现按错了,一瞬间又按了b(或ctrl+b),于是,把原来的会话标签页给去勾选了,标签没了,就当前了。
,查看并勾选会话标签页选项。
http://linuxroad.blog.51cto.com/765922/1022602
在linux系统中设置的方法(此法适用于所有远程登录的软件)
这时候只需要简单两步即可搞定
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;$(ifconfig eth0|grep "inet addr"|cut -f2 -d:|awk '{print $1}')\a"
[root@centos581 sysconfig]# chmod 755 /etc/sysconfig/bash-prompt-xterm
当然,你也可以定义让其显示你指定的字符串。
比如:
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;hello\a"
CentOS7修改好像无效,于是查了一下:
一个是可能修改了hostname:http://jackxiang.com/post/5640/
二是linux下的shell——如何修改shell的提示符,能够出现登录用户名、主机名和路径
有的机器上可能登上去后显示总是-bash-3.00$,解决方法是对比其他机器的~/.bash_profile文件,发现补充上以下东西就可以显示"xx@机器名 当前dir“了。
2 if [ -f ~/.bashrc ]; then
3 . ~/.bashrc
4 fi
5 PATH=$PATH:$HOME/bin
6 export PATH
7 unset USERNAME
深入的看下,发现是在/etc/bashrc文件里面有/etc/sysconfig/bash-prompt-xterm这样的设置,/etc/bashrc:
17 # are we an interactive shell?
18 if [ "$PS1" ]; then
19 case $TERM in
20 xterm*)
21 if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
22 PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
23 else
24 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
25 fi
26 ;;
发现是这个变量在阿里云里有值,而没有加载导致的,如下,非阿里去是没有这个PROMPT_COMMAND参数的: -AddTime:2015-10-12
PROMPT_COMMAND=""; //加一行清空这个变量也就对了,PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm能运行进去了,呵呵:
if [ -z "$PROMPT_COMMAND" ]; then 这一行阿里云给加上了,其它常规linux没有的,像centOS啥的:
-z STRING
the length of STRING is zero
PROMPT_COMMAND估计是干这事的:Linux利用PROMPT_COMMAND实现操作记录的功能,http://www.bdqn.cn/news/201312/12316.shtml
Linux 利用 PROMPT_COMMAND 实现审计功能 :http://blog.163.com/ly_89/blog/static/1869022992011756434459/
看了下:/var/log/sa:
sa01 sa03 sa05 sa07 sa09 ... sa30 (一个月的日志)
————————————————————————
if [ "$PS1" ]; then
if [ -z "$PROMPT_COMMAND" ]; then #[ -z STRING ] “STRING” 的长度为零则为真。 https://blog.csdn.net/longyinyushi/article/details/50728049
case $TERM in
xterm*|vte*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
PROMPT_COMMAND="__vte_prompt_command"
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
来自:http://www.cnblogs.com/mangu-uu/archive/2012/10/08/2715503.html
cat /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]3;阿里云bobWB's VPS@$(/sbin/ifconfig eth1|grep "inet"|awk -F" " '{print $2}')\a"
下次登录后就secureCRT标签里就会出现:
阿里云bobWB's VPS@101.200.1.***
————————————————————————————————————————————————————————————————
方法:
步骤一:
使用xterm让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录,
这样就会自动修改标签标题,还会包含当前目录,类似这样:
user@host:/home/user/
步骤二:把IP地址由localhost修改为真实IP,多机器时好维护
将服务器名称设为你清楚的名字或者是ip地址,
这样连上服务器了,标签只是显示名称了,而不是登入后的帐号名和登入服务器的主机名:
________________________________________________________________
永久性修改服务器名称:
编辑/etc/sysconfig/network
修改HOSTNAME=新名称
保存后退出
同时修改/etc/hosts
添加一行 127.0.0.1 新名称
保存后退出
好了,如果是服务器建议还是重启一次,更新主机名,如果是普通用户电脑,那么就继续玩吧,这次就暂时用hostname修改,下次重启就正常了。
步骤三:对投影仪、Linux下的目录因颜色导致看不清的解决办法:
在使用投影仪的时候,可以勾选“Use color scheme”,即可以实现白底黑字效果,这样比黑底白字看的清楚些。
设置成xterm后,会发现在黑色背景下,目录的颜色太深,看不太清楚:
目录看不清的解决方案:Global Options => Terminal => Appearance => ANSI Color:将Normal color的颜色改成自己喜欢的颜色即可。(勾选“ANSI Color”, 才能显示鲜艳的颜色)
改变显示的最大列(默认80列,不满屏):
1) Global Options => Terminal => Appearance, 调整最大列为300;(实践Ok:选项->全局选项->外观->最大列:300)
2) Options => Session Options => Terminal => Emulation,调整逻辑列为132(或其他)(实践Ok:选项->会话选项->终端->仿真->逻辑列:132)
参考:
http://blog.opvps.com/securecrt-%E6%98%BE%E7%A4%BA%E6%A0%87%E7%AD%BE%E8%AE%BE%E5%AE%9A/
http://z515123.blog.51cto.com/679304/647679
chmod +x /home/irdcops/shell/hiwifi/hiwificonn.sh
yum remove NetworkManager
上在这样是不行的,有可能是网IP还在,只是访问有问题:
/home/irdcops/shell/nmcli/nmcli.sh
*/1 * * * * /home/irdcops/shell/nmcli/nmcli.sh >> /data/logs/nmcli/nmcli.log
sh /home/irdcops/shell/nmcli/nmcli.sh
123.125.114.144 Ping is successful.
114.114.114.114 Ping is successful.
111.161.64.48 Ping is successful.
Crontab:
简单的判断Wifi的那个:
/home/irdcops/shell/nmcli/nmcli.sh
Crontab:
实践发现,这块如果是xterm会显示,好像linux不显示这个标签,这块应该可以设置:http://jackxiang.com/post/3474/里,让标签显示文件路径,有描述:
让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录。
==========================================================
实践OK如下:
vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;仿真机\a"
再登录出现如下提示:
-bash: /etc/sysconfig/bash-prompt-xterm: Permission denied
加上权限:
一)CentOS6最终这样写,以eth0网卡为例:
阿里私有云取Eth0:
/sbin/ifconfig eth0|grep "inet"|awk -F' ' '{print $2}'
二)CentOS7,因ifconfig的返回ip格式有变得这样:
echo -ne "\e]2;K8S仿真机-老武在上面测试@$(/sbin/ifconfig eth0|grep "inet"|cut -f2 -d:|awk '{print $2}')\a"
sh /etc/sysconfig/bash-prompt-xterm
Docker仓库机@CentOS7@10.71.182.163
实践发现即使unset进入了,还是会出现SecureCRT的标签没有变化(PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm ,没有进入到默认的分支里去),于是自己 在/etc/bashrc 在判读的前面加了几行Shell,解决了问题,如下:AddTime:2018/05/03
进了这里面去了,但是标签没有变化:
-------------------------------------------------加上可执行权限---------------------------------------------------------
-bash: /etc/sysconfig/bash-prompt-xterm: 权限不够
root@101.200.228.135:~# chmod a+x /etc/sysconfig/bash-prompt-xterm
[/codes]
———————————————————————————————————————————————————————————————
有时会不小心在ctrl+B时误按成Ctrl+V后发现按错了,一瞬间又按了b(或ctrl+b),于是,把原来的会话标签页给去勾选了,标签没了,就当前了。
,查看并勾选会话标签页选项。
http://linuxroad.blog.51cto.com/765922/1022602
在linux系统中设置的方法(此法适用于所有远程登录的软件)
这时候只需要简单两步即可搞定
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;$(ifconfig eth0|grep "inet addr"|cut -f2 -d:|awk '{print $1}')\a"
[root@centos581 sysconfig]# chmod 755 /etc/sysconfig/bash-prompt-xterm
当然,你也可以定义让其显示你指定的字符串。
比如:
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;hello\a"
CentOS7修改好像无效,于是查了一下:
一个是可能修改了hostname:http://jackxiang.com/post/5640/
二是linux下的shell——如何修改shell的提示符,能够出现登录用户名、主机名和路径
有的机器上可能登上去后显示总是-bash-3.00$,解决方法是对比其他机器的~/.bash_profile文件,发现补充上以下东西就可以显示"xx@机器名 当前dir“了。
2 if [ -f ~/.bashrc ]; then
3 . ~/.bashrc
4 fi
5 PATH=$PATH:$HOME/bin
6 export PATH
7 unset USERNAME
深入的看下,发现是在/etc/bashrc文件里面有/etc/sysconfig/bash-prompt-xterm这样的设置,/etc/bashrc:
17 # are we an interactive shell?
18 if [ "$PS1" ]; then
19 case $TERM in
20 xterm*)
21 if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
22 PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
23 else
24 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
25 fi
26 ;;
发现是这个变量在阿里云里有值,而没有加载导致的,如下,非阿里去是没有这个PROMPT_COMMAND参数的: -AddTime:2015-10-12
PROMPT_COMMAND=""; //加一行清空这个变量也就对了,PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm能运行进去了,呵呵:
if [ -z "$PROMPT_COMMAND" ]; then 这一行阿里云给加上了,其它常规linux没有的,像centOS啥的:
-z STRING
the length of STRING is zero
PROMPT_COMMAND估计是干这事的:Linux利用PROMPT_COMMAND实现操作记录的功能,http://www.bdqn.cn/news/201312/12316.shtml
Linux 利用 PROMPT_COMMAND 实现审计功能 :http://blog.163.com/ly_89/blog/static/1869022992011756434459/
看了下:/var/log/sa:
sa01 sa03 sa05 sa07 sa09 ... sa30 (一个月的日志)
————————————————————————
if [ "$PS1" ]; then
if [ -z "$PROMPT_COMMAND" ]; then #[ -z STRING ] “STRING” 的长度为零则为真。 https://blog.csdn.net/longyinyushi/article/details/50728049
case $TERM in
xterm*|vte*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
PROMPT_COMMAND="__vte_prompt_command"
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
来自:http://www.cnblogs.com/mangu-uu/archive/2012/10/08/2715503.html
cat /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]3;阿里云bobWB's VPS@$(/sbin/ifconfig eth1|grep "inet"|awk -F" " '{print $2}')\a"
下次登录后就secureCRT标签里就会出现:
阿里云bobWB's VPS@101.200.1.***
————————————————————————————————————————————————————————————————
方法:
步骤一:
使用xterm让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录,
这样就会自动修改标签标题,还会包含当前目录,类似这样:
user@host:/home/user/
步骤二:把IP地址由localhost修改为真实IP,多机器时好维护
将服务器名称设为你清楚的名字或者是ip地址,
这样连上服务器了,标签只是显示名称了,而不是登入后的帐号名和登入服务器的主机名:
________________________________________________________________
永久性修改服务器名称:
编辑/etc/sysconfig/network
修改HOSTNAME=新名称
保存后退出
同时修改/etc/hosts
添加一行 127.0.0.1 新名称
保存后退出
好了,如果是服务器建议还是重启一次,更新主机名,如果是普通用户电脑,那么就继续玩吧,这次就暂时用hostname修改,下次重启就正常了。
步骤三:对投影仪、Linux下的目录因颜色导致看不清的解决办法:
在使用投影仪的时候,可以勾选“Use color scheme”,即可以实现白底黑字效果,这样比黑底白字看的清楚些。
设置成xterm后,会发现在黑色背景下,目录的颜色太深,看不太清楚:
目录看不清的解决方案:Global Options => Terminal => Appearance => ANSI Color:将Normal color的颜色改成自己喜欢的颜色即可。(勾选“ANSI Color”, 才能显示鲜艳的颜色)
改变显示的最大列(默认80列,不满屏):
1) Global Options => Terminal => Appearance, 调整最大列为300;(实践Ok:选项->全局选项->外观->最大列:300)
2) Options => Session Options => Terminal => Emulation,调整逻辑列为132(或其他)(实践Ok:选项->会话选项->终端->仿真->逻辑列:132)
参考:
http://blog.opvps.com/securecrt-%E6%98%BE%E7%A4%BA%E6%A0%87%E7%AD%BE%E8%AE%BE%E5%AE%9A/
http://z515123.blog.51cto.com/679304/647679