linux 查看文件夹下的文件个数(当前目录的文件数)

ls -l |grep "^-"|wc -l

find ./company -type f | wc -l

查看某文件夹下文件的个数,包括子文件夹里的。

ls -lR|grep "^-"|wc -l

查看某文件夹下文件夹的个数,包括子文件夹里的。

ls -lR|grep "^d"|wc -l

说明:

ls -l

长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

grep "^-"

这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l

统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于

一行信息对应一个文件,所以也就是文件的个数。

Linux查看文件夹大小

du -sh 查看当前文件夹大小

du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序

du -sk filename 查看指定文件大小

emma 中文乱码解决方法(现在使用的Navicate)

ubuntu mysql  emma中文乱码问题解决

emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python)。

apt-get安装emma

sudo apt-get install emma

 

ubuntu的apt-get 安装emma是在/usr/share/emma目录下面。

cd /usr/share/emma/emmalib

sudo vim __init__.py

找到

"db_encoding": "latin1"

改为

"db_encoding": "utf8"

保存退出。

如果你已经安装完毕并且运行过emma,程序就会创建 ~/.emma/emmarc文件,保存配置。所以可以更改这里的配置文件,或者像下面直接修改emma的python源文件。
vim ~/.emma/emmarc
找到
db_encoding=latin1
改为
db_encoding=utf8
重新运行emma,此时发现还是乱码,在执行所有的sql语句之前加入这条sql语句,
set names utf8
但每次新用户都要改配置文件,以及执行新sql前都加这个语句,岂不是很费力,直接修改emma的源文件,来实现,新创建的emmrc配置文件就是utf8,和当选择数据库时,自动的执行“set names utf8” 语句。

以后新创建的配置文件默认就会是utf8的解码了,我想在连接数据之后就执行 “set names utf8” 语句,所以

sudo vim /usr/share/emma/emmalib/mysql_host.py

但是我下边这一步没执行成功,写完之后,emma 就没发启动了,

跳到155行左右的_use_db(self, name, do_query=True)函数哪里,改成如下

def _use_db(self, name, do_query=True):

if self.current_db and name == self.current_db.name: return

if do_query:

self.query("use `%s`" % name, False)

self.query("set names utf8",  False)

try:

self.current_db = self.databases[name]

except KeyError:

print "Warning: used an unknown database %r! please refresh host!/n%s" % (name, "".join(traceback.format_stack()))

个人机设置不用每次sudo输入密码

打开上网客户端、新立得,这些涉及到系统的都要输入密码,对于我们大多数人来说,用Linux无非是做桌面应用,对安全性没必要搞得跟服务器一些。

解决办法一:

在启动时进入安全模式,这时是用root登录的,执行:

chmod 740 /etc/sudoers

然后打开/etc/sudoers这个文件,把最后一行:

%admin ALL=(ALL)
改为
%%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

保存退出。

执行:
chmod 0440 /etc/sudoers

reboot your ubuntu.OK!

解决方法二:

Ubuntu默认不能直接用root帐户登录,必须从第一个创建的用户(既安装时创建的那个用户)通过su或sudo来获得root权限。在Ubuntu中对系统进行操作很多时候都要使用这个命令,由此可见对于新来说很有必要来认识这个命令。这或许不太方便,但这样增加了安全性,避免用户由于误操作而损坏系统。

sudo
格式:sudo [其它命令]

sudo既为Super user do的意思。sudo在这个过程中只起一个调用root用户的作用,本次操作完成后,其作用就消失,如果要使用调用root权限操作的命令就必须再次使用sudo。些过程中系统会要求用户输入密码,此密码就是安装系统时你输入你那个密码,注意:这个密码在输入你时候不会像在Windows里输密码那样输入一位密码就有一个*号,这样的目的就是为了使密码更安全,因为不知道你密码有几位这样无疑给密码破译者增加了难度。:)

例:

我们要更改当前目录下upload.tar.gz的权限就要用到sudo。如果还要对当前目录下的另外一个文件eva.tar.gz更改权限就要再次用到sudo。

ownlinux@server:/var/www$ sudo chmod 777 upload.tar.gz
[sudo] password for ownlinux: (此时输入你的密码)
ownlinux@server:/var/www$ sudo chmod 777 eva.tar.gz
[sudo] password for ownlinux:

补充:

通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用"sudo command"来执行command。由于使用Ubuntu,所以经常都都用sudo,而使用sudo时,又得输入密码,所以我就寻找sudo不输入密码的方法。前阵子google了一下,很容容易找到一个方法,但是对其不够理解,今天,仔细研究了一下/etc/sudoers这个文件,对于如何实现自己的需求就非常清楚了。网上说看到的资料往往写得不清楚,所以我根据自己的需求好好整理了一下。

假设我的用户名为jay(属于 admin组),使sudo不用密码的方法如下。
运行命令:sudo visudo 或者 sudo vi /etc/sudoers,如果vi来编辑,则保存时记得用"wq!"强制保存,否则会提示只读不能保存的。
就会编辑/etc/sudoers这个文件。 默认情况我们会看到有"%admin ALL=(ALL) ALL"一句话,就是允许admin组在所有主机上执行所有命令,当然是需要passwd的。

1. 如果想把admin组的用户都sudo不用密码那么可以将这一行换为:"%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL"即可。
2. 如果仅仅想让jay用户sudo不需密码,则可添加"jay ALL = NOPASSWD: ALL"这样一行。
3. 如果让jay用户sudo不用密码即可执行某几个命令,可这样写"jay ALL = NOPASSWD: /usr/bin/abc.sh, /usr/sbin/adduser"
4. 欲知其他更多配置方式,请运行"man sudoers"看帮助文档吧。

注意:我自己的一个配置没生效,找原因还找了阵子,写到这里吧。

我添加"jay ALL = NOPASSWD: ALL"这样一行;但是,jay执行sudo时还是需要输入密码,这是为什么?

原来是,我这一行在"%admin ALL=(ALL) ALL"组策略之前前,后面的组配置覆盖了前面的配置,而jay属于admin组,所以需要密码。

这时,只需要将%admin行用#注释掉即可。OK!然后立马就生效了,可能执行sudo时系统都会去读取/etc/sudoers的,所以立即就生效了。

另外,附带公司某服务器的一个/etc/sudoers配置:

复制代码

代码如下:

Defaults env_reset
Defaults syslog=auth
Defaults log_year,logfile=/var/log/sudo.log
User_Alias ABC = abc
Cmnd_Alias DEFAULT=/bin/*,/sbin/ldconfig,/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel,/bin/rpm,/usr/bin/yum,/sbin/service,/sbin/chkconfig,sudoedit /etc/rc.local,sudoedit /etc/hosts,sudoedit /etc/ld.so.conf,/bin/mount,sudoedit /etc/exports,/usr/bin/passwd [!-]*,!/usr/bin/passwd root,/bin/su - [!-]*,!/bin/su - root,!/bin/su root,/bin/bash,/usr/sbin/dmidecode,/usr/sbin/lsof,/usr/bin/du,/usr/bin/python,/usr/sbin/xm,sudoedit /etc/profile,sudoedit /etc/bashrc,/usr/bin/make,sudoedit /etc/security/limits.conf,/etc/init.d/*,/usr/bin/ruby
ABC ALL=(ALL)NOPASSWD:DEFAULT

通过修改/etc/sudoers

sudo vi /etc/sudoers

把/etc/sudoers里面最后一行

%admin ALL=(ALL)

改为

%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

然后强制保存 wq 就OK

上面说的并不准确,要注意以下几点。

编辑/etc/sudoers文件使用“超级用户终端”,而不能使用普通的终端。“超级用户终端”启动通过右键“编辑菜单”命令添加。

编辑完之后使用wq!而不是wq退出

vsftpd高级用法之虚拟用户配置

1,安装vsftpd,然后如下配置(/etc/vsftpd/vsftpd.conf)
pam_service_name=vsftpd    #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名

userlist_enable=YES

tcp_wrappers=YES

local_root=/home/wwwroot/asobio/mgm/    #虚拟用户的家目录

guest_enable=YES    #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。

guest_username=vsftpd    #映射到系统的系统用户

user_config_dir=/etc/vsftpd/vuser_conf     #指定每个虚拟用户账号配置目录

2,创建虚拟用户文件,把这些用户名和密码存放在一个文件中
//生成虚拟用户口令库文件,按照格式编辑口令文件。单数行为用户名,偶数行为用户口令
#vi login.txt
liyangsuper//用户名
real//口令
patterson//用户名
jef//口令
guest//用户名
guest//口令
//存盘退出
3,这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

4,为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件。如下图:

auth是指对用户的用户名口令进行验证。

accout是指对用户的帐户有哪些权限哪些限制进行验证。

再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

注意该函数会根据系统的位数而所在位置不同。

如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so
如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so
最后db=/etc/vsftpd/login则指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是/etc/vsftpd/login.db文件。
注意:db=/etc/vsftpd/login格式是这样的,去掉.db后缀。

4,PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vuser_conf目录下,并创建mgm文件。注意该文件名称一定要与login.txt中的虚拟用户要对应。比如现在login.txt文件有mgm用户,那么在 /etc/vsftpd/vuser_conf目录下创建一个文件名为mgm的文件。[root@localhost vsftpd]# vim /etc/vsftpd/vuser_conf/mgm

local_root=/home/wwwroot/asobio/mgm/   #表示使用本地用户登录到ftp时的默认目录
virtual_use_local_privs=YES   #虚拟用户和本地用户有相同的权限
guest_username=vsftpd   #表示的是设置FTP对应的系统用户为vsftpd
write_enable=YES

anon_umask=022
5,以上配置完毕后,启动vsftpd服务完成.
6,登录时要区分是主动还是被动模式.
注:有时候登录后不能创建文件或目录,一个问题是SELINUX不是设置的disabled,另一个问题是先得在虚拟根目录下建一个目录,给虚拟用户使用。
另:
vsftpd安装,配置,案例与常见问题的网页:
http://os.51cto.com/art/201008/222036.htm

openssl生成RSA格式,并转为pkcs8格式

openssl默认使用的是PEM格式,经过base64。

生成pem格式的私钥:
openssl genrsa -out private_key.pem 1024

生成公钥:
openssl rsa -in private_key.pem -pubout -out public_key.pem

产生的密钥如下:

[wind@localhost key]$ cat private_key.pem 
-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCd3V5+GjpOwqNks9ProDGaZT2qURAAuAodHcUM3P1mnhOh4l4u VdvkXunUI7K6XDg6Xu9eL1WDQc6qKXs/OD91LS+RpkIAb2gMU8hGrNfR34izZh36 KdfWnEQpniAiFsHsg2ddAaPtGZZ8/jpjuPq32IVZJkgyKcWqnz5aL3FMXQIDAQAB AoGAJFdkvGTvTVhTYwhe3dxn7uIlmwLES1YSxfcneLmbADedz2OcSNBtKZqL+9Eo AOzf6NgYBLei2O+aUuPvwnMBcGyijFmRoZGVEj70UP0mngyAkvY/juA60QDe5kY5
rsqj4raHUf4iDK85nNwzXu7hIlPAn+ZmH+e2Eekwo1rmgQUCQQDJerucfBKk3qrV
xS5NRW99lKMomIsMH55Si+rbrnk8aU3SSRSD6uil3Dytv0erLZbc9d0Nr6SmBZgO
0qzOjXDDAkEAyJVGgHMNuMbpHnim93HAP7wcejmMx7rP4zutw4OCiHrWv3kN8WUC
u826taRFtOuiXhQ3X8+tb0l4ifae+vJ8XwJAEcmuKqChnMCz4G+qKNRKhZHL3dep 3wYjmjIUKBT9SyIY5sng78ybgZkyGjza/Pfna9ahD4ZESQwRYq2i6BGAtQJBAJyD bmnYXQKro0e1mYNHbV3OKOJueZ139bM35BTFT1uzjlIF4Y1U5lco5uHJduL/YsjK OZM3d/t4duggWlkyUT0CQBdsjc7eQ9roxphrW4Q/6Zwi0EQ4xxM4SgxPY1RvkKFu
i0HdYBj5KRdIbrAbisUyQeKzB7+6oTJH5+kZAU/pxao=
-----END RSA PRIVATE KEY-----
[wind@localhost key]$  [wind@localhost key]$  [wind@localhost key]$ openssl rsa -in private_key.pem -pubout -out public_key.pem
writing RSA key
[wind@localhost key]$ cat public_key.pem 
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCd3V5+GjpOwqNks9ProDGaZT2q URAAuAodHcUM3P1mnhOh4l4uVdvkXunUI7K6XDg6Xu9eL1WDQc6qKXs/OD91LS+R pkIAb2gMU8hGrNfR34izZh36KdfWnEQpniAiFsHsg2ddAaPtGZZ8/jpjuPq32IVZ JkgyKcWqnz5aL3FMXQIDAQAB -----END PUBLIC KEY-----

某些语言需要pkcs8格式的公钥。 (php就不需要了)
使用openssl将刚才生成的公钥转为pkcs#8格式:
openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem

Linux 下curl的使用

一,直接在curl命令后加上网址,就可以看到网页源码,例:

curl www.sina.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>
</body></html>

二,使用 -o 参数,相当于使用wget命令了

curl -o [文件名] www.sina.com

三,使用 -L 参数,curl会自动跳转到新网址

curl -L www.sina.com
会跳转到www.sina.com.cn

四,使用 -i 参数,curl会显示http response的头信息,连同网页代码一起

curl -i www.sina.com

五,使用 -v 参数,curl会显示一次通信的全过程,包括端口连接和http requested头信息

curl -v www.sina.com

如果还要更详细,可以使用下面的命令:
curl --trace output.txt www.sina.com
curl --trace-ascii output.txt www.sina.com
把信息保存到文件里面

以上信息来自
阮一峰老师的网络日志之curl网站开发指南;

一、get请求

curl -i "http://www.baidu.com"  显示全部信息

wget "http://www.baidu.com"也可以

二、post请求

curl -d "param1=value1&param2=value2" "http://www.baidu.com"

收集的nginx使用ssl模块配置HTTPS支持

默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中。通常这个文件名类似libssl-dev。

生成证书

可以通过以下步骤生成一个简单的证书:
首先,进入你想创建证书和私钥的目录,例如:

  1. $ cd /usr/local/nginx/conf

创建服务器私钥,命令会让你输入一个口令:

  1. $ openssl genrsa -des3 -out server.key 1024

创建签名请求的证书(CSR):

  1. $ openssl req -new -key server.key -out server.csr

在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:

  1. $ cp server.key server.key.org
  2. $ openssl rsa -in server.key.org -out server.key

配置nginx

最后标记证书使用上述私钥和CSR:

  1. $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

修改Nginx配置文件,让其包含新标记的证书和私钥:

  1. server {
  2.     server_name YOUR_DOMAINNAME_HERE;
  3.     listen 443;
  4.     ssl on;
  5.     ssl_certificate /usr/local/nginx/conf/server.crt;
  6.     ssl_certificate_key /usr/local/nginx/conf/server.key;
  7. }

重启nginx。
这样就可以通过以下方式访问:

https://YOUR_DOMAINNAME_HERE

另外还可以加入如下代码实现80端口重定向到443IT人乐园

  1. server {
  2. listen 80;
  3. server_name ww.centos.bz;
  4. rewrite ^(.*) https://$server_name$1 permanent;
  5. }
受信任的证书:

最近在玩 STARTSSL 感觉个人站点使用这个SSL差不多也够用了。真正商用的SSL当然也可以自行购买。

我个人是为了防止数据中间被抓走,所以用了startssl 也基本就够用了。

 

转回正题,startssl生成证书后,放到配置文件中,重启每次卡在Enter PEM pass phrase:需要输入密码

这很不方便,

网上流传办法:

这种情况可能是在设置私钥key时将密码设置写入了key文件,导致Nginx/Apache等系列服务器在启动时要求Enter PEM pass phrase。我们需要做的是剥离这个密码,利用如下OpenSSL命令生成server.key.unsecure文件:
openssl rsa -in server.key -out server.key.unsecure
如果server.key.unsecure生成成功,我们就修改Nginx配置,比如像下面这样:

# 这里是SSL的相关配置
server {
listen 443;
server_name www.example.com; # 你自己的域名
root /home/www;
ssl on;
ssl_certificate /etc/nginx/certs/server.crt;
# 修改下面这一行指向我们生成的server.key.unsecure文件
ssl_certificate_key /etc/nginx/certs/server.key.unsecure;
}
然后使用/etc/init.d/nginx restart重启Nginx,是不是发现不再提示了,整个世界清净了吧:-)

有些童鞋可能苦于VPS的配置,精简掉了OpenSSL,从而没有openssl命令,那怎么办呢?你可以不在服务器上做这个操作,把原先的key文件下载到本地客户端,然后再openssl吧。什么?Windows怎么办?没关系,Windows下有OpenSSL for Windows,没有的童鞋赶紧下载下来使用吧。

我使用startsll 他控制面板自带了解密工具。Tool Box -> Decrypt Private Key  输入之前生成的key和key的密码解密即可。