linux date时间戳的互相转换

因为需要将时间存入数据库中,为了让数据库的数据比较友好,之前采用了1990-01-01 01:01:01这种格式。计算相隔时间时,应当如下计算:

首先取当前时间:

NOWTIME=`date "+%Y-%m-%d %H:%M:%S"`

将指定时间转为时间戳

time1=$(date +%s -d '$NOWTIME');

将时间戳转成特定时间

time1=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds");

root用户删除文件提示:Operation not permitted

一些文件看上去可能一切正常,但当您尝试删除的时候,居然也会报错,就象下边一样:

rm: cannot unlink `.user.ini': Operation not permitted

身为root用户,我被吓了一大跳,这是被黑了么?各种查询资料,原因终于解开了——lsattr命令。

在lsattr命令下,这个.user.ini文件带有一个”i”的属性,所以才不可以删除。

这个属性专门用来保护重要的文件不被删除,通常的情况下,懂得用这几个命令的通常系统管理员有能力判断这个文件是否可以被删除。如果您想给一个文件多加点保护,可以使用下边的命令:

chattr +i filename

命令,这样一来,想要删除这个文件就要多一个步骤。同时,这样的文件也是不可以编辑和修改的。只有root用户才能使用chattr命令。

类似于和Windows文件系统,不能随意删除的文件多半都有其道理,即使您知道如何删除,都应该三思而后行。

我们现在可以用下边的一系列命令将文件删除掉:

lsattr .user.ini
chattr -i .user.ini
rm -rf .user.ini

使用shell操作数据库

我一般都是用phpmyadmin连接MySQL。偶尔使用shell登陆MySQL时,一些命令常常忘记,于是记录一些MySQL基础的连接操作命令。

交互式

mysql --version		// MySQL版本
mysql -uroot -p		// 登陆,随后输入密码。

mysql> show database;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql> use kelu
Database changed
mysql> show tables;
+----------------+
| Tables_in_kelu  |
+----------------+
| vpn_chargeRec  |
| vpn_online     |
| vpn_record     |
| vpn_subAccount |
| vpn_user       |
+----------------+
5 rows in set (0.00 sec)

mysql> source xxx.sql

脚本

首先,定义一些基本的配置。

#!/bin/bash  
HOSTNAME="127.0.0.1"  
PORT="3306"  
USERNAME="root"  
PASSWORD="root"  
DBNAME="mydb"  
TABLENAME="test"  

接着就是基本的CURD操作.

创建数据库

create_db_sql="create database IF NOT EXISTS ${DBNAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}" 

创建表

create_table_sql="create table IF NOT EXISTS ${TABLENAME} (  name varchar(20), id int(11) default 0 )"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${create_table_sql}"

插入数据

 insert_sql="insert into ${TABLENAME} (username,starttime) values('$PEERNAME','$STARTTIME')"
 mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${insert_sql}"

查询数据

select_sql="select id,starttime from ${TABLENAMEPRE} where username='$PEERNAME' AND IFACE='$PPP_IFACE' AND TTY='$PPP_TTY'"
result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"`

更新数据

update_sql="update ${TABLENAME} set id=3"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${update_sql}"

删除数据

delete_sql="delete from ${TABLENAMEPRE} where id='$idPre'"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_sql}"

网络代理下Dropbox的同步问题

虽然装了代理,原理还是不太明白。Dropbox也没法同步。原本是要查如何在服务器上开socks同步的,发现不用了😄。直接在Dropbox的网络设置里设置代理服务器。代理首选项中选择 SOCKS5,服务器填 127.0.0.1:1080 即可,如下:

image


通过PhpMyAdmin修改MySQL的root密码

今天在本地装了xampp,发现默认root的密码竟然为空。进入PhpMyAdmin时也提示了尽快修改。

image

以前也遇到了好几次这样的问题,都是测试环境其实没什么要紧的。不过上了生产环境之后迟早要修改的,于是现在就来尝试一下了。

修改MySQL root密码

首先用root账号登陆phpmyadmin,然后点击左侧进入mysql数据库,在顶部点击“mysql”进入sql输入界面。输入以下命令:

update user set password=password('123456') where User='root'

其中123456为你希望修改的密码,切记不要在数据库中直接手工修改密码。

image

然后点击右下角的“执行”,看到“影响了x行”,就表示修改成功。

修改配置文件

接着修改config.default.phpconfig.inc.php文件。通过如下命令寻找到这两个文件:

sudo find / -name 'config.default.php'
sudo find / -name 'config.inc.php'

Mac下的安装路径为/Applications/XAMPP/xamppfiles/phpmyadmin/libraries/config.default.php
/Applications/XAMPP/xamppfiles/phpmyadmin/config.inc.php

找到$cfg[‘Servers’][$i][‘password’] = ‘ ‘, 修改为

$cfg['Servers'][$i]['password'] = '123456'; 

重启mysql后新密码生效。

同时还要修改www目录下你的工程的配置文件config.php,修改以下两项

'DB_USER'=>'root', 
'DB_PWD'=>'123456', 

至此,修改完成。


pureftp的卸载,以及ANPQY的意思

卸载

lnmp 1.2下的pureftp有问题,php超时导致nginx出现502错误。于是按照如下方法卸载。

/etc/init.d/pureftpd stop
rm -rf /home/wwwroot/ftp/
rm -rf /usr/local/pureftpd/

debian:  update-rc.d pureftpd remove 或centos: chkconfig pureftpd off

rm -f /etc/init.d/pureftpd

然后删除ftpuser数据库。

引用页:http://bbs.vpser.net/thread-2735-1-1.html

ANPQY

ANPQY 是 All, No, Prompt Off, Quit, Yes 的意思。 (一些ftp服务器返回的信息)

关于 Prompt Off 的意思,可以man ftp得到


Mac 中 Zsh 下 PATH 环境变量的设置

前段时间切换到zsh,今天试着在本地运行jekyll时竟然显示

zsh: command not found: jeykll

感觉是环境变量出了问题。查了一下果然是这方面的原因。总结了一些容易遇到的问题:

  • 自己添加的路径总是被放到系统路径之后
  • 环境变量中的部分路径重复了两遍

先说我的解决办法: 在~/.zshrc的末尾添加

export PATH=$PATH:/Library/Ruby/Gems/2.0.0/gems/jekyll-2.5.3/bin

下面转载一些资料,探讨一下这个问题。

zsh启动顺序

zsh 启动过程中会依次读取以下文件:

  • /etc/zshenv
  • $ZDOTDIR/.zshenv($ZDOTDIR 未设置时默认为 $HOME)
  • 如果是 non-login shell,读取 /etc/zprofile, $ZDOTDIR/.zprofile
  • 如果是 interactive shell,读取 /etc/zshrc, $ZDOTDIR/.zshrc
  • 如果是 login shell,读取 /etc/zlogin, $ZDOTDIR/.zlogin

login shell 是用户登陆时,输入用户名和密码后启动的 shell
non-login shell 是登录以后所打开的 shell
interactive shell 在终端上执行,shell 等待你的输入,并且立即执行你提交的命令,跟用户存在交互
non-interactive shell 以 shell script(非交互)方式执行。

Mac下zsh问题探讨

纯转载

那么问题来了,在 Mac OS X 中打开 iTerm.app 或者 Terminal.app 启动的 shell 是什么类型呢?通常来说,应该是 interactive, non-login shell,但实际上却是 interactive, login shell,至于为什么这样就不深究了。下面的测试代码可以证明:

[[ -o login ]] && echo 'yes' || echo 'no'
[[ -o interactive ]] && echo 'yes' || echo 'no'

所以,打开 iTerm.app 或者 Terminal.app 启动的 shell 会读取上述1-5中存在的所有文件,如果其中多个文件均对 PATH 环境变量作过设置,那么最终呈现的 PATH 环境变量就会比较复杂,部分路径重复也就不足为奇了。

查看 /etc/zshenv,会发现调用的是/usr/libexec/path_helper,而它加载的正是系统路径,并且将系统路径放在最前。
如果接下来用户在 $ZDOTDIR 中的文件中加载了自己设置的路径并置于最前,再接下来再加载的 /etc/zprofile、/etc/zshrc 可能还会调用/usr/libexec/path_helper,又造成了系统路径重新被放到最前面,形成了奇葩的 PATH 环境变量系统路径、自设路径、系统路径交错的现象。

了解了这么多,解决方法也很简单,那就是上述1-5中仅让必要的文件涉及 PATH 环境变量。比如在 /etc/zshenv 中通过调用/usr/libexec/path_helper设置系统路径,$ZDOTDIR/.zshenv 中将自设路径放在最前,其余文件均不涉及 PATH 环境变量设置。

参考资料