Linux中的login shell和non-login shell

Linux中的shell分两种,一种是login shell,一种是non-login shell。
login shell,顾名思义,提供登录功能的shell,应该都能理解。
non-login shell,无须登录的shell,一般出现在图形界面或者bash命令。

理解起来没有什么问题的话,我们来看一下这两个shell所接触到的变量。
login shell不会有什么问题,直接从startup文件里面(比如/etc/profile,~/.profile文件)解析出来。
但是non-login shell的话,按理说是从父shell继承过来,但是实际上,non-login shell还会解析某些特定的startup文件(比如/etc/bash.bashrc, ~/.bashrc文件)来的变量。

我们来举个例子,我们修改/etc/bash.bashrc文件,添加一个变量:
testvar="1"
然后我们输入bash,进入第一个non-login shell,先输出一下变量:
echo $testvar //输出为1

1、不尝试修改变量,输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为2

2、我们可以尝试修改这个变量:
testvar="2"
尝试输出一下:
echo $testvar //输出为2
此时,我们输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为1

这是因为本来继承了父shell的testvar变量为2,但是重新读取了一下bash.bashrc文件,把testvar变量重置为1。

Linux的环境变量

一直对set,export,printenv等几个命令比较晕,最近在看Linux相关的书籍,就整理一下。

首先是先要强调一下,什么是环境变量,和普通的变量有什么区别?
百度百科:环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
这个定义是不是很书面化,所以所以这就是为啥读书很累的原因了。
所以,我们先来了解一下环境变量和普通的变量有什么区别。

1、在.bashrc文件中添加一个环境变量和一个普通变量
'
export envvar='envvar';//这就是环境变量,export命令把普通变量转换成环境变量
nonenvvar='nonenvvar';//这就是普通变量
'

2、写一个test.sh文件(注意修改为可执行文件),内容如下
`
#/bin/bash

echo "环境变量:$envvar";
echo "非环境变量:$nonenvvar";
`

3、使用如下命令执行这个文件
./test.sh

结果是环境变量输出了,非环境变量没有输出。

所以环境变量和非环境变量最大的区别是它们可以被程序给读取到。
使用和命令行echo或env命令不会区分变量是否是环境变量,所以要查看变量是否环境变量请使用printenv命令。

Ubuntu 14.04 启动项

最近了解了一下Linux的pstree命令,发现Ubuntu 14.04 LTS的启动项和书中讲的不一样-不仅仅是/etc/rc*.d/下面的启动项(System V风格)。
然后就在网上查了一下相关的内容,但是中文互联网的搜索结果的质量大家都懂,只好慢慢斟酌英文关键字了。
最后根据“Ubuntu inittab”关键字搜出来了(其实和这个无关哈哈):where is inittab file?
这个回答说了man inittab就会发现现在的启动项都在/etc/init/下面。根据提示,我继续查到相关的命令initctl。
initctl是用来管理Upstart风格的daemon文件,也就是/etc/init下面的启动项,类似于System V风格的daemon文件管理用的chkconfig命令。

但是,Ubuntu貌似不只是用Startup风格的启动项,System V风格的启动项也是支持的。
比如我在/etc/rc.d/下面有一个apache2的启动项,而在/etc/init里面不存在同名的启动项文件,最后apache2服务启动了。
上述的情况充分说明了,现在的Ubuntu 14.04采用的是/etc/init下面的启动项,但是也兼容/etc/rc
.d/下面的启动项。

Linux 测试CPU性能的简易方法

Linux不像Windows有那么多的跑分软件,所以对CPU做benchmark不是一件简单的事情。
这里提供一种简单的测试CPU性能的办法,可能测试的不是很精准,但是有一定的参考性(只能测单核性能)。

time echo "scale=5000; 4*a(1)" | bc -l -q

time是计时程序。scale是精度,4a(1)调用了反正切函数。由三角函数我们知道1的反正切是pi/4, pi=4 pi/4。 -l -q参数的意思请参照man page。这一行其实就是让bc计算1的反正切,计算精度是5000位。

给大家提供一个参考吧(都是虚拟主机):
1、公司的服务器(多核): user 0m23.808s
2、阿里云主机(单核): user 0m30.091s
3、Linode云主机(单核):user 0m26.203s
4、DigitalOcean云主机(双核):user 0m30.468s
因为时间关系,并没有多次求值取平均数。

参考链接:http://www.linuxidc.com/Linux/2009-06/20495.htm

使用gmail邮箱作为SMTP遇到的问题:AuthenticationFailedException: 534-5.7.14

公司要安装Atlassian系列软件,安装过程中需要设置邮箱,设置邮箱界面直接提供了gmail邮箱的选项,然而按照这个设置了依旧提示错误:

javax.mail.AuthenticationFailedException: 534-5.7.14
<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsNX
534-5.7.14
No6jJbDc4l7fZ_WLdBD0sNHIIp_nLvplRMm0bYFBnZBF_XOyVvNSdd1FenDZJPwBTFQyRH
534-5.7.14
lriPK3myMm-dXkW3zK0-6XpO7BzI8hfRcByG1k7YiVzXlddTvs7QhjtgCWNcrzMBuPhoof
534-5.7.14
GjME2TgYzXJVHz5MV98nRnr_kq-kP7RmgOtX3IQHLwM5E8QGBC9-2THVQr_Ch_U0-1nZsc
534-5.7.14 yoPuNEw> Please log in via your web browser and then try
again.

1、先在Bing查找这个问题,跳出了很多链接,但是看不出个所以然。
2、按照上面<>中的url地址进入提示的网址,但是这个网址提供的建议对于我解决这个问题没有帮助。
3、不得不翻墙请出Google,搜索的第一个结果是StackOverflow的网址。点进去一看,使用biniam_Ethiopia的回复中的方法解决了这个问题。

貌似是Google因为安全问题屏蔽了SMTP的访问,需要自己手动开启,但是手动开启的地方靠自己找完全找不到,这就尴尬了,浪费了好多时间的说。