uerdel删除用户时候提示:userdel: user ** is currently logged in


今天在删除用户账号的时候,发现一个奇怪现象,即:
#userdel -r aaron

userdel: user aaron is currently logged in


解决方法:
mv /var/run/utmp /var/run/utmp_old      //将原文件改名
touch > /var/run/utmp        //新创建一同名文件

再次执行删除操作。。。成功删除用户

关于:/var/run/utmp

utmp是一个文件,除了utmp程序你不能编辑这个文件,删掉他的话,当前登陆信息都会丢失。这个文件在每次机器reboot起来后都会重新创建。

更多关于utmp文件介绍请参考下面说明:
/var/run/utmp

  该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。

 (/var/log/wtmp、/var/log/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。

  每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。

  下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。


但是,本人自己试验了还是不行,依旧得到同样的提示
      那就暴力删除该用户吧:
      $userdel -r -f XXXX
    提示:userdel: warning: can't remove /var/mail/git: No such file or directory
          userdel: git home directory (/home/git) not found
但是没关系。实际上已成功删除用户。

来自:http://www.2cto.com/os/201408/328936.html
实践发现,ubunut16.0.4里面的chromium没法设置代理的,而是采用了下面这个办法进行命令行设置:
在受支持的桌面环境中运行Chromium时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。
但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man chromium-browser。

=========================================================================================
先安装再代理 ,安装后可以google: http://jackxiang.com/post/8703/

受支持的桌面环境中运行Chromium时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。
但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man chromium-browser。


安装好google-chrome(或者chromium也行)后,我们发现浏览器的设置中,代理配置功能失效,显示为:

在受支持的桌面环境中运行google-chrome时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。

但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man google-chrome。

2、关闭该google-chrome,并重新从命令行启动,加入一个参数:

jackX@thinkpad:~$ google-chrome --proxy-server="socks5://localhost:8787"
chromium-browser --proxy-server="socks5://localhost:8787"

值得注意的是,由于我平常windows环境下使用的代理工具为:chrome+SwitchyOmega插件+MyEntunnel,配置是SSH+socks5,所以一开始没有在–proxy-server参数中指定socks5,导致启动后代理失效。(可通过google-chrome –help了解详细参数)

chrome成功启动后,打开百度输入“ip”,可显示我的代理服务器IP,说明代理成功启用。
[root@jackX ~]# vi /etc/sudoers
在 /etc/sudoers 中添加:
Defaults editor=/usr/bin/vim, env_editor
即可将默认编辑器设置为 vim。
apt-get install vim
root@jack:~# which vim
/usr/bin/vim
[root@jackX ~]# update-alternatives --config editor
有 4 个候选项可用于替换 editor (提供 /usr/bin/editor)。

  选择       路径              优先级  状态
------------------------------------------------------------
* 0            /bin/nano            40        自动模式
  1            /bin/ed             -100       手动模式
  2            /bin/nano            40        手动模式
  3            /usr/bin/vim.basic   30        手动模式
  4            /usr/bin/vim.tiny    10        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:3
update-alternatives: 使用 /usr/bin/vim.basic 来在手动模式中提供 /usr/bin/editor (editor)
From:http://blog.longwin.com.tw/2008/10/ubuntu-debian-modify-default-edit-2008/
chrome和firefox都没法使用Flash:

sudo apt-get install software-center

http://tieba.baidu.com/p/4395787288
ubuntu 17.04是gnome桌面环境的话,用鼠标左键选中区域,然后滚轮按下就可以黏贴刚才内容
在ubuntu下,选择文本会自动复制,按中键即可粘贴,这个是不用设置的,不过是中键,很不错
背景:ubuntu 17.04不是出了嘛,可是secureCRT没有,于是,得安一个,网上全是x64位的,我这又是32位的,找了好久终于找到一个OK的。
http://www.xue163.com/333/1654/3332691.html
DownLoad: http://download.csdn.net/download/since1988/8287101

请注意,那个下面的这些码贴上只是想让其显示并单项输入,以达到破解的目的:
root@jackX:/home/jackxiang/下载# sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015



====================================================================
jackxiang@jack:~/下载$ ls
scrt-7.3.1-685.ubuntu13.i386.deb  securecrt_linux_crack.pl
jackxiang@jack:~/下载$ sudo dpkg -i scrt-7.3.1-685.ubuntu13.i386.deb
[sudo] jackxiang 的密码:
正在选中未选择的软件包 scrt。
(正在读取数据库 ... 系统当前共安装有 174871 个文件和目录。)
正准备解包 scrt-7.3.1-685.ubuntu13.i386.deb  ...
正在解包 scrt (7.3.1-685) ...
正在设置 scrt (7.3.1-685) ...
正在处理用于 gnome-menus (3.13.3-6ubuntu3) 的触发器 ...
正在处理用于 desktop-file-utils (0.22-1ubuntu5) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.59ubuntu1) 的触发器 ...
jackxiang@jack:~/下载$ which SecureCRT
/usr/bin/SecureCRT
jackxiang@jack:~/下载$ sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015


jackxiang@jack:~/下载$ SecureCRT &
更改yum源为aliyun

[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

[2] 进入yum源配置文件所在文件夹

[root@localhost yum.repos.d]# cd /etc/yum.repos.d/

[3] 下载aliyun的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)

[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-6.repo

如果下载163的yum源配置文件

[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

[4] 运行yum makecache生成缓存

[root@localhost yum.repos.d]# yum makecache

[5] 更新系统

[root@localhost yum.repos.d]# yum -y update
背景:我想从一台远程机器上的一个用户上的文件拷贝到我的机器上来,可我不想用root拷贝,想新增加一个用户来拷贝,如何实现无 Permission denied,拷贝过来呢?
现象:权限不够,(如下:test这个目录是我加的一个test用户生成的)
/home/test/rpmbuild/RPMS/x86_64 这个我想scp下面的rpm包,我不是root,怎么样能实现拷贝?
[root@localhost x86_64]# scp rpm@192.168.101.***:/home/test/rpmbuild/RPMS/x86_64/mysql-5.7.12-160420134244.el6.x86_64.rpm /data/www/yum/centos/6/x86_64
rpm@192.168.101.227's password:    Permission denied
问题:test是我建立的一个test用户。假如test用户的密码我忘记了(我用root修改了下test的密码,再用test用户拷贝没有问题,正常),但我有root。
试图:我还是想用rpm这个专有用户来拷贝。
权限:
[root@localhost ~]# ls -l /home/ |grep test
drwx------. 3 test          test          4096 Mar 18 19:18 test
rpm用户进不了这个目录
办法: rpm的用户组改成 test
id test
uid=539(test) gid=539(test) groups=539(test)
xiangjiwu - IEG(33757)  17:11:42
usermod -G test,rpm rpm

rpm的用户组改成 test,实践如下:
[root@localhost x86_64]# id test
uid=539(test) gid=539(test) groups=539(test)
[root@localhost x86_64]# usermod -G test,rpm rpm
[root@localhost x86_64]# id rpm
uid=540(rpm) gid=540(rpm) groups=540(rpm),539(test)
不做下面的权限,也是一样会报权限错误的: Permission denied
chown -R test:rpm /home/test  //给test目录递归上rpm组,下面这一步也不可缺少。
chmod -R 750 /home/test   //用户7,属组5(4+1),读取+执行。
修改后权限如下:
[root@localhost x86_64]# ls -l /home/ |grep test
drwxr-x---. 3 test          rpm           4096 Mar 18 19:18 test

再拷贝,也就成功了:


总结:三个步骤实现,一个不能少,一个是入组,一个是给目录加上组的可读权限:


最后,感谢PHPers@南极里的xiangjiwu - IEG兄弟,Thanks~

斧正:
xiangjiwu - IEG(337**)  17:41:32
rpm用户加到test组了, 那 /home/test就不用改组,直接chmod -R 750 /home/test 就行了。
背景:像unix或linux下的mysql和php-fpm都有一个xxx.sock文件,它是干嘛的呢?可以研究一下它。
  管道由于只能实现具有亲缘进程的进程间通信,使用受到了很大的限制,命名管道解决了这一问题。但是,无论是管道还是命名管道,都只能实现单向通信(在只创建一个管道的情况下)。
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。这里所指的使用套接字实现进程间通信,是由将通信域指定为PF_UNIX来实现的。该函数的形式如下:
int socket(int domain, int type, int protocol);
socket函数中的domain参数用于指定通信域,domain参数取PF_UNIX时,表示创建UNIX域的套接字。使用PF_UNIX域的套接字可以实现同一机器上的不同进程间的通信。
调用bind函数实现了套接字与地址(这里是文件名)的绑定。bind函数的具体信息如下:
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
其参数my_addr为指向结构体sockaddr_un的指针,该结构体的定义如下:
    #define UNIX_PATH_MAX 108
    struct sockaddr_un {
    sa_family_t     sun_family;     /*PF_UNIX或AF_UNIX */
    char    sun_path[UNIX_PATH_MAX];        /* 路径名 */
    };
在该结构体中,sun_family为AF_UNIX。sun_path是套接字在文件系统中的路径名。
Unix域套接字是通过套接字API实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的IPC机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示Unix域地址的套接字文件能够使用stat()但是不能通过open()打开,而且应该使用套接字API对它进行操作。
Unix域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使Unix域套接字能够比命名管道更好的适应IPC任务。

server.c


send.c


gcc server.c -o server
gcc send.c -o send

[root@iZ25dcp92ckZ sock]# ./server
Bind is ok
有client启动后server响应如下:
Recv: Counter is 1
Recv: Counter is 2
Recv: Counter is 3
Recv: Counter is 4

[root@iZ25dcp92ckZ sock]# ./send
Send: Counter is 1
Send: Counter is 2
Send: Counter is 3
Send: Counter is 4

最后,还发现那个设备文件server.sock 不能直接cat去读取,只能stat:
[root@iZ25dcp92ckZ sock]# cat server.sock
cat: server.sock: 没有那个设备或地址
[root@iZ25dcp92ckZ sock]# stat server.sock    
  文件:"server.sock"
  大小:0               块:0          IO 块:4096   套接字
设备:ca01h/51713d      Inode:16282       硬链接:1
权限:(0755/srwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2016-04-18 14:11:20.878641353 +0800
最近更改:2016-04-18 14:11:20.878641353 +0800
最近改动:2016-04-18 14:11:20.878641353 +0800
创建时间:-
实践摘录自:http://www.cnblogs.com/hnrainll/archive/2011/12/03/2274973.html
在参加腾讯实习生2016面试时,有两道问题自己没有想清楚也思考的不是很明白,面试结束时后悔没有问正解是什么,回来后在搜索引擎上也没有搜到相关的问题。

第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"

第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"

所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!


知乎网友洋耗子答曰:

因为这些都是假设性问题,所以一般都只能说排查问题的思路:

问题一:

1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。

2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。

3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。

4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。

5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。

6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。

问题二:

1:这类bug,一般都涉及越界操作。

2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。

3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。

朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
背景:在打php7.0.2下的apcu扩展包时,出现 Installed (but unpackaged) file(s) found,这块是因为它不光生成了.so外,还有一些涉及到.h的头文件在里面,可用于c开发,而我们只运行PHP不做开发,也就没有必要打进去,如果有必要则把它的文件及目录全路径写进%files里去,这儿我们就直接在install里删除掉这个目录下的所有文件及可,两种方法任取一个吧,都有实践且成功生成rpm无错误提示,如下。

方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。                                                                                            
/usr/local/php/include/php/ext/igbinary/igbinary.h

生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h

假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:


再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so


方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):




也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm      
/usr/local/php/ext/apcu.so

======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:


阅读全文
背景:在网上找一个开要自启动的shell代码放上去后,直接添加服务提示service redis does not support chkconfig,后加上下面两行O了。

加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off


阅读全文
因为老是出现好像刚连接时出现行数没有对齐,得ctrl+l一下才能修改到正确的地方,估计是和字体有关系,此次再次实践注意一下:
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================

经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
   今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
   设置方法
   当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
   isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
  1> sp_helpdb
  2> go
     呵呵.是不是很漂亮了,再也不会混乱了..

来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
༒࿈背༙྇景༙྇:༒࿈这༙྇个༙྇༒࿈还༙྇是༙྇༒࿈0༙྇༒࿈9༙྇༒࿈年༙྇༒࿈开༙྇始༙྇༒࿈兴༙྇起༙྇,༒࿈现༙྇在༙྇༒࿈火༙྇起༙྇来༙྇༒࿈了༙྇。࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒

GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)

1.在本机上安装openssh

在linux client上安装ssh服务,如果是windows的安装git for windows

sudo apt-get install openssh-server

可以查看ssh服务是否开启

ps -e | grep ssh

2.在server上创建一个git用户

sudo adduser git

3.在server上安装git

sudo apt-get install git-core

4.在server上初始化仓库

cd /home/git/

git init --bare myRep.git

5.通过git clone命令进行克隆远程仓库

git clone git@{your server ip}:/home/git/myRep.git

这里都必须知道server上git用户的登入密码。
背景:经常看到PHP的一些扩展均是以tgz后续提供的,那这个包是怎么打出来的呢?
         linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName

php-5.5.34/ext










cp zip-1.13.2forphp-5.5.34.spec  zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec  openssl-5.5.34forphp-5.5.34.spec  
cp zip-1.13.2forphp-5.5.34.spec  opcache-5.5.34forphp-5.5.34.spec  

挪动一下spec命令更规范:











RPM包重新命名:



spec文件里的Name:    php-5.5.34-extension-apc  替换成:apc-php55-


cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:


这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec

一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。

http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
rc?.d中的?代表不同的运行级别,例如进入图形模式的运行级别是5,就是说在rc5.d中的S开头进程都会运行,网络多用户文本模式的运行级别是3,就是运行所有rc3.d中S开头的进程。
单用户模式就是rc1.d,如果是rc0.d就是关机,其中没有S开头的,都是K开头的进程名字,代表杀掉进程。

更多参考:http://blog.itpub.net/12798004/viewspace-1143979/
[调侃苹果]Swift语言是一门仅仅次于PHP这门最好语言,没有这一的老二语言,弥补PHP的不足。当然Swift也确实可以去做Ios开发。。
背景:Swift是静态语言?听说这门子语言linux也默认安装支持啦啊,开源中国要用Swift重写整个网站了。Swift静态语言 + PHP动态语言,绝妙的组合。当然了。Swift性能很强的。
定位:Swift是静态语言,和Rust定位差不多的。系统级语言?胡说,无稽之谈,操作系统层面完全可以替换C,Swift可以直接导入C库,它还很胶水,能打能退,边打边跑,性格倔强。
概论:可以取代C来写一些底层软件,c写程序效率有点慢,不管怎么说,swift只是一门语言,作者的另外一个作品是LLVM,Swift的性能差不多是 C的50%左右,内存模型和C几乎一致。有人问swift 能搞底层吗?!完全可以。
比肩语言:GO语言个人觉得意义不大,标榜自己是系统级语言,实际上是个应用层语言,和PHP来抢市场。之前说 GO是替代C语言的 现在 swift又是替代GO的,swift 跟Go都是偏应用层,swift的作者年轻而go的作者有点老。
极客语言:Golang的语法也确实不是特别友好,比较Geek,Go语言的作者是以前Plan9那帮人搞的,go作者是超级大师级,大师毕竟是少数,人人不可能成大湿。
回归本质:c 是内功, 其他都是招式。C语言最朴实。随便拿个C的开源项目过来,只要你有C的功底都能改改。继续做二次开发。其他的语言,像PHP,Java,Go,C++ 你不花点时间研究下这个项目,完全上不了手。

结论,学不过来了 还是好好 学 PHP把 PHP才是世界最好的语言, PHP就你们这群老家伙在玩 新人也不少,不玩PHP玩什么,能赚钱就行 管他什么语言.


学习PHP之余,学下这门swift吧:
http://letsswift.com/2014/06/basic-operators/
http://letsswift.com/category/swiftguide/language-guide/page/3/
背景:现在流行nginx,于是安装一个监控可能没有必要,但是机器多可能还是有必要装一个agent之类的,这种小工具一般有个三五台服务器可以用用,大型的还得自己搞一套体系才行。

场景

想查看Nginx的实时状态信息,如哪些请求最频繁、哪些IP访问次数多 ……

例如服务器出现带宽持续很高,就需要看下现在哪些请求的流量大

ngxtop

ngxtop就是用来满足这些实时监控需求的,是个非常小巧实用的工具

ngxtop通过分析nginx的访问日志,使用类似top命令的界面实时展示出来

需要注意的是,ngxtop是查看实时状态信息,就是在执行ngxtop命令之后的统计信息,和top一样,不要理解为是对所有日志内容的统计

基本用法

$ ngxtop

结果形式如下

显示大图


实用案例

查看404状态的请求

$ ngxtop top request_path --filter 'status == 404'

查看响应流量最高的请求

$ ngxtop --order-by 'avg(bytes_sent) * count'

查看访问量最大的IP

$ ngxtop --group-by remote_addr

查看状态为4xx或者5xx的请求,同时显示status和http_referer信息

$ ngxtop -i 'status >= 400' print request status http_referer

查看以某字符串开头的请求

ngxtop --filter 'request_path.startswith("/wp")'

参数说明

-l: 指定日志文件的完整路径,默认情况下会读取nginx.conf里指定的访问日志路径

-f: 日志格式

-t : 更新频率,默认2秒

-g: 根据变量 group by,默认变量是 request_path

-o: 根据变量 order by,默认变量是 count

-h: help,详细的命令参数说明和使用方法,可以用这个参数查看帮助

内置变量

可以对以下内置变量进行操作,例如上面案例中的'status >= 400'

bodybytessend

http_referer

httpuseragent

remote_addr

remote_user

request

status

time_local

安装

ngxtop的安装需要依赖库 pip

然后使用pip安装 ngxtop

$ sudo pip install ngxtop
首先让我们来回忆一下历史久远的手动记录日志功能:“文件”——“会话日志”,选择日志文件的存放位置并拟定文件名,点击保存。
自动记录日志功能:
1.       选择“选项”——“全局选项”,打开全局选项,在常规设置中找到“默认会话”设置项,点击右侧的“编辑默认设置”:
英文版下:选择“Options”——“Global Options”,打开全局选项,在常规设置中找到“default session”设置项,点击右侧的“edit default settings”:
2.       上一步骤操作后,打开如下图所示的界面,选择“日志文件”(英文版下选择“Log file”),如下图所示,让我们分别解释一下右侧四个红色方框部分。

http://jingyan.baidu.com/article/335530da88aa0b19cb41c3b9.html
F11相当于windows中的“显示桌面”:
fn + F11 显示桌面。
背景:有时查看目录结构,这个tree非常有用,yum -y install tree安装就能使用。
常常加 -C,表示颜色,-L表示层级。 如:tree -C -L 2。

阅读全文
分页: 7/22 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]