Tag: Summary

  • 如何查看 Linux 系统安装的时间

    有个办法是查看 lost+found 目录状态,因为这个目录一般很少用到,改动最少(很可能无任何改动),而其他目录比如 /bin, /home 等因为经常升级系统、创建用户等操作会修改目录状态。

    $ stat /lost+found/
    File: `/lost+found/’
    Size: 16384 Blocks: 32 IO Block: 4096 directory
    Device: 805h/2053d Inode: 11 Links: 2
    Access: (0700/drwx——) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2010-03-11 02:40:20.000000000 -0800
    Modify: 2010-03-10 19:14:34.000000000 -0800
    Change: 2010-03-10 19:14:34.000000000 -0800

    还有一种办法是查看 bin, daemon, sys, adm 等这些帐号的建立时间,这些帐号是在系统安装的时候创建的,所以这些帐号的创建时间基本上就是 Linux 系统的安装时间:

    # passwd -S bin
    bin LK 2010-03-10 0 99999 7 -1 (Alternate authentication scheme in use.)

    # passwd -S daemon
    daemon LK 2010-03-10 0 99999 7 -1 (Alternate authentication scheme in use.)

    上面这个看帐号创建时间的方式有局限性,不同的 Linux 发行版安装的时候处理 bin, daemon 这些系统帐号的方式不同,有的是直接从安装光盘拷贝这些帐号和相关文件,有的是安装脚本自动创建。只有安装脚本自动创建的发行版本才能根据帐号的创建时间来判断系统的安装时间。

    转载自:http://www.vpsee.com/2011/06/how-to-find-out-a-linux-system-installation-date/

    use this:

    stat /etc/shadow

  • sed命令用法及示例

    sed–文件流编辑器,过滤和改变文本

    gnu的说明文档:http://www.gnu.org/software/sed/manual/sed.html

    sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合并、交换文本中,可替换(substuite)它们当中的字串、转换(tranfer)其中的字母。

    sed由标准输入读入一行资料并放入pattern space时,依照设定好的规则,逐一对pattern space内的资料执行编辑后标准输出;接着再将下一行资料读入。如此重执行上述动作直到处理完成。即:

    (1)sed总是以行对输入进行处理
    (2)sed处理的不是原文件而是原文件的拷贝

    用法: sed [OPTION]… {script-only-if-no-other-script} [input-file]
    即: sed 选项 执行方法 执行文件

    sed -e 表示不会修改文件,操作的对像是读取的文件

    sed -i 表示in-place,就地修改,所以要小心使用

    直接上实例,以下实例都用sed -i,要来就来真的,更高级的用法需要学习正则表达式。

    删除

    删除第x行,x是数字;如删除第25行

    sed -i '25d' filename

    删除第n到m行;如删除第20到30行

    sed -e '20,30d' filename

    删除第一行到最后一行,不过没多大意义

    sed -e '1,$d' filename

    删除包含abc的所有行

    sed -e '/abc/d' filename

    删除不含有字符串abc的所有行

    sed -e '/abc/!d' filename

    替换

    替换字符串的参数为s(string),替换行的命令为c;后面g表示匹配所有

    将第一行替换为#!/bin/bash

    sed -i '1c\#!/bin/bash' filename

    将第1到10行替换成 i love you

    sed -i '1,10c\I love you' filename

    将第12行中的dz,换为xxx

    sed -i "12s/dz/xxx/g" /web/club/config.php

    将文件中39-41行的apache换为nginx

    sed -i "39,41s/apache/nginx/g" /etc/php-fpm.d/www.conf

    替换/home下所有文件中的www.jpuyy.com为jpuyy.com,要小心使用

    sed -i "s/www.jpuyy.com/jpuyy.com/g" `grep www.jpuyy.com -rl /home`

    将每行的行首插入#,虽然这是插入,但其实也是替换

    sed -i 's/^/\#/' test

    把单引号变为双引号

    sed -i 's/'"'"/'"''/g' filename

    把双引号变为单引号

    sed -i 's/''"'/"'"'/g' filename

    插入(insert)

    在第10行前面插入一行,并写入 I am the ten line.

    sed -i '10i\ I am the ten line.' filename

    在所有的girls前面插入一行,并写入beautiful

    sed -i '/girls/i\beautiful' filename

    追加(append)

    在第一行加入I am line 2.

    sed -i '1a\I am line 2.' filename

    在含有oooo的行的后面插入一行,并写入xxxx

    sed -i '/oooo/a\xxxx' filename
    sed -i '/Port\ 22/ a Port\ 5277' /etc/ssh/sshd_config

    sed 取 xml 中的 value

    echo '<id>I am a sample group</id>' | sed 's/<\/\?[^>]\+>//g'

    基本的先学到这,有时候编写脚本的时候,需要使用双引号而不是单引号。sed还有很多高级的命令,越高级杀伤力越大。

    查看文件

    查看第90-100行

    cat filename | sed -n '90,100p'

    查看第2行

    cat filename | sed -e '2!d'
    
    cat filename | sed -n '2p'
    
  • debian svn | svn的安装使用 | nginx版本库

    本文主要是进行nginx的一个web程序版本控制

    1、安装Subversion

    apt-get install subversion-tools subversion

    2、建立存储仓库

    sudo mkdir /var/svnroot
    cd /var/svnroot

    生成一个叫”nginxsub”的项目

    sudo svnadmin create nginxsub

    在nginxsub这个库下面的conf文件夹里有三个配置文件

    authz-----权限文件
    passwd------用户和密码
    svnserve.conf-----此project的配置文件

    详细设置svnserve.conf:

    sudo vim /var/svnroot/nginxsub/conf/svnserve.conf
    anon-access = read
    auth-access = write
    password-db = passwd

    anon-access和 auth-access 分别指定匿名和有权限用户的权限,默认给匿名用户只读的权限,如果想拒绝匿名用户的访问,只需把 read 改成none 就能达到目的。记得只除去注释的话,要把单词顶格写,不要留下空格。
    password-db 后的 passwd 则为定义用户名及密码的文件路径,这个文件默认跟 snvserve.conf在同一个目录。

    修改passwd文件,添加用户名=密码对,如:user = imyy

    sudo vim /var/svnroot/nginxsub/conf/passwd

    修改authz文件,特别说明修改不顺检出时会出现Authorization failed,主要涉及:
    1.用户和组的授权,这个里面用户和组和系统里的没有一毛钱关系
    2.对库的整个目录的授权和对子目录的授权,

    示例写的很清楚:

    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    
    # [repository:/baz/fuz]
    # @harry_and_sally = rw
    # * = r

    这样我们可简单写为

    [/]
    xx00 =rw

    这些更改都是即时生效
    3、导入版本库
    把 /web 下的内容导入到版本号中:

    sudo svn import -m "第一次导入" /web file:///var/svnroot/nginxsub

    4、启动服务器
    svn 服务器可以用两种方法架设:
    使用 svn 自带的 svnserve 实用程序和利用 Apache 架设。
    1)使用 svnserve 搭建 svn 服务器。
    启动svn服务器:(服务器积极拒绝的时候,一般是这个问题)

    sudo /usr/bin/svnserve -d -r /var/svnroot/

    测试服务器:

    sudo svn checkout svn://219.230.144.219/nginxsub
    A inlocals/index.html
    A inlocals/index.php
    取出版本 1。

    修改index.html,提交修改:

    svn commit  --username ARG      --password ARG
    正在发送 index.html
    传输文件数据 .
    提交后的版本为 2。

    可以尝试重命名文件:

    svn rename index.php test.php

    新增一个文件:

    svn add index.php

    移动 index.php 到 blog/app 下:

    svn move index.php blog/app

    注意:
    我提交时提示
    svn: 不能打开文件“/var/www/inlocals/.svn/lock”: Permission denied
    此处是权限问题,执行

    sudo chmod -Rf 777 /var/svnroot/inlocals/

    可以顺利提交,但是为了安全起见,可以为svn专门建立一个用户组。

  • debian登陆信息的修改

    首先查看当前都写了什么

    # cat /etc/motd
    Linux qs-tester 2.6.32-5-686 #1 SMP Mon Jan 16 16:04:25 UTC 2012 i686
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.

    上面有内核建立的时间和一些声明。其实它的作用是通知或说明事项,在用户登录之后显示。

    现在修改它

    vim /etc/motd

    如将内容变为,PS:如果用tty支持中文,也可以写入中文

    ##jpuyy-downloader##
    ^_^
    洗洗更健康

    退出重新登录,就能看到上面写的了。

    同样的还有/etc/issue,它的显示是在登录之前,起提示作用。

    当前显示的是

    Debian GNU/Linux 6.0 \n \l

    \n意为当前主机的网络名称
    \l意为当前终端的编号

    更多参数可参考:http://www.cyberciti.biz/faq/howto-change-login-message/

  • 我的shell脚本注释块 | 事半功倍

    写bash脚本时,每次把下面脚本加进去

    #!/bin/bash
    #for use:
    #author: jpuyy date  [email protected]
    #modified by xx at date
    #version:
    #history:
    #relate on:
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH

    这里最后一句使用export,使得执行后,各变量和操作结束,从而不会传回到父进程中。

    也就是系统会分配bash来让我们执行这个脚本,这也是一般情况下我们想要的效果。

    如果想让变量和操作在结束后留在系统里,要用source命令

    常见的是

    source ~/.bashrc

    整理一下其他文件头部注释块:

    python开头代码

    #!/usr/bin/env python
    #for use:
    #author: jpuyy date  jpuyy.com [email protected]
    #modified by xx at date
    #version:
    #history:
    #relate on:

    :)EOT

  • mysql 命令 | sql语句 | sql语法

    0、登陆:

    mysql -u root -p

    指定用utf8来连接数据库,大部分时候就不会显示乱码

    mysql -u root -p --default-character-set=utf8

    1、显示数据库列表。

     show databases;

    2、显示库中的数据表:

     use mysql;
     show tables;

    3、显示数据表的结构:

     describe 表名;

    4、建库:

     create database 库名;
    create database if not exists 库名 default charset utf8 collate utf8_general_ci;

    5、建表:

     use 库名;
     create table 表名 (字段设定列表);

    6、删库和删表:

     drop database 库名;
     drop table 表名;

    7、将表中记录清空:

     delete from 表名;

    8、显示表中的记录:

     select * from 表名

    9、update语法

    UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    当有多个列名称要修改的时候用","分隔。

    例:把radius某用户设为禁止

    UPDATE  `radusergroup` SET `groupname`='daloRADIUS-Disabled-Users'  WHERE `username` in ('xxyy ','uuxx');

    10、刷新权限:

    flush privileges;­

    11、改变数据库databaseA的字符集为utf8

    ALTER DATABASE `databaseA` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

    退出:

    mysql>quit

    12、limit命令

    取出前5条数据

    SELECT * FROM `user_data` LIMIT 5

    取出第5, 6条数据

    SELECT * FROM `user_data` limit 3,1

    13、like命令

    查找以189开头的条目

    SELECT * from shoujihao WHERE number LIKE '189%';

    14、shell下执行sql语句

    mysql -u root -p database -e "select User, Host From user"

    在mysql命令行内执行系统命令

    mysql> system less /home/jpuyy/.vimrc

    删除一个用户

    drop user 'yyy'@'localhost';

    14. SELECT DISTINCT筛选唯一的列,如

    SELECT DISTINCT vend_id FROM products;

    会返回去重的结果

    15. 创建唯一键

    ALTER TABLE host add UNIQUE (object_id);
    16. 一些函数

    select count(column_name) 计数
    select sum(column_name) 总计
    select avg(column_name) 平均数
    select max(column_name) 最大
    select min(column_name) 最小
    

    16. 每个分组大于1

    select genre, sum(cost) from Movies Group By genre Having count(*)>1;