Quantcast
Channel: 看得透又看得远者prevail.ppt.cc/flUmLx ppt.cc/fqtgqx ppt.cc/fZsXUx ppt.cc/fhWnZx ppt.cc/fnrkVx ppt.cc/f2CBVx
Viewing all 20452 articles
Browse latest View live

优化OpenWRT的启动速度

$
0
0
OpenWRT 开机到 WiFi 启动需要花费 20 多秒,实在是太慢了, 对一些简单的应用来说无法接受。经过一些尝试,我把它优化在 8 秒以内。

移除不用的包

可以通过make menuconfig来移除一些用不着的软件包,如果不用 OpenWRT 的设置网页可以去掉luci软件包,如果不用上网可以移除firewall等等。
当然最耗时的还有一些内核模块,比如说 USB 和 I2C 驱动什么的,如果不用可以移除。可以通过make kernel_menuconfig移除。

启动项

可以在目录/etc/rc.d/下查看启动项,不用的可以通过/etc/init.d/下的脚本来禁用,比如说telnet什么的。

关闭 failsafe

如果不用 failsafe,可以关掉,可以省去几秒的等待时间。自行修改/lib/下的脚本是没用的,得到 OpenWrt 的源码目录去修改,删掉 failsafe 的相关脚本就行。

优化配置

可以优化/etc/config/目录下的配置文件,无用的网络接口可以删掉。将 WiFi 的信道改成固定值可以节省非常多的时间.

Linux 版网易云音乐的网络错误的解决

$
0
0
网易云音乐终于发布 Linux 版本了,但是在播放音乐时出现了网络错误。
网络上说可能是 gstreamer 依赖的问题,但没有具体的解决方法。我乱试了安装 gstreamer 的依赖,竟然让我试成功了!
具体是安装gstreamer0.10-plugins-good的依赖:
sudo apt-get install gstreamer0.10-plugins-good

Shadowsocks client for elementaryOS/Ubuntu

$
0
0
Shadowsocks-Qt5 太难用了,趁着有时间,写了一个跟 MacOS 上差不多的客户端,都是暴力 shell 调用。

Shadowsocks elementaryOS/Ubuntu(也许可以) 客户端。

截图

功能

  • Shadowsocks 指示器,可以开关 Shadowsocks
  • 全局代理与自动代理模式
  • 编辑服务器
  • 获取GWFList更新

安装

首先必须先安装shadowsocksgfwlist2pac,可以通过pip安装:
sudo pip install shadowsocks gfwlist2pac
然后,下载 Shadowsocks 的 deb 包进行安装:https://github.com/simpleyyt/shadowsocks-eos/releases

Bugs

代码很暴力,凑合能用就行。

from https://github.com/Simpleyyt/shadowsocks-eos

Linux桌面系统上的Web 版本微信发布

$
0
0
elementaryOS 或 Ubuntu 上的 Web 版微信应用。添加了 AppIndicator 消息提醒及 Libnotify 消息提醒功能。

功能

  • 完整的 Web 微信功能
  • 独立的窗口扫码界面
  • 支持 AppIndicator 并有蓝点提示消息功能。
  • 支持 libnotify 消息提醒。

安装

添加 PPA 并安装:
sudo add-apt-repository ppa:simpleyyt/ppa
sudo apt-get update
sudo apt-get install web-weixin

依赖

  • gobject-2.0
  • glib-2.0
  • gio-2.0
  • gtk+-3.0>=3.12
  • webkit2gtk-4.0
  • appindicator3-0.1

编译

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make
sudo make install

Bugs

  • 有时候需要退2次才能退出程序。
from https://github.com/Simpleyyt/web-weixin

如何上传 ppa

$
0
0
简单记录一下 如何上传包到 launchpad 的 ppa上。

生成 debian 目录

在终端中输入:
dh_make --createorig
便会生成debian目录,并且有.orig.tar.gz源码包。
根据需要修改debian目录里面的相应内容。

上传 ppa

在终端中输入:
dput ppa:<userid>/<ppa-name> <source.changes>
即可将软件包上传到 PPA 上。

TCP 和 UDP 的区别

$
0
0
  • TCP(Transmission Control Protocol):传输控制协议
  • UDP(User Datagram Protocol):用户数据报协议
主要从连接性(Connectivity)、可靠性(Reliability)、有序性(Ordering)、有界性(Boundary)、拥塞控制(Congestion or Flow control)、传输速度(Speed)、量级(Heavy/Light weight)、头部大小(Header size)等8个方面来讲。
1. TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议;
TCP用三次握手建立连接:1) Client向server发送SYN;2) Server接收到SYN,回复Client一个SYN-ACK;3) Client接收到SYN_ACK,回复Server一个ACK。到此,连接建成。UDP发送数据前不需要建立连接。
2. TCP可靠,UDP不可靠;
TCP丢包会自动重传,UDP不会。
3. TCP有序,UDP无序;
消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。
4. TCP无界,UDP有界;
TCP通过字节流传输,UDP中每一个包都是单独的。
5. TCP有流量控制(拥塞控制),UDP没有;
主要靠三次握手实现。
6. TCP传输慢,UDP传输快;
因为TCP需要建立连接、保证可靠性和有序性,所以比较耗时。这就是为什么视频流、广播电视、在线多媒体游戏等选择使用UDP。
7. TCP是重量级的,UDP是轻量级的;
TCP要建立连接、保证可靠性和有序性,就会传输更多的信息,如TCP的包头比较大。
8. TCP的头部比UDP大;TCP Packet Format Diagram UDP Packet format
总结:
  • TCP是面向连接的、可靠的、有序的、速度慢的协议;UDP是无连接的、不可靠的、无序的、速度快的协议。
  • TCP开销比UDP大,TCP头部需要20字节,UDP头部只要8个字节。
  • TCP无界有拥塞控制,TCP有界无拥塞控制。
补充:
  • 基于TCP的协议有:HTTP/HTTPS,Telnet,FTP,SMTP。
  • 基于UDP的协议有:DHCP,DNS,SNMP,TFTP,BOOTP

Linux-ZigBee项目:在Linux上运行6lowpan

$
0
0
前段时间在看ZigBee的物理层和MAC层协议栈,也就是IEEE802.15.4协议。之后,发现sourceforge上有一个linux-zigbee的项目,中文翻译介绍。虽然这个项目叫Linux-ZigBee,但是因为许可问题除了IEEE802.15.4协议,其它的都没有实现,转而转向6lowpan,所以本文介绍一下用Ubuntu串口连接CC2530运行6lowpan。
#交叉编译内核#
由于主线内核只包含了ieee802154fakehard6lowpan,所以没办法使用ZigBee串口设备。所以要下载linux-zigbee内核:
git clone git://git.code.sf.net/p/linux-zigbee/kernel -b 6lowpan linux-zigbee-kernel
当然也可以去项目主页下载。下载完成之后,进行源码目录,然后:
make menuconfig
选择mac802154ieee802154serial等模块。然后保存退出,进行编译:
make -j 2
如果出现错误可以网上搜解决方法,编译完成之后,编译模块:
make modules
接着安装模块:
make modules_install
安装内核:
make install
至此,内核已经编译并且安装成功了。重启PC之后,加载相关模块:
sudo modprobe ieee802154
sudo modprobe mac802154
sudo modprobe af_802154
sudo modprobe serial
每当需使用时,都必须加载上述模块。
#安装lowpan-tools#
lowpan-tools是管理Linux LowPAN协议栈的工具,由于Ubuntu的lowpan-tools版本太老了,所以需要从项目主页下载安装:
git clone git://git.code.sf.net/p/linux-zigbee/linux-zigbee linux-zigbee-linux-zigbee
下载完成之后,进入源码目录安装:
./autogen.sh
sudo make install
安装完成之后,便可以使用izattach工具添加ZigBee串口设备。

强化你的Terminal IDE——在android手机/平板上编写C/C++

$
0
0
Terminal IDE是一个可扩展的终端应用,其包含了全功能的Java/HTML/Android开发套件。Terminal IDE集成了VIM, ssh, git等多个功能,其中强大之处,大家自己发觉,如果你用惯了Linux下的shell命令,那么用Terminal IDE你将会得心应手,喜欢上它的
虽然Terminal IDE很强大,可以编写Java,android,但它没有gcc/g++。没关系,Terminal IDE强大之处就在于它是可拓展的,具体可以看它的Help。此处,我说明一下,如何把gcc/g++加入Terminal IDE,其实就是将linux-arm-gcc加入Terminal IDE 。
首先,将linux-arm-gcc解压到Terminal IDE中的~/system目录下(不是系统的/system/,其真正目录为:data/data/com.spartacusrex.spartacuside/files/system)。
修改该’gcc’目录为可读写,在Terminal IDE下执行
chmod -R 777 ./gcc
修改~(即data/data/com.spartacusrex.spartacuside/files/)目录下的.bashrc文件。添加需要的环境变量,在~/.bashrc文件添加如下环境变量:
export CPLUS_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/c++/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/include:$C_INCLUDE_PATH
export PATH=$IDESYSTEM/gcc/bin:$PATH
gcc/bin下的相应文件改一下名,改为gccg++
再重启Terminal IDE后(需按TerminalIDE的Shutdown按钮),便可以使用gcc和g++进行c++/c的编译,如下:
vim a.cpp   //写入代吗
g++ a.cpp //编译
./a.out //运行
此时,再用otg接个键盘或者用蓝牙键盘的话,那么整个apad就相当于你的电脑,得心应手。
如果你熟悉Linux和vim,以上方法是不错的选择,如果不熟悉的话,可以用C4droid。这里在贴出几个工具:(下载地址可以自己搜,我只贴出GooglePlay上的地址。)
  AIDE:可以在android平板/手机上编写android应用,编译后可直接安装。
  C4droid:可以在android平板/手机上编写并编译c/c++,不过不够强大。但比较容易安装。
  ADDI:可以在android平板/手机上执行少量的matlab指令。
以上适合apad+键盘,如果没有键盘的话,我觉得还是别折腾了,没有这个必要吧。写一写小程序还是可以的,大的项目就不行了,编译会很慢的。

linux教程网站

sftpserver

$
0
0
A simple single-threaded SFTP server.

sftpserver is a simple single-threaded SFTP server based on Paramiko's SFTPServer.
I needed a simple server that could be used as a stub for testing Python SFTP clients so I whipped out one.

Installation

Using pip:
$ [sudo] pip install sftpserver

Examples

$ sftpserver
Usage: sftpserver [options]
-k/--keyfile should be specified


Options:
-h, --help show this help message and exit
--host=HOST listen on HOST [default: localhost]
-p PORT, --port=PORT listen on PORT [default: 3373]
-l LEVEL, --level=LEVEL
Debug level: WARNING, INFO, DEBUG [default: INFO]
-k FILE, --keyfile=FILE
Path to private key, for example /tmp/test_rsa.key

$ sftpserver -k /tmp/test_rsa.key -l DEBUG
Generating a test private key:
$ openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout /tmp/test_rsa.key
Connecting with a Python client to our server:

>>> import paramiko
>>> pkey = paramiko.RSAKey.from_private_key_file('/tmp/test_rsa.key')
>>> transport = paramiko.Transport(('localhost', 3373))
>>> transport.connect(username='admin', password='admin', pkey=pkey)
>>> sftp = paramiko.SFTPClient.from_transport(transport)
>>> sftp.listdir('.')
['loop.py', 'stub_sftp.py']
from https://github.com/rspivak/sftpserver

Pidgin短信

$
0
0
Pidgin短信是Pidgin/empathy的一个插件,可以在PC端收发短信。
Pidgin短信是Pidgin/empathy的一个插件。当手机收到短信时,电脑上面有提示;可以在电脑上发手机短信。让你时刻保持在电脑屏幕上,也不会错过短信。目前只支持安卓,wifi连接方式。
ScreenShot

功能

  • PC接收手机短信,并提醒。
  • 在PC上发送短信。
  • 更新手机联系人到PC端。

安装

###手机端###
将目录下的PidginSMS.apk安装到安卓手机上。
###PC端###
编译需要依赖libglib-2.0-dev,可用以下命令安装
sudo apt-get install libglib2.0-dev 
cd到源码目录下,并输入
sudo make install
便可以完成安装。

使用

  1. 安装并打开手机端Pidgin短信应用
  2. 输入用户名(你的手机号或者名字)和密码(用于加密和验证)
  3. 点击开启Pidgin短信服务
  4. 在电脑端安装Pidgin插件,打开Pidgin/empathy
  5. 在帐号管理里面添加Pidgin短信/sms帐户(Pidgin里显示Pidgin短信,empathy里显示sms)
  6. 输入的用户名密码应与手机端一致
  7. 验证成功后便可以开始使用
(注:建议用Pidgin, empathy并无离线保存联系人,每次都得更新)
from https://github.com/Simpleyyt/pidgin-libsms

逐梦彼岸 中国新移民-律师

Linux查找系统异常登录的一些方法

$
0
0
当我们感觉系统异常或者被入侵之后,会需要查看系统异常登陆记录,以下是一些方法小结,也算是备忘。

1、查 message

1cat /var/log/message
2cat /var/log/message.1
3cat /var/log/message.2
4cat /var/log/message.3
5cat /var/log/message.4

2、查 secure

1cat /var/log/secure
2cat /var/log/secure.1
3cat /var/log/secure.2
4cat /var/log/secure.3
5cat /var/log/secure.4

3、查history命令历史

1history

4、查ftp登陆记录

1检查 xferlog

5、查faillog

1cat faillog

6、查lastlog

我这里没有合适的样本,但能确定这个不能直接cat看,可以下载后用16进制编辑器查看。

7、查lastb

1lastb

8、查 wtmp

1who wtmp
当然方法不仅限于此...

Linux系统的安全加固策略

$
0
0
Linux系统安全作为网站、系统运维是必须要重视的部分,以下为Linux系统加固的几大策略和注意事项:

一、取消不必要的服务

早期的Unix版本中,每一个不同的网络服务都有一个服务程序在后台运行,后来的版本用统一的/etc/inetd服务器程序担此重任。Inetd是Internetdaemon的缩写,它同时监视多个网络端口,一旦接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。
由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetd.conf文件中设定。所以取消不必要服务的第一步就是检查/etc/inetd.conf文件,在不要的服务前加上“#”号。
一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。
还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。
Inetd除了利用/etc/inetd.conf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的端口。因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。
在Linux中有两种不同的服务型态:一种是仅在有需要时才执行的服务,如finger服务;另一种是一直在执行的永不停顿的服务。这类服务在系统启动时就开始执行,因此不能靠修改inetd来停止其服务,而只能从修改/etc/rc.d/rc[n].d/文件或用Run level editor去修改它。提供文件服务的NFS服务器和提供NNTP新闻服务的news都属于这类服务,如果没有必要,最好取消这些服务。

二、限制系统的出入

在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过系统验证之后,用户才能进入系统。
与其他Unix操作系统一样,Linux一般将密码加密之后,存放在/etc/passwd文件中。Linux系统上的所有用户都可以读到/etc/passwd文件,虽然文件中保存的密码已经经过加密,但仍然不太安全。因为一般的用户可以利用现成的密码破译工具,以穷举法猜测出密码。比较安全的方法是设定影子文件/etc/shadow,只允许有特殊权限的用户阅读该文件。
在Linux系统中,如果要采用影子文件,必须将所有的公用程序重新编译,才能支持影子文件。这种方法比较麻烦,比较简便的方法是采用插入式验证模块(PAM)。很多Linux系统都带有Linux的工具程序PAM,它是一种身份验证机制,可以用来动态地改变身份验证的方法和要求,而不要求重新编译其他公用程序。这是因为PAM采用封闭包的方式,将所有与身份验证有关的逻辑全部隐藏在模块内,因此它是采用影子档案的最佳帮手。
此外,PAM还有很多安全功能:它可以将传统的DES加密方法改写为其他功能更强的加密方法,以确保用户密码不会轻易地遭人破译;它可以设定每个用户使用电脑资源的上限;它甚至可以设定用户的上机时间和地点。
Linux系统管理人员只需花费几小时去安装和设定PAM,就能大大提高Linux系统的安全性,把很多攻击阻挡在系统之外。

三、保持最新的系统核心

由于Linux流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经常更新系统内核。
Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功能。由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。
早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有2.0.x以上的版本才比较稳定和安全,新版本的运行效率也有很大改观。在设定Kernel的功能时,只选择必要的功能,千万不要所有功能照单全收,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。
在Internet上常常有最新的安全修补程序,Linux系统管理员应该消息灵通,经常光顾安全新闻组,查阅新的修补程序。

四、检查登录密码

设定登录密码是一项非常重要的安全措施,如果用户的密码设定不合适,就很容易被破译,尤其是拥有超级用户使用权限的用户,如果没有良好的密码,将给系统造成很大的安全漏洞。
在多用户系统中,如果强迫每个用户选择不易猜出的密码,将大大提高系统的安全性。但如果passwd程序无法强迫每个上机用户使用恰当的密码,要确保密码的安全度,就只能依靠密码破解程序了。
实际上,密码破解程序是黑客工具箱中的一种工具,它将常用的密码或者是英文字典中所有可能用来作密码的字都用程序加密成密码字,然后将其与Linux系统的/etc/passwd密码文件或/etc/shadow影子文件相比较,如果发现有吻合的密码,就可以求得明码了。
在网络上可以找到很多密码破解程序,比较有名的程序是crack。用户可以自己先执行密码破解程序,找出容易被黑客破解的密码,先行改正总比被黑客破解要有利。

五、设定用户账号的安全等级

除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。
在Linux系统上的tcpd中,可以设定允许上机和不允许上机人员的名单。其中,允许上机人员名单在/etc/hosts.allow中设置,不允许上机人员名单在/etc/hosts.deny中设置。设置完成之后,需要重新启动inetd程序才会生效。此外,Linux将自动把允许进入或不允许进入的结果记录到/rar/log/secure文件中,系统管理员可以据此查出可疑的进入记录。
每个账号ID应该有专人负责。在企业中,如果负责某个ID的职员离职,管理员应立即从系统中删除该账号。很多入侵事件都是借用了那些很久不用的账号。
在用户账号之中,黑客最喜欢具有root权限的账号,这种超级用户有权修改或删除各种系统设置,可以在系统中畅行无阻。因此,在给任何账号赋予root权限之前,都必须仔细考虑。
Linux系统中的/etc/securetty文件包含了一组能够以root账号登录的终端机名称。例如,在RedHatLinux系统中,该文件的初始值仅允许本地虚拟控制台(rtys)以root权限登录,而不允许远程用户以root权限登录。最好不要修改该文件,如果一定要从远程登录为root权限,最好是先以普通账号登录,然后利用su命令升级为超级用户。

六、消除黑客犯罪的温床

在Unix系统中,有一系列r字头的公用程序,它们是黑客用以入侵的武器,非常危险,因此绝对不要将root账号开放给这些公用程序。由于这些公用程序都是用.rhosts文件或者hosts.equiv文件核准进入的,因此一定要确保root账号不包括在这些文件之内。
由于r字头指令是黑客们的温床,因此很多安全工具都是针对这一安全漏洞而设计的。例如,PAM工具就可以用来将r字头公用程序的功力废掉,它在/etc/pam.d/rlogin文件中加上登录必须先核准的指令,使整个系统的用户都不能使用自己home目录下的.rhosts文件。

七、增强安全防护工具

SSH是安全套接层的简称,它是可以安全地用来取代rlogin、rsh和rcp等公用程序的一套程序组。SSH采用公开密钥技术对网络上两台主机之间的通信信息加密,并且用其密钥充当身份验证的工具。
由于SSH将网络上的信息加密,因此它可以用来安全地登录到远程主机上,并且在两台主机之间安全地传送信息。实际上,SSH不仅可以保障Linux主机之间的安全通信,Windows用户也可以通过SSH安全地连接到Linux服务器上。

八、限制超级用户的权力

我们在前面提到,root是Linux保护的重点,由于它权力无限,因此最好不要轻易将超级用户授权出去。但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户的权限。Sudo就是这样的工具。 
Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。例如,应用sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。
Sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。在大型企业中,有时候有许多人同时管理Linux系统的各个不同部分,每个管理人员都有用sudo授权给某些用户超级用户权限的能力,从sudo的日志中,可以追踪到谁做耸裁匆约案亩 了系统的哪些部分?
值得注意的是,sudo并不能限制所有的用户行为,尤其是当某些简单的指令没有设置限定时,就有可能被黑客滥用。例如,一般用来显示文件内容的/etc/cat指令,如果有了超级用户的权限,黑客就可以用它修改或删除一些重要的文件。

九、追踪黑客的踪迹

当你仔细设定了各种与Linux相关的组态,并且安装了必要的安全防护工具之后,Linux操作系统的安全性的确大为提高,但是却并不能保证防止那些艺高人胆大的网络黑客的入侵。 在平时,网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。例如:
  1. 不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;
  2. 用户从陌生的网址进入系统;
  3. 因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模式的试错法;
  4. 非法使用或不正当使用超级用户权限su的指令;
  5. 重新开机或重新启动各项服务的记录。

十、共同防御,确保安全

从计算机安全的角度看,世界上没有绝对密不透风、百分之百安全的计算机系统,Linux系统也不例外。采用以上的安全守则,虽然可以使Linux系统的安全性大大提高,使顺手牵羊型的黑客和电脑玩家不能轻易闯入,但却不一定能阻挡那些身怀绝技的武林高手,因此,企业用户还需要借助防火墙等其他安全工具,共同防御黑客入侵,才能确保系统万无一失.
--------------------------


Linux的安全权限设置

Linux安全设置非常相当之重要,刚好前几天朋友问到:对网站目录用root用户权限还是www用户权限,索性就这个问题写写。
首先说下为什么不能直接将网站目录所属用户直接设置为root用户,root用户具备对系统的最高权限,可以对系统任何文件、目录进行更改,一旦用户通过web入侵,即可对网站进行任何更改,不只是改改你网站的首页那种小菜了,甚至rm -rf / ,系统运维人员不希望发生这种事吧。而为了维护方便,我们又不能将root用户设置为禁止登陆nologin,所以从安全角度,网站目录必须使用单独的用户。一般我们在linux下网站目录文件、数据库(MySql或Oracle)目录文件分别设置其用户为www和mysql。
下面分别讲讲Linux安全设置的几个关键步骤:添加用户组及用户、更改目录和文件的所属用户(属主)、设置目录和文件的读写权限:

添加用户组、添加用户

1/usr/sbin/groupadd www #添加www用户组
2/usr/sbin/useradd -s /sbin/nologin -g www www #在www用户组添加www用户,同时禁止其shell登陆
3groupadd mysql #添加mysql用户组
4useradd -s /sbin/nologin -M -g mysql mysql #在mysql用户组添加mysql用户,同时禁止其shell登陆

更改目录所属用户

1chown -R www:www /data/www
2chown -R mysql:mysql /data/mysql

设置目录和文件的读写权限

1find /data/www -type d -exec chmod 555 {} \\; #将目标目录对所属用户和其他用户全部设置成只读权限
2find /data/www -type f -name "*php" -exec chmod 444 {} \\; #将目标目录下的所有php文件对所属用户和其他用户全部设置成只读权限,当需要设置所有文件可读时,去掉-name "*php"参数即可
3chmod 755 /data/www/attachment #对attachment目录设置写入权限
4find /data/www/attachmen -type f -exec chmod 644 {} \\; #对attachment目录下文件设置写入权限,即使以前存在的文件,当网站系统需要删除、更新附件文件时仍需属主具备写入权限才能完成,所以还是有必要设置附件文件对属主具备写入权限的。
以上设置读写权限的思路是,先将权限全部设置为最严格权限,然后对所需目录、文件设置必要的写入权限。如果某个目录下的文件需要写入权限,那么它所属的目录也必须对属主有写入权限.

Linux/Ubuntu的命令技巧

$
0
0

前言

下面的命令大都需要在 控制台 / 终端 / shell 下输入。
控制台, 终端, 和 shell 意味着同样一件事 - 一个命令行界面, 他可以用来控制系统。
打开一个控制台:
应用程序 --> 附件 --> 终端
任何一个使用 \'sudo\'作为前缀的命令都需要拥有管理员 (或 root) 访问权限。 所以你会被提示输入你自己的密码。

安装升级


查看软件xxx安装内容

dpkg -L xxx 

查找软件库中的软件

apt-cache search 正则表达式

aptitude search 软件包

显示系统安装包的统计信息

apt-cache stats

显示系统全部可用包的名称

apt-cache pkgnames

显示包的信息

apt-cache show k3b

查找文件属于哪个包

apt-file search filename

查看已经安装了哪些包

dpkg -l

查询软件xxx依赖哪些包

apt-cache depends xxx

查询软件xxx被哪些包依赖

apt-cache rdepends xxx

增加一个光盘源

sudo apt-cdrom add

系统更新

sudo apt-get update (这一步更新包列表)
sudo apt-get dist-upgrade (这一步安装所有可用更新)
或者
sudo apt-get upgrade (这一步安装应用程序更新,不安装新内核等)

清除所有已删除包的残馀配置文件

dpkg -l |grep ^rc|awk \'{print $2}\' |sudo xargs dpkg -P 
如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。

dpkg: --purge needs at least one package name argument
Type dpkg --help for help about installing and deinstalling packages [*];
Use `dselect\' or `aptitude\' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;
Type dpkg --license for copyright license and lack of warranty (GNU GPL) [*].
Options marked [*] produce a lot of output - pipe it through `less\' or `more\' !

编译时缺少h文件的自动处理

sudo auto-apt run ./configure

查看安装软件时下载包的临时存放目录

ls /var/cache/apt/archives

备份当前系统安装的所有包的列表

dpkg --get-selections | grep -v deinstall > ~/somefile

从上面备份的安装包的列表文件恢复所有包

dpkg --set-selections < ~/somefile
sudo dselect

清理旧版本的软件缓存

sudo apt-get autoclean

清理所有软件缓存

sudo apt-get clean

删除系统不再使用的孤立软件

sudo apt-get autoremove

查看包在服务器上面的地址

apt-get -qq --print-uris install ssh | cut -d\' -f2

彻底删除Gnome

apt-get --purge remove liborbit2

彻底删除KDE

apt-get --purge remove libqt3-mt libqtcore4

一键安装 LAMP 服务

sudo tasksel install lamp-server

删除旧内核

sudo aptitude purge ~ilinux-image-.*\\(\\!`uname -r`\\)

导入ppa源的key值

#W: GPG签名验证错误: http://ppa.launchpad.net jaunty Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 5126890CDCC7AFE0
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5126890CDCC7AFE0 #5126890CDCC7AFE0替换为你需要导入的Key值

增加一个ppa源

sudo add-apt-repository ppa:user/ppa-name  
#使用 ppa 的地址替换 ppa:user/ppa-name

系统升级

  1. 这里指的是版本间的升级,例如 9.04=>10.04。
  2. 使用该升级方式通常需要使能 backports 源。
sudo apt-get update
sudo apt-get install update-manager-core
sudo do-release-upgrade

系统


查看内核

uname -a

查看系统是32位还是64位

#查看long的位数,返回32或64
getconf LONG_BIT
#查看文件信息,包含32-bit就是32位,包含64-bit就是64位
file /sbin/init

查看Ubuntu版本

cat /etc/issue
或 cat /etc/lsb-release
或 lsb_release -dsc

查看内核加载的模块

lsmod

查看PCI设备

lspci

查看USB设备

lsusb 

#加参数 -v 可以显示USB设备的描述表(descriptors)
lsusb -v

查看网卡状态

sudo apt-get install ethtool 
sudo ethtool eth0

激活网卡的 Wake-on-LAN

sudo apt-get install wakeonlan
或 sudo ethtool -s eth0 wol g

查看CPU信息

cat /proc/cpuinfo

显示当前硬件信息

sudo lshw

获取CPU序列号或者主板序列号

#CPU ID
sudo dmidecode -t 4 | grep ID
#Serial Number
sudo dmidecode | grep Serial
#CPU
sudo dmidecode -t 4
#BIOS
sudo dmidecode -t 0
#主板:
sudo dmidecode -t 2
#OEM:
sudo dmidecode -t 11

显示当前内存大小

free -m |grep "Mem" | awk \'{print $2}\'

查看硬盘温度

sudo apt-get install hddtemp
sudo hddtemp /dev/sda

显示系统运行时间

uptime

查看系统限制

ulimit -a

查看内核限制

ipcs -l

查看当前屏幕分辨率

xrandr

硬盘


查看硬盘的分区

sudo fdisk -l

硬盘分区

#危险!小心操作。
sudo fdisk /dev/sda

硬盘格式化

#危险!将第一个分区格式化为 ext3 分区, mkfs.reiserfs mkfs.xfs mkfs.vfat
sudo mkfs.ext3 /dev/sda1

硬盘检查

#危险!检查第一个分区,请不要检查已经挂载的分区,否则容易丢失和损坏数据
sudo fsck /dev/sda1

分区挂载

sudo mount -t 文件系统类型 设备路经 访问路经 
#常用文件类型如下: iso9660 光驱文件系统, vfat fat/fat32分区, ntfs ntfs分区, smbfs windows网络共享目录, reiserfs、ext3、xfs Linux分区
#如果中文名无法显示尝试在最後增加 -o nls=utf8 或 -o iocharset=utf8
#如果需要挂载後,普通用户也可以使用,在 -o 的参数後面增加 ,umask=022 如:-o nls=utf8,umask=022

分区卸载

sudo umount 目录名或设备名

只读挂载ntfs分区

sudo mount -t ntfs -o nls=utf8,umask=0 /dev/sdb1 /mnt/c

可写挂载ntfs分区

sudo mount -t ntfs-3g -o locale=zh_CN.utf8,umask=0 /dev/sdb1 /mnt/c

挂载fat32分区

sudo mount -t vfat -o iocharset=utf8,umask=0 /dev/sda1 /mnt/c

挂载共享文件

sudo mount -t smbfs -o  username=xxx,password=xxx,iocharset=utf8 //192.168.1.1/share /mnt/share

挂载ISO文件

sudo mount -t iso9660 -o loop,utf8 xxx.iso /mnt/iso

查看IDE硬盘信息

sudo hdparm -i /dev/sda

查看软raid阵列信息

cat /proc/mdstat

参看硬raid阵列信息

dmesg |grep -i raid
cat /proc/scsi/scsi

查看SATA硬盘信息

sudo hdparm -I /dev/sda

sudo apt-get install blktool
sudo blktool /dev/sda id

查看硬盘剩余空间

df
用法:df [选项]... [文件]...显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统。
长选项必须用的参数在使用短选项时也是必需的。
-a, --all 包括大小为 0 个块的文件系统
-B, --block-size=大小 块以指定<大小>的字节为单位
-h, --human-readable 以容易理解的格式印出文件系统大小 (例如 1K 234M 2G)
-H, --si 类似 -h,但取 1000 的次方而不是 1024
-i, --inodes 显示 inode 信息而非块使用量
-k 即 --block-size=1K
-l, --local 只显示本机的文件系统
--no-sync 取得使用量数据前不进行同步动作 (默认)
-P, --portability 使用 POSIX 兼容的输出格式
--sync 取得使用量数据前先进行同步动作
-t, --type=类型 只印出指定文件系统为指定<类型>的信息
-T, --print-type 印出文件系统类型
-x, --exclude-type=类型 只印出文件系统不是指定<类型>信息
-v (忽略)
--help 显示此帮助信息并离开
--version 显示版本信息并离开

查看目录占用空间

du -hs 目录名

优盘没法卸载

sync
fuser -km /media/usbdisk

使用文件来增加交换空间

#创建一个512M的交换文件 /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=512
sudo mkswap /swapfile
sudo swapon /swapfile
#sudo vim /etc/fstab #加到fstab文件中让系统引导时自动启动
/swapfile swap swap defaults 0 0

查看硬盘当前读写情况

# 首先安装 sysstat 包
sudo apt-get install sysstat
#每2秒刷新一次
sudo iostat -x 2

进程


查看当前的内存使用情况

free
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
  -b,-k,-m,-g show output in bytes, KB, MB, or GB
-l show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-V display version information and exit

连续监视内存使用情况

watch  -d free
# 使用 Ctrl + c 退出

动态显示进程执行情况

top
top指令运行时输入H或?打开帮助窗口,输入Q退出指令。

查看当前有哪些进程

ps -AFL

查看目前登入用户运行的程序

w

查看当前用户程序实际内存占用,并排序

ps -u $USER -o pid,rss,cmd --sort -rss

统计程序的内存耗用

ps -eo fname,rss|awk \'{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}\'|sort -k2 -nr

按内存从大到小排列进程

ps -eo "%C  : %p : %z : %a"|sort -k5 -nr

按cpu利用率从大到小排列进程

ps -eo "%C  : %p : %z : %a"|sort  -nr

查看当前进程树

pstree

中止一个进程

kill 进程号(就是ps -A中的第一列的数字)
或者 killall 进程名

强制中止一个进程(在上面进程中止不成功的时候使用)

kill -9 进程号
或者 killall -9 进程名

图形方式中止一个程序

xkill 出现骷髅标志的鼠标,点击需要中止的程序即可

查看进程打开的文件

lsof -p 进程的pid

显示开启文件abc.txt的进程

lsof abc.txt 

显示22端口现在运行什么程序

lsof -i :22 

显示nsd进程现在打开的文件

lsof -c nsd

在後台运行程序,退出登录後,并不结束程序

nohup 程序 &
#查看中间运行情况 tail nohup

在后台运行交互式程序,退出登录后,并不结束程序

sudo apt-get install screen
screen vim a.txt
#直接退出后使用
screen -ls # 1656.pts-0.ubuntu (Detached)
screen -r 1656 #恢复
#热键,同时按下Ctrl和a键结束后,再按下功能键
C-a ? #显示所有键绑定信息
C-a w #显示所有窗口列表
C-a C-a #切换到之前显示的窗口
C-a c #创建一个新的运行shell的窗口并切换到该窗口
C-a n #切换到下一个窗口
C-a p #切换到前一个窗口(与C-a n相对)
C-a 0..9 #切换到窗口0..9
C-a a #发送 C-a到当前窗口
C-a d #暂时断开screen会话
C-a k #杀掉当前窗口

详细显示程序的运行信息

strace -f -F -o outfile <cmd>

增加系统最大打开文件个数

echo 4096 > /proc/sys/fs/file-max
#或者
ulimit -n 4096

清除僵尸进程

ps -eal | awk \'{ if ($2 == "Z") {print $4}}\' | xargs sudo kill -9

将大于120M内存的php-cgi都杀掉

ps -eo pid,fname,rss|grep php-cgi|grep -v grep|awk \'{if($3>=120000) print $1}\' | xargs sudo kill -9

Linux系统中如何限制用户进程CPU占用率

renice +10 `ps aux | awk \'{ if ($3 > 0.8 && id -u $1 > 500) print $2}\'` 
#或直接编辑/etc/security/limits.conf文件。

ADSL


配置 ADSL

sudo pppoeconf

ADSL手工拨号

sudo pon dsl-provider

激活 ADSL

sudo /etc/ppp/pppoe_on_boot

断开 ADSL

sudo poff

查看拨号日志

sudo plog

如何设置动态域名

#首先去 http://www.3322.org申请一个动态域名
#然後修改 /etc/ppp/ip-up 增加拨号时更新域名指令
sudo vim /etc/ppp/ip-up
#在最後增加如下行
w3m -no-cookie -dump \'http://username:password@members.3322.org/dyndns/update?system=dyndns&hostname=yourdns.3322.org\'

网络


根据IP查网卡地址

arping IP地址

根据IP查电脑名

nmblookup -A IP地址

查看当前IP地址

ifconfig eth0 |awk \'/inet/ {split($2,x,":");print x[2]}\'

查看当前外网的IP地址

w3m -no-cookie -dump www.ip138.com/ip2city.asp|grep -o \'[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\'
w3m -no-cookie -dump ip.loveroot.com|grep -o \'[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\'
curl ifconfig.me

查看当前监听80端口的程序

lsof -i :80

查看当前网卡的物理地址

ifconfig eth0 | head -1 | awk \'{print $5}\'

同一个网卡增加第二个IP地址

#在网卡eth0上增加一个1.2.3.4的IP:
sudo ifconfig eth0:0 1.2.3.4 netmask 255.255.255.0
#删除增加的IP:
sudo ifconfig eth0:0 down

立即让网络支持nat

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -I POSTROUTING -j MASQUERADE

查看路由信息

netstat -rn
sudo route -n

手工增加一条路由

sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

手工删除一条路由

sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

修改网卡MAC地址的方法

sudo ifconfig eth0 down #关闭网卡
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址
sudo ifconfig eth0 up #然后启动网卡
永久改地址方法
sudo gedit /etc/network/interfaces
在 iface eth0 inet static 后面添加一行:
pre-up ifconfig eth0 hw ether 01:01:01:01:01:01
配置文件应该像如下
iface eth0 inet static
pre-up ifconfig eth0 hw ether 01:01:01:01:01:01
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
最后是 logout 或者reboot

统计当前IP连接的个数

netstat -na|grep ESTABLISHED|awk \'{print $5}\'|awk -F: \'{print $1}\'|sort|uniq -c|sort -r -n
netstat -na|grep SYN|awk \'{print $5}\'|awk -F: \'{print $1}\'|sort|uniq -c|sort -r -n
netstat -ntu | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -n

统计当前所有IP包的状态

netstat -nat|awk \'{print awk $NF}\'|sort|uniq -c|sort -n

统计当前20000个IP包中大于100个IP包的IP地址

tcpdump -tnn -c 20000 -i eth0 | awk -F "." \'{print $1"."$2"."$3"."$4}\' | sort | uniq -c | sort -nr | awk \' $1 > 100 \'

屏蔽IPV6

echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6

察看当前网络连接状况以及程序

sudo netstat -atnp

查看网络连接状态

netstat -n | awk \'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}\'

查看当前系统所有的监听端口

nc -zv localhost 1-65535

查看网络的当前流量

#安装 ethstatus 软件
sudo apt-get install ethstatus
#查看 ADSL 的速度
sudo ethstatus -i ppp0
#查看 网卡 的速度
sudo ethstatus -i eth0
#或安装 bwm-ng
sudo apt-get install bwm-ng
#查看当前网络流量
bwm-ng

查看域名的注册备案情况

whois baidu.cn

查看到某一个域名的路由情况

tracepath baidu.cn

重新从服务器获得IP地址

sudo dhclient

从当前页面开始镜像整个网站到本地

wget -r -p -np -k http://www.21cn.com
· -r:在本机建立服务器端目录结构;
· -p: 下载显示HTML文件的所有图片;
· -np:只下载目标站点指定目录及其子目录的内容;
· -k: 转换非相对链接为相对链接。

如何多线程下载

sudo apt-get install axel
axel -n 5 http://xxx.xxx.xxx.xxx/xxx.zip
或者
lftp -c "pget -n 5 http://xxx.xxx.xxx.xxx/xxx.zip“

如何查看HTTP头

w3m -dump_head http://www.example.com
或 curl --head http://www.example.com

快速使用http方式共享目录

#进入需要共享的目录后运行: 
python -m SimpleHTTPServer
#其它电脑使用http://ip:8000来访问
#自定义端口为8080:
python -m SimpleHTTPServer 8080

SSH 远程端口转发

ssh -v -CNgD 7070 username@sshhostipaddress

监控网络所有的tcp数据

sudo apt-get install snort #安装snort入侵检测程序
sudo snort -vde

监控TCP/UDP连接的流量

sudo apt-get install iftop 
sudo iftop
#或
sudo apt-get install iptraf
sudo iptraf

iptables


防止外网用内网IP欺骗

#eth0 为外网网卡
sudo iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
sudo iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
sudo iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

查看nat规则

sudo iptables -t nat -L

查看filter规则

sudo iptables -L -n

取消nat规则

sudo iptables -t nat -F

取消filter规则

sudo iptables -F

阻止一个IP连接本机

#规则位于最后
sudo iptables -t filter -A INPUT -s 192.168.1.125 -i eth0 -j DROP

关闭 1234 端口

sudo iptables -A OUTPUT -p tcp --dport 1234 -j DROP

开启 80 端口

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT 

禁止一个IP或者一个IP段访问服务器端口服务

#80端口 ,规则插入到前面
sudo iptables -t filter -I INPUT -s 192.168.2.0/24 -p tcp --dport http -j DROP
#21端口,规则插入到前面
sudo iptables -t filter -I INPUT -s 192.168.1.23 -p tcp --dport ftp -j DROP

安全


检查本地是否存在安全隐患

sudo apt-get install rkhunter
sudo rkhunter --checkall

如何安装杀毒软件

sudo apt-get install clamav
clamscan -r ~/

Linux下可以使用的商业杀毒软件

卡巴斯基(deb): http://www.kaspersky.com/productupdates?chapter=146274389
avast!(免费/deb): http://www.avast.com/eng/download-avast-for-linux-edition.html
小红伞(gz): http://www.avira.com/en/downloads/avira_antivir_professional.html
BitDefender(比特梵德/run):http://download.bitdefender.com/SMB/Workstation_Security_and_Management/BitDefender_Antivirus_Scanner_for_Unices/Unix/Current/EN_FR_BR_RO/Linux/
申请比特梵德的KEY:http://www.bitdefender.com/site/Products/ScannerLicense/

服务


添加一个服务

sudo update-rc.d 服务名 defaults 99

删除一个服务

sudo update-rc.d 服务名 remove

临时重启一个服务

/etc/init.d/服务名 restart

临时关闭一个服务

/etc/init.d/服务名 stop

临时启动一个服务

/etc/init.d/服务名 start

用户管理


增加用户

sudo adduser 用户名

删除用户

sudo deluser 用户名

修改当前用户的密码 

passwd

修改用户密码 

sudo passwd 用户名

修改用户资料

sudo chfn userid

如何禁用/启用某个帐户

sudo usermod -L 用户名 #锁定用户
sudo usermod -U 用户名 #解锁

sudo passwd -l 用户名 #锁定用户
sudo passwd -u 用户名 #解锁

增加用户到admin组,让其有sudo权限

sudo usermod -G admin -a 用户名

如何切换到其他帐号(需要该用户的密码)

su 用户名

如何切换到root帐号

sudo -s
sudo -i
sudo su

设置


配置默认Java使用哪个

sudo update-alternatives --config java

给apt设置代理

export http_proxy=http://xx.xx.xx.xx:xxx

修改系统登录信息

sudo vim /etc/motd

使用eclipse等其他自带java编译器的软件,换回sun的编译器方法

对于Java JDK6 (就是1.6,sun缩短Java的版本名字了):
sudo update-java-alternatives -s java-6-sun
对于Java JDK1.5
sudo update-java-alternatives -s java-1.5.0-sun

中文


切换输入法引擎

im-switch -c

转换文件名由GBK为UTF8

sudo apt-get install convmv
convmv -r -f cp936 -t utf8 --notest --nosmart *

批量转换src目录下的所有文件内容由GBK到UTF8

find src -type d -exec mkdir -p utf8/{} \\;
find src -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \\;
mv utf8/* src
rm -fr utf8

转换文件内容由GBK到UTF8

iconv -f gbk -t utf8 $i > newfile

批量转换文件内容由GBK到UTF8

for i in `find . *`; do if [ -f "$i" ]; then iconv -f gb2312 -t utf8 $i > "./converted/$i" fi ; done

转换 mp3 标签编码

sudo apt-get install python-mutagen
find . -iname \'*.mp3\' -execdir mid3iconv -e GBK {} \\;
或者使用图形界面工具“小K”,具体请参考解决文件名mp3标签和文本文件内容的乱码问题

控制台下显示中文

sudo apt-get install zhcon
使用时,输入zhcon即可

更具体的输入:zhcon --utf8 --drv=vga
如果在/etc/zhcon.conf中指定了分辨率,可以去掉--drv=vga以指定的分辨率启动。
zhcon是个外挂的控制平台,也就是像US-DOS那样是额外安装的软件,装完后是需要驱动才能进去的,不然有可能死机;
当然驱动什么的在你sudo apt-get install zhcon的时候就已经安装了;
你所需要的是在进zhcon时要申明你所用的驱动,而zhcon在安装时,就装了3种驱动:vga,framebuffer,libggi,而我们一般都是用的第一种驱动,因为比较方便简单,而那2钟驱动.很麻烦,我也就没改过.好了说了这么多该告诉各位怎么进入zhcon了;
运行时需输入:zhcon --utf8 --drv=vga

lftp 登录远程Windows中文FTP 

lftp :~>set ftp:charset GBK
lftp :~>set file:charset UTF-8

java6 的安装和中文设置

#下面是ubuntu安装标准的sun-java,安装过程中需要使用tab键切换同意其授权协议
sudo add-apt-repository "deb http://archive.canonical.com/ `lsb_release -c | awk \'{print $2}\'` partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin ttf-wqy-microhei
sudo apt-get remove ttf-kochi-gothic ttf-kochi-mincho ttf-unfonts ttf-unfonts-core
sudo mkdir -p /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback
sudo ln -s /usr/share/fonts/truetype/arphic/wqy-microhei.ttc /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback

openjdk6 的安装和中文设置

sudo apt-get install openjdk-6-jdk ttf-wqy-microhei
#有两种解决办法,第一种关闭Java的AA
echo "export _JAVA_OPTIONS=\'-Dawt.useSystemAAFontSettings=on\'">> ~/.profile
#第二种直接修改Java字体配置
echo "allfonts.umingcn=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties
echo "allfonts.uminghk=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties
echo "allfonts.umingtw=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties
echo "allfonts.wqy-zenhei=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties
echo "allfonts.shanheisun=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties
echo "filename.WenQuanYi_Microhei_Hei=/usr/share/fonts/truetype/wqy/wqy-microhei.ttc" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties

程序显示有些字大,有些小

 sudo apt-get remove ttf-kochi-gothic ttf-kochi-mincho ttf-unfonts ttf-unfonts-core

PDF 文件乱码

sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional poppler-data

Flash中文乱码

sudo gedit /etc/fonts/conf.d/49-sansserif.conf 
将倒数第四行 <string>sans-serif</string>
改为 <string>sans</string>
保存即可,重启firefox

增加农历

sudo apt-get install lunar-applet
鼠标点击面板右键 -> 添加到面板 -> 农历日期

unzip 中文文件名乱码

sudo apt-get install p7zip-full
export LANG=zh_CN.GBK #临时在控制台修改环境为zh_CN.GBK,然后解压缩即可
7za e docs.zip

ibus跟随

安装ibus-gtk即可,最好另外安装:ibus-qt4

文件管理


一屏查看文件内容

cat 文件名

不显示以#开头的行

cat /etc/vsftpd.conf |grep -v ^#

分页查看文件内容

more 文件名

可控分页查看文件内容

less 文件名

带行号显示文件的内容

nl 文件名
cat -n 文件名

去除文件中的行号

cut -c 5- a.py

删除文件中的重复行

cat file.txt |sort -u

根据字符串匹配来查看文件部分内容

grep 字符串 文件名

显示包含或者不包含字符串的文件名

grep -l -r 字符串 路径 #显示内容包含字符串的文件名
grep -L -r 字符串 路径 #显示内容不包含字符串的文件名
find . -path \'./cache\' -prune -o -name "*.php" -exec grep -l "date_cache[$format][\'lang\']" {} \\; #显示当前目录下不包含cache目录的所有含有“date_cache[$format][\'lang\']”字符串的php文件。

快速查找某个文件

whereis filename
find 目录 -name 文件名
locate 文件名 # 注意,为了得到更好的效果,运行前可以更新下数据库,运行 sudo updatedb 即可,但这个命令每隔一段时间会自动运行,所以不用太在意

创建两个空文件

touch file1 file2

递归式创建一些嵌套目录

mkdir -pv /tmp/xxs/dsd/efd

递归式删除嵌套目录

rm -fr /tmp/xxs

回当前用户的宿主目录

cd ~
# 或者更简单的
cd

回到上一次的目录

cd -

查看当前所在目录的绝对路经

pwd

获得文件的后缀名

echo xxx.xxx.rmvb |sed \'s/.*\\(\\..*$\\)/\\1/\'

去除文件的后缀名

echo xxx.xxx.rmvb |sed \'s/\\(.*\\)\\..*$/\\1/\'

列出当前目录下的所有文件,包括以.开头的隐含文件

ls -a

移动路径下的文件并改名

mv 路径/文件  /新路径/新文件名

复制文件或者目录

cp -av 原文件或原目录 新文件或新目录

查看文件类型

file filename

查看文件的时间

stat filename

对比两个文件之间的差异 

diff file1 file2

显示xxx文件倒数6行的内容

tail -6 xxx

让tail不停地读取最新的内容

tail -10f /var/log/apache2/access.log
或者
tailf /var/log/apache2/access.log

查看文件中间的第五行(含)到第10行(含)的内容

sed -n \'5,10p\' /var/log/apache2/access.log

查找关于xxx的命令

apropos xxx
man -k xxx

通过ssh传输文件

scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
tar cvzf - /path/ | ssh username@remoteip "cd /some/path/; cat -> path.tar.gz" #压缩传输
tar cvzf - /path/ | ssh username@remoteip "cd /some/path/; tar xvzf -" #压缩传输一个目录并解压

把所有文件的後辍由rm改为rmvb

rename \'s/.rm$/.rmvb/\' *

把所有文件名中的大写改为小写

rename \'tr/A-Z/a-z/\' *

删除特殊文件名的文件,如文件名:--help.txt

rm -- --help.txt 或者 rm ./--help.txt

查看当前目录的子目录

ls -d */ 或 echo */

将当前目录下最近30天访问过的文件移动到上级back目录

find . -type f -atime -30 -exec mv {} ../back \\;

查找当前目录下最近30天访问过的文件打包备份

find . -type f -atime -30 | xargs tar zcvpf backup.tar.gz
find . -type f -atime -30 -print -exec tar rvpf backup.tar {} \\;

显示系统服务器一小时以内的包含 xxxx 的所有邮件

find /home/ -path "*Maildir*" -type f -mmin -60|xargs -i  grep -l xxxx \'{}\'

将当前目录下最近2小时到8小时之内的文件显示出来

find . -mmin +120 -mmin -480 -exec more {} \\;

删除修改时间在30天之前的所有文件

find . -type f -mtime +30 -mtime -3600 -exec rm {} \\;

删除访问时间在30天之前的所有文件

find . -type f -atime +30 -atime -3600 -exec rm {} \\;

查找guest用户的以avi或者rm结尾的文件并删除掉

find . -name \'*.avi\' -o -name \'*.rm\' -user \'guest\' -exec rm {} \\;

查找不以java和xml结尾,并7天没有使用的文件删除掉

find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \\;

查找目录下所有有包含abcd文字的文本文件,并替换为xyz

grep -rIl "abcd" ./* --color=never | xargs sed -i "s/abcd/xyz/g" #注意grep的一个参数是大写的i,一个参数是小写的L

删除当前目录里面所有的 .svn 目录

find . -name .svn -type d -exec rm -fr {} \\;

删除当前目录所有以“~”结尾的临时文件

find . -name "*~" -exec rm {} \\;

统计当前文件个数

ls /usr/bin|wc -w

统计当前目录下所有jpg文件的尺寸

find . -name *.jpg -exec wc -c {} \\;|awk \'{print $1}\'|awk \'{a+=$1}END{print a}\'

统计当前目录个数

ls -l /usr/bin|grep ^d|wc -l

统计当前目录下占空间最大的前10名文件或目录

du -sm * | sort -nr | head -10

显示当前目录下2006-01-01的文件名

ls -l |grep 2006-01-01 |awk \'{print $8}\'

备份当前系统到另外一个硬盘 

sudo rsync -Pa / /media/disk1 --exclude=/media/* --exclude=/home/* --exclude=/sys/* --exclude=/tmp/* --exclude=/proc/* --exclude=/mnt/*

使用ssh方式同步远程数据到本地目录

rsync -Pa -I --size-only --delete --timeout=300 Remote_IP:/home/ubuntu/back /backup

使用ftp方式同步远程数据到本地目录

lftp -c "open Remote_IP;user UserName Password;set cache:enable false;set ftp:passive-mode false;set net:timeout 15;mirror -e -c /back /backup;"

去掉文件中的^M

#注意不要使用同样的文件名,会清空掉原文件
cat filename | tr -d "^M"> newfile;
或者
sed -e "s/^M//g" filename > newfile;
或者
ex "+:%s/[Ctrl+V][Enter]//g""+:wq" filename #直接修改文件

转换Dos文本文件到Unix文本文件

tr -d \'\\15\\32\'< dosfile.txt > unixfile.txt                         #dos = > unix
awk \'{ sub("\\r$", ""); print }\' dosfile.txt > unixfile.txt #dos = > unix
awk \'sub("$", "\\r")\' unixfile.txt > dosfile.txt #unix = > dos

转换bin/cue到iso文件

#sudo apt-get install bchunk
bchunk image.bin image.cue image

转换目录到iso文件

mkisofs -o isofile.iso  dirname

转换CD到iso文件

dd if=/dev/cdrom of=isofile.iso

将一个文件作为附件发到邮箱

#sudo apt-get install mailutils sharutils
uuencode xxx.tar.gz xxx.tar.gz |mail xxx@xxx.com
(echo "hello, please see attached file"; uuencode xxx.tar.gz xxx.tar.gz)| mail xxx@xxx.com

合并多个pdf文件到一个pdf文件

#apt-get install gs pdftk
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf

影像


播放swf文件

安装swf解码器
 sudo apt-get install swfmill

如何保存串流视频(mms/rtsp)

mplayer -dumpfile dump.rm -dumpstream rstp://....

批量将rmvb转为avi

#ipod touch可用
for i in *.rmvb; do mencoder -vf harddup -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi $i -o `echo $i | sed -e \'s/rmvb$/avi/\'`; done

批量将DVD转为avi

for i in *.VOB; do mencoder -oac mp3lame -lameopts aq=7:vbr=2:q=6 -srate 44100 -ovc xvid -xvidencopts fixed_quant=4 -of avi $i -o `echo $i | sed -e \'s/VOB$/avi/\'`; done

批量将任何格式的电影转为ogv

#sudo apt-get install ffmpeg2theora   
#firefox3.5或chrome直接支持播放,无需安装任何解码器,注意不支持rmvb,rmvb会出现a/v不同步问题
for i in *; do ffmpeg2theora --optimize --deinterlace $i; done

批量将rmvb格式的电影转为ogv

#!/bin/bash
for i in *; do
mkfifo "/tmp/$i"
mencoder -quiet -vf harddup -ovc raw -oac pcm -o "/tmp/$i""$i"&
ffmpeg2theora --optimize --deinterlace "/tmp/$i" -o "`echo $i | sed \'s/\\(.*\\)\\..*$/\\1/\'`.ogv"
rm "/tmp/$i"
done

利用gst来转换任意电影为ogv

#!/bin/bash
for i in *; do
gst-launch-0.10 filesrc location="$i" ! decodebin name=demux \\
{ oggmux name=mux ! filesink location="`echo $i | sed \'s/\\(.*\\)\\..*$/\\1/\'`.ogv" } \\
{ demux. ! queue ! audioconvert ! vorbisenc ! queue ! mux. } \\
{ demux. ! queue ! ffmpegcolorspace ! videorate ! theoraenc ! mux. }
done

批量转换任意文件为ipod touch使用的mp4

#!/bin/bash
#ubuntu10.04自带的mencoder由于版权问题,不支持h264编码,需要重新编译;也可以直接参考下面的压缩方法。
#sudo apt-get install mencoder mplayer
find . -name \'*.avi\' -o -name \'*.rm\' -o -name \'*.rmvb\' -o -name \'*.wmv\' -o \\
-name \'*.vob\' -o -name \'*.asf\' -o -name \'*.mpg\' -o -name \'*.ts\' -o \\
-name \'*.flv\' -o -name \'*.mpeg\' -o -name \'*.ogv\' -o -name \'*.mov\' -o \\
-name \'*.mkv\' -o -name \'*.dat\' | while read i; do
basename=`echo $i | sed \'s/\\(.*\\)\\..*$/\\1/\'`
font="WenQuanYi Zen Hei"

if [ -f "${basename}.srt" ] ; then
cp "${basename}.srt" $$.srt
m0="-vf scale=480:-10,harddup -sub $$.srt -unicode -subcp GB18030 -subfont-text-scale 3";
else
m0="-vf scale=480:-10,harddup";
fi

x0="-lavfopts format=mp4 -faacopts mpeg=4:object=2:raw:br=160 -oac faac -ovc x264 -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=500 -of lavf -ofps 24000/1001";
mencoder $m0 -fontconfig -font "${font}" $x0 -o "$$.mp4""$i"
mv "$$.mp4""${basename}.mp4"
if [ -f "${basename}.mp4" ] ; then
rm "$i"
fi
done

转换任意格式的视频到H264

#!/bin/bash
#sudo apt-get install faac x264 gpac mplayer mencoder
basename=`echo $1 | sed \'s/\\(.*\\)\\..*$/\\1/\'`
#获得视频的长宽和帧数
mplayer -vo null -ao null -identify -frames 0 "$1" 2>/dev/null > video.info
FPS=`cat video.info | grep ID_VIDEO_FPS | cut -d = -f 2`
#FPS=23.976
W=`cat video.info | grep ID_VIDEO_WIDTH | cut -d = -f 2`
H=`cat video.info | grep ID_VIDEO_HEIGHT | cut -d = -f 2`
WIDTH=480
HEIGHT=`expr $WIDTH \\* $H \\/ $W`
echo $1 FPS=$FPS WIDTH=$WIDTH HEIGHT=$HEIGHT
mkfifo audio.wav video.yuv
faac -o audio.aac audio.wav &
mplayer -ao pcm:file=audio.wav:fast -vc null -vo null "$1"
x264 --profile baseline --fps $FPS -o video.264 video.yuv ${WIDTH}x${HEIGHT} &
mencoder -vf scale=$WIDTH:$HEIGHT,harddup,pp=fd,format=i420 -nosound -ovc raw -of rawvideo -ofps $FPS -o video.yuv "$1"
MP4Box -new -add video.264 -add audio.aac -fps $FPS "$basename.mp4"
rm video.info audio.aac video.264 audio.wav video.yuv
#使用方法将上面的脚本保存为 x264.sh , x264.sh xxx.avi 来进行转化。

压制DVD到H264,支持ipod

#sudo apt-get install faac x264 gpac mplayer
FPS=29.970
mkfifo audio.wav
cat VTS_01_1.VOB VTS_02_1.VOB VTS_02_2.VOB VTS_03_1.VOB VTS_04_1.VOB | mplayer -nocorrect-pts -vo null -vc null -ao pcm:file=audio.wav:fast - &
faac audio.wav -o audio.aac
mkfifo video.y4m
cat VTS_01_1.VOB VTS_02_1.VOB VTS_02_2.VOB VTS_03_1.VOB VTS_04_1.VOB | mplayer -vo yuv4mpeg:file=video.y4m -vf scale=480:-3,harddup,pp=fd -nosound - &
x264 --profile baseline --muxer mp4 --demuxer y4m video.y4m -o video.mp4
MP4Box -add video.mp4 -add audio.aac -fps $FPS video.mp4

图形界面为ipod touch转mp4的方法

先确保有zenity和memcoder
wget http://linuxfire.com.cn/~lily/toIpod -O ~/.gnome2/nautilus-scripts/toIpod && chmod +x ~/.gnome2/nautilus-scripts/toIpod
在nautilus里对视频文件点右键,选择"脚本"-"toIpod".
详情请查看出处

mencoder/mplayer 反拉丝参数

-vf lavcdeint

合并多个 rm 文件为一个 avi 文件

mencoder -ovc lavc 1.rm -oac mp3lame -o 1.avi
mencoder -ovc lavc 2.rm -oac mp3lame -o 2.avi
mencoder -idx 1.avi -ovc copy -oac copy -o o1.avi
mencoder -idx 2.avi -ovc copy -oac copy -o o2.avi
cat o1.avi o2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -

CD 抓轨为 mp3 (有损)

#sudo apt-get install abcde
abcde -o mp3 -b

CD 抓轨为 Flac (无损)

#sudo apt-get install abcde
abcde -o flac -b

ape 转换为 flac

#sudo apt-get install flac shntool iconv
iconv -f GB2312 -t UTF-8 example.cue -o example_UTF-8.cue
shntool split -t "%n.%p-%t" -f example_UTF-8.cue -o flac example.ape -d flacOutputDir

ape/flac 转换为 mp3

#sudo apt-get install flac shntool lame 
#ape 需要安装 monkeys 包
iconv -f GB2312 -t UTF-8 example.cue -o example_UTF-8.cue
shntool split -t "%n.%p-%t" -f example_UTF-8.cue -o \'cust ext=mp3 lame --r3mix -b 320 --quiet - %f\' example.ape -d mp3OutputDir

批量将 ape 转为 mp3

for i in *.ape; do shnconv -i ape -o "cust ext=mp3 lame -b 320 - %f""$i" -d mp3OutputDir; done

批量将 flac 转为 mp3

for i in *.flac; do shnconv -i flac -o "cust ext=mp3 lame -b 320 - %f""$i" -d mp3OutputDir; done

批量将svg转为png

for i in *.svg; do inkscape $i --export-png=`echo $i | sed -e \'s/svg$/png/\'`; done

批量转换格式到mp3

#sudo apt-get install lame mplayer
for i in *; do base=${i%.*}; mplayer -quiet -vo null -vc dummy -af volume=0,resample=44100:0:1 -ao pcm:waveheader:file="$i.wav""$i" ; lame -V0 -h -b 192 -vbr-new "$i.wav""$base.mp3"; rm -f "$i.wav" ; done

批量缩小图片到30%

for i in *.jpg; do convert -resize 30%x30% "$i""sm-$i"; done

批量转换jpg到png

for i in *.jpg; do convert $i `echo $i | sed -e \'s/jpg$/png/\'`; done

如何压缩png图片

#sudo apt-get install optipng
optipng -o7 old.png new.png
#或 sudo apt-get install pngcrush
#pngcrush -brute old.png new.png

将多张图片合并到一个PDF文件

convert *.jpg out.pdf

批量把pdf转换为txt并格式化

sudo apt-get install poppler-utils poppler-data
find ./ -name \'*.txt\' | while read i; do cat $i | awk \'{if ($0 ~ "^space:”) {printf “\\n”$0} else {printf $0}}’ | sed ‘/^space:*digit:*$/d’ | sed ’s/^space:\\+/ /’ | sed ’s/"/”/g’ > “../txt/$i”; done

转换 pdf 到 png

#sudo apt-get install imagemagick
convert -density 196 FILENAME.pdf FILENAME.png

获取jpg的扩展信息(Exif)

identify -verbose xxx.jpg

获取视频文件 xxx.avi 的信息

mplayer -vo null -ao null -frames 0 -identify "xxx.avi" 2>/dev/null | sed -ne \'/^ID_/ { s/[]()|&;<>`\'"\'"\'\\!$" []/\\&/g;p }\'

查看MKV视频文件 xxx.mkv 的信息

#sudo apt-get install mkvtoolnix
mkvinfo -v xxx.mkv

抓取桌面操作的视频

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

命令行读出文本

espeak -vzh "从前有座山"

命令行抓屏

 scrot -s screenshot.png

压缩


增加 7Z 压缩软件

#支持 7Z,ZIP,Zip64,CAB,RAR,ARJ,GZIP,BZIP2,TAR,CPIO,RPM,ISO,DEB 压缩文件格式
sudo apt-get install p7zip p7zip-full p7zip-rar
#将所有已txt结尾的文件都加入到files.7z
7z a -t7z files.7z *.txt
#解压缩files.zip
7z x files.zip
#删除 files.zip中所有已bak结尾的文件
7z d -r files.zip *.bak
#列出file.7z中所有的文件信息
7z l files.7z
#测试files.zip中所有doc结尾文件的正确性
7z t -r files.zip *.doc
#更新files.zip中的所有doc结尾的文件(不是所有的压缩格式都支持更新这一选项)
7z u files.zip *.doc

增加 rar 软件压缩和解压缩支持

sudo apt-get install rar unrar

增加 zip 格式压缩和解压缩支持

sudo apt-get install zip unzip

解压缩 xxx.tar.gz

tar -zxvf xxx.tar.gz

解压缩 xxx.tar.bz2

tar -jxvf xxx.tar.bz2

压缩aaa bbb目录为xxx.tar.gz

tar -zcvf xxx.tar.gz aaa bbb

压缩aaa bbb目录为xxx.tar.bz2

tar -jcvf xxx.tar.bz2 aaa bbb

增加 lha 支持

sudo apt-get install lha

增加解 cab 文件支持

sudo apt-get install cabextract

Nautilus


显示隐藏文件

Ctrl+h

显示地址栏

Ctrl+l

特殊 URI 地址

* computer:/// - 全部挂载的设备和网络
* network:/// - 浏览可用的网络
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
* smb:/// - 可用的 windows/samba 网络资源
* x-nautilus-desktop:/// - 桌面项目和图标
* file:/// - 本地文件
* trash:/// - 本地回收站目录
* ftp:// - FTP 文件夹
* ssh:// - SSH 文件夹
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
* themes:/// - 系统主题文件夹

查看已安装字体

fc-list
在nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts (这个似乎不行)

日期和时间


显示日历

cal # 显示当月日历
cal 2 2007 # 显示2007年2月的日历

设置日期

date -s mm/dd/yy

设置时间

date -s HH:MM

将时间写入CMOS

hwclock --systohc

查看CMOS时间

 hwclock --show

读取CMOS时间

hwclock --hctosys

从服务器上同步时间

sudo ntpdate ntp.ubuntu.com
sudo ntpdate time.nist.gov

设置电脑的时区为上海

sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

XP 和 Ubuntu 相差了 8 小时的时差

#关闭UTC,将当前时间写入CMOS。
sudo sed -ie \'s/UTC=yes/UTC=no/g\' /etc/default/rcS
sudo hwclock --systohc

工作区


不同工作区间切换

Ctrl + ALT + ←
Ctrl + ALT + →
或者,将滚轮鼠标放在工作区图标上滚动

控制台


指定控制台切换

Ctrl + ALT + Fn(n:1~7)

控制台下滚屏

SHIFT + pageUp/pageDown

控制台抓图

setterm -dump n(n:1~7)
只是支持tty1-7。没中文。没颜色代码序列。

数据库


mysql的数据库存放路径

/var/lib/mysql

从mysql中导出和导入数据

mysqldump 数据库名 > 文件名 #导出数据库
mysqladmin create 数据库名 #建立数据库
mysql 数据库名 < 文件名 #导入数据库

忘了mysql的root口令怎么办

sudo /etc/init.d/mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysqladmin -u user password \'newpassword
sudo mysqladmin flush-privileges

修改mysql的root口令

sudo mysqladmin -u root -p password \'你的新密码\'

如何优化mysql

wget  http://www.day32.com/MySQL/tuning-primer.sh
chmod +x tuning-primer.sh
./tuning-primer.sh

mysql命令行中文显示?号

mysql> set names utf8;

常用mysql管理语句

show table status;  #查询表状态
show full processlist; #查询mysql进程
alter table site_stats engine=MyISAM; #转换表为MyISAM类型,转表锁为行锁。
show variables; #查看mysql 变量

mysql的自动备份

#备份 forum myweb 数据库到 /backup/mysql 目录,并删除7天之前的备份记录
mysqldump --opt --skip-lock-tables -u root forum | gzip -9 > /backup/mysql/forum.`date +%Y%m%d`.sql.gz
mysqldump --opt --skip-lock-tables -u root myweb | gzip -9 > /backup/mysql/myweb.`date +%Y%m%d`.sql.gz
find /backup/mysql/ -type f -ctime +7 -exec rm {} \\;

控制


如何使用命令关闭显示器

xset dpms force off

设置CPU的频率

sudo apt-get install cpufrequtils 
#查看cpu当前频率信息
sudo cpufreq-info
设置模式,对应于{最省电(最低频率),用户控制,最高或最低,正常,最大性能}
cpufreq-set -g {powersave, userspace, ondemand, conservative, performance}

命令关机

sudo halt
sudo shutdown -h now #现在关机

定时关机

sudo shutdown -h 23:00           #晚上11点自动关机
sudo shutdown -h +60 #60分钟后关机

命令重启电脑

sudo reboot
sudo shutdown -r now

如何修改ssh登录提示

sudo gedit  /etc/motd

如何关闭ssh登录提示

sudo gedit  /etc/ssh/sshd_config 修改这一行为: PrintLastLog no

如何使用命令关闭笔记本的触摸板

synclient touchpadoff=1
那么开启触摸板就是:
synclient touchpadoff=0

从命令行通知桌面消息

#sudo apt-get install libnotify-bin
notify-send "hello world"

统计


统计最常用的10条命令

history | awk \'{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] "" CMD[a]/count*100 "% " a;}\' | grep -v "./" | column -c3 -s "" -t | sort -nr | nl | head -n10 

统计每个单词的出现频率,并排序

awk \'{arr[$1]+=1 }END{for(i in arr){print arr[i]"\\t"i}}\' FILE_NAME | sort -rn

统计80端口的连接个数并按照从大到小排列

netstat -na|grep :80|awk \'{print $5}\'|awk -F: \'{print $1}\'|sort|uniq -c|sort -r -n

编辑器


vim中删除技巧

:%s/[Ctrl-v][Enter]//g 删除DOS方式的回车^M
:%s= *$== 删除行尾空白
:%!sort -u 删除重复行
:%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf
:%s/// 删除多行注释
:g/^$/d 删除所有空行
:g!/^dd/d 删除不含字符串\'dd\'的行
:v/^dd/d 删除不含字符串\'dd\'的行
:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行
:v/./.,/./-1join 压缩空行
:g/^$/,/./-j 压缩空行
ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
d0 删至行首。
d$ 删至行尾。
ndd 删除当前行及其后 n-1 行。
x 或 X 删除一个字符。
Ctrl+u 删除输入方式下所输入的文本。
D 删除到行尾
x,y 删除与复制包含高亮区
dl 删除当前字符(与x命令功能相同)
d0 删除到某一行的开始位置
d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw 删除到某个单词的结尾位置
d3w 删除到第三个单词的结尾位置
db 删除到某个单词的开始位置
dW 删除到某个以空格作为分隔符的单词的结尾位置
dB 删除到某个以空格作为分隔符的单词的开始位置
d7B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d) 删除到某个段落的结尾位置
d{ 删除到某个段落的开始位置
d7{ 删除到当前段落起始位置之前的第7个段落位置
dd 删除当前行
d/text 删除从文本中出现“text”中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
dtc 删除当前行直到下一个字符“c”所出现位置之间的内容
D 删除到某一行的结尾
d$ 删除到某一行的结尾
5dd 删除从当前行所开始的5行内容
dL 删除直到屏幕上最后一行的内容
dH 删除直到屏幕上第一行的内容
dG 删除直到工作缓存区结尾的内容
d1G 删除直到工作缓存区开始的内容

如何配置Emacs

打开新立得或者命令行,查找emacs, 选择你想要的版本,比如emacs22或者emacs21.
之后的配置参考Emacs 常见问题及其解决方法

vim 如何显示彩色字符

sudo cp /usr/share/vim/vimcurrent/vimrc_example.vim /usr/share/vim/vimrc

让 vim 直接支持编辑 .gz 文件

sudo apt-get install vim-full

vim 如何显示行号,在~/.vimrc中加入

set number
如果没有~/.vimrc文件,则可以在/etc/vim/vimrc中加入
set number

vim配色方案 (~/.vimrc)

colorscheme scheme
可用的 scheme 在 /usr/share/vim/vim71/colors/

解决vim中文编码问题,在~/.vimrc中加入

let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
#再提供一个实践中觉得不错的配置:
" Encoding related
set encoding=UTF-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileencoding=utf-8

gedit中文乱码的解决

gconftool-2 --set /apps/gedit-2/preferences/encodings/auto_detected "[UTF-8,CURRENT,GB18030,BIG5,ISO-8859-15,UTF-16]" --type list --list-type string

编译和打包


安装通用编译环境

sudo apt-get install build-essential

通用的编译安装步骤

./configure && make && sudo make install

如何编译安装软件 kate

sudo apt-get install apt-build
sudo apt-build install kate

获得源代码包

sudo apt-get source mysql-server

解压缩还原源代码包

dpkg-source -x mysql-dfsg-5.1_5.1.30-1.dsc

安装编译打包环境

sudo apt-get build-dep mysql-server

重新编译并打包Debian化的源码

dpkg-buildpackage -rfakeroot

获得源码并重新打包

apt-get source php5-cgi  
#或手工下载源码后使用 dpkg-source -x php5_5.2.6.dfsg.1-3ubuntu4.1.dsc 解开源码
sudo apt-get build-dep php5-cgi
cd php5-5.2.6.dfsg.1
dpkg-buildpackage -rfakeroot -uc -b

给源代码打补丁

patch -p0 < mysql.patch

其它


把终端加到右键菜单

sudo apt-get install nautilus-open-terminal 

如何删除Totem电影播放机的播放历史记录

rm ~/.recently-used

清除桌面挂载硬盘图标

gconftool-2 --set /apps/nautilus/desktop/volumes_visible 0 --type bool
恢复:
gconftool-2 --set /apps/nautilus/desktop/volumes_visible 1 --type bool

如何更换gnome程序的快捷键

点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效;
如果要清除该快捷键,请使用backspace

基于 OpenVZ 的 VPS 支持 OpenVPN 对外访问设置

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
#或
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source VPS-IP-ADDRESS

GNOME登录时自动运行程序

系统 -> 首选项 -> 会话 ->
启动程序 

man 如何显示彩色字符

vim ~/.bashrc
#增加下面的内容:
export LESS_TERMCAP_mb=$\'\\E[01;31m\'
export LESS_TERMCAP_md=$\'\\E[01;31m\'
export LESS_TERMCAP_me=$\'\\E[0m\'
export LESS_TERMCAP_se=$\'\\E[0m\'
export LESS_TERMCAP_so=$\'\\E[01;44;33m\'
export LESS_TERMCAP_ue=$\'\\E[0m\'
export LESS_TERMCAP_us=$\'\\E[01;32m\'
#生效文件
#source .bashrc

如何在命令行删除在会话设置的启动程序

cd ~/.config/autostart
rm 需要删除启动程序

如何提高wine的反应速度

sudo sed -ie \'/GBK/,/^}/d\' /usr/share/X11/locale/zh_CN.UTF-8/XLC_LOCALE
可能造成某些游戏帧数降低


如何命令行刻录

mkisofs -o test.iso -Jrv -V test_disk /home/carla/
cdrecord -scanbus
scsibus1:
1,1,0 101) \'HL-DT-ST\' \'CD-RW GCE-8481B \' \'1.04\' Removable CD-ROM
cdrecord -v -eject speed=8 dev=1,1,0 test.iso
http://www.ibm.com/developerworks/cn/linux/l-cdburn/index.html

延迟抓图

gnome-screenshot -d 10 #延迟10秒抓图
gnome-screenshot -w -d 5 #延迟5秒抓当前激活窗口

回收站在哪里

Ubuntu8.04 Gnome 2.22.2 以后在 $HOME/.local/share/Trash/
Ubuntu8.04 之前在 $HOME/.Trash/

强制清空回收站

sudo rm -fr $HOME/.local/share/Trash/files/

默认打开方式的配置文件在哪里

#全局
/etc/gnome/defaults.list
#个人
~/.local/share/applications/mimeapps.list

Firefox 的缓存目录在哪里

ls ~/.mozilla/firefox/*.default/Cache/

查看samba的用户

sudo pdbedit -L

增加一个用户到samba

sudo pdbedit -a username

从samba账户中删除一个用户

sudo pdbedit -x username

显示samba账户信息

sudo pdbedit -r username

测试samba账户是否正常

smbclient -L 192.168.1.1 -U username -d 3

samba的数据库存在哪里

/var/lib/samba/passdb.tdb

samba用户Windows下无法登录

在Windows的运行输入 cmd ,进入终端,输入 net use 命令,将显示已经连接的帐号如 \\192.168.1.1\\username
再输入 net use \\192.168.1.1\\username /delete 删除现有的共享连接,再尝试进入另外一个目录就可以正常登录了。

Pidgin 的聊天记录在哪里

~/.purple/logs/

安装PDF打印机

sudo apt-get install cups-pdf
#打印生成的pdf文件在 ~/PDF 文件夹里面

nvidia快速重设显示设置及配置多显示器

sudo dpkg-reconfigure xserver-xorg
sudo nvidia-xconfig
#nvidia-settings 用于设置分辨率和多显示器
sudo nvidia-settings

kacpid进程大量占用CPU

硬件驱动中不要激活无线网卡驱动即可

替换上一条命令中的一个短语

^foo^bar^
!!:s/foo/bar/

AMD64位系统安装免费的杀毒软件 avast!

wget http://files.avast.com/files/linux/avast4workstation_1.3.0-2_i386.deb
sudo dpkg --force-architecture -i avast4workstation_1.3.0-2_i386.deb
sudo apt-get install ia32-libs
#然后打开 http://www.avast.com/registration-free-antivirus.php去申请免费一年的许可证号
 

Linux补丁的制作方法

$
0
0
Linux补丁制作方法,简单明了:
1diff -rNu ngx_output_chain.c ngx_output_chain_dx.c >ngx_output_chain.patch
看一段例子,具体做什么的,你懂的:)
01--- ngx_output_chain.c  2010-10-12 07:06:52.000000000 -0500
02+++ ngx_output_chain_dx.c   2011-11-11 01:48:06.335975441 -0600
03@@ -565,10 +565,31 @@
04         }
05  
06         if(n != size) {
07-            ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, 0,
08-                          ngx_read_file_n " read only %z of %O from \\"%s\\"",
09-                          n, size, src->file->name.data);
10-            returnNGX_ERROR;
11+           int dxcnt=0;
12+           while(dxcnt<5&&n!=size) {
13+               dxcnt++;
14+#if(NGX_HAVE_FILE_AIO)
15+               if(ctx->aio_handler) {
16+                   n = ngx_file_aio_read(src->file, dst->pos, (size_t) size,
17+                                         src->file_pos, ctx->pool);
18+                   if(n == NGX_AGAIN) {
19+                       ctx->aio_handler(ctx, src->file);
20+                       returnNGX_AGAIN;
21+                   }
22+               } else{
23+                       n = ngx_read_file(src->file, dst->pos, (size_t) size,
24+                                       src->file_pos);
25+               }
26+#else
27+               n = ngx_read_file(src->file, dst->pos, (size_t) size, src->file_pos);
28+#endif
29+           }
30+           if(n != size) {
31+               ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, 0,
32+                             ngx_read_file_n " read only %z of %O from \\"%s\\"",
33+                             n, size, src->file->name.data);
34+               returnNGX_ERROR;
35+           }
36         }
37  
38         dst->last += n;

Linux防DDOS脚本

$
0
0


Linux防DDOS脚本安装:
1wget http://www.inetbase.com/scripts/ddos/install.sh
2chmod+x install.sh
3./install.sh
Linux防DDOS脚本卸载:
1wget http://www.inetbase.com/scripts/ddos/uninstall.sh
2chmod+x uninstall.sh
3./uninstall.sh

Linux的分区工具Fdisk的使用方法

$
0
0
现在发行版本的Linux已经提供了图形交互界面,很多的人还是感觉无从下手。原因主要是不清楚Linux的分区规定,及Linux分区工具—Fdisk的使用方法。下面从这两个方面入手,来讲解这个困扰大家的问题。
Linux的分区规定

1.Linux分区工具—Fdisk设备管理

在Linux中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等IDE或SCSI设备也不例外。 Linux把各种IDE设备分配了一个由hd前缀组成的文件;而对于各种SCSI设备,则分配了一个由sd前缀组成的文件。例如,第一个IDE设备,Linux就定义为hda;第二个IDE设备就定义为hdb;下面以此类推。而SCSI设备就应该是sda、sdb、sdc等。

2.Linux分区工具—Fdisk分区数量

要进行分区就必须针对每一个硬件设备进行操作,这就有可能是一块IDE硬盘或是一块SCSI硬盘。对于每一个硬盘(IDE或SCSI)设备,Linux分配了一个1到16的序列号码,这就代表了这块硬盘上面的分区号码。例如,第一个IDE硬盘的第一个分区,在Linux下面映射的就是hda1,第二个分区就称作是hda2。对于SCSI硬盘则是sda1、sdb1等。

3.Linux分区工具—Fdisk各分区的作用

在Linux中规定,每一个硬盘设备最多能有4个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是4个。对于早期的DOS和Windows(Windows 2000以前的版本),系统只承认一个主分区,可以通过在扩展分区上增加逻辑盘符(逻辑分区)的方法,进一步地细化分区。 主分区的作用就是计算机用来进行启动操作系统的,因此每一个操作系统的启动,或者称作是引导程序,都应该存放在主分区上。这就是主分区和扩展分区及逻辑分区的最大区别。我们在指定安装引导Linux的bootloader的时候,都要指定在主分区上,就是最好的例证。
Linux规定了主分区(或者扩展分区)占用1至16号码中的前4个号码。以第一个IDE硬盘为例说明,主分区(或者扩展分区)占用了hda1、hda2、hda3、hda4,而逻辑分区占用了hda5到hda16等12个号码。因此,Linux下面每一个硬盘总共最多有16个分区。 对于逻辑分区,Linux规定它们必须建立在扩展分区上(在DOS和Windows系统上也是如此规定),而不是主分区上。
我们可以看到扩展分区能够提供更加灵活的分区模式,但不能用来作为操作系统的引导。 除去上面这些各种分区的差别,我们就可以简单地把它们一视同仁了。

Tomcat默认不吃软连接

$
0
0
由于安全方面的原因,默认情况下是不能在Tomcat的应用下面使用软连接(Symbolic Link)的,试想,在允许软连接的情况下,我们可以放一个软连接文件在应用下面,连接到到某些系统目录,读取重要的信息!如果Tomcat是用root这个用户来运行的,那么系统中就没有什么不能读取了。
如果想要允许软连接,可以通过设置应用配置文件中的 Context 元素上的 allowLinking 属性来启用这个功能:
1allowLinking="true"
应用配置文件放在 tomcat/conf/Catalina/localhost 目录下面.

Linux服务器系统的参数优化

$
0
0
Linux服务器参数必要的优化,包括网络参数优化、文件数优化、内存优化等等。
1、网络参数优化:
这部分主要参照张宴大师 《Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]》其中 五、优化Linux内核参数的内容:
01vi /etc/sysctl.conf #编辑sysctl.conf文件
02#在/etc/sysctl.conf中添加如下内容
03# 网络参数优化开始
04net.ipv4.tcp_max_syn_backlog = 65536
05net.core.netdev_max_backlog =  32768
06net.core.somaxconn = 32768
07 
08net.core.wmem_default = 8388608
09net.core.rmem_default = 8388608
10net.core.rmem_max = 16777216
11net.core.wmem_max = 16777216
12 
13net.ipv4.tcp_timestamps = 0
14net.ipv4.tcp_synack_retries = 2
15net.ipv4.tcp_syn_retries = 2
16 
17net.ipv4.tcp_tw_recycle = 1
18#net.ipv4.tcp_tw_len = 1
19net.ipv4.tcp_tw_reuse = 1
20 
21net.ipv4.tcp_mem = 94500000 915000000 927000000
22net.ipv4.tcp_max_orphans = 3276800
23 
24#net.ipv4.tcp_fin_timeout = 30
25#net.ipv4.tcp_keepalive_time = 120
26net.ipv4.ip_local_port_range = 1024  65535
27#网络参数优化结束
28#添加内容结束
修改完成后运行以下命令使参数生效:
1/sbin/sysctl -p
2、系统最大打开文件数优化
默认情况下,系统允许最大打开文件数为1024个,这对于访问量较大的web服务器来说远远不够用。系统最大打开文件数可以通过ulimit来修改和查询。
一般情况下,可以通过ulimit -n来查看目前系统允许的最大打开文件数,例如 :
1ulimit -n 
21024 #系统返回
如果我们要修改系统允许最大文件打开数,可以通过ulimit -SHn来做,例如要临时修改系统最大打开文件数为51201个,那么用如下命令:
1ulimit -SHn 51201
每次重启系统时,该值会被自动还原,可以将上述命令写入 /etc/rc.local 中。如果想永久更改,可以按照如下修改:
1vi /etc/security/limits.conf  
2# add
3*   soft    nofile  51201
4*   hard    nofile  51201
系统最大打开文件数影响到的配置文件(以下必须设置为系统设置相一致,例如设置系统最大打开文件数为:51201):
01A、Nginx配置文件nginx.conf的配置项:worker_rlimit_nofile、worker_connections、open_file_cache等,例如设置为:
02  worker_rlimit_nofile 51201;
03  events 
04  {
05    use epoll;
06    worker_connections 51201;
07  }
08  http 
09  {
10    #其它参数略过
11    open_file_cache max=51201 inactive=20s;  
12    open_file_cache_min_uses 1;  
13    open_file_cache_valid 30s;
14    #其它参数略过
15  }
16B、FastCGI配置文件php-fpm.conf的配置项
17   <value name="rlimit_files">51201</value>
3、系统共享内存优化:
系统共享内存大小主要影响到eaccelerator的设置:
1eaccelerator.shm_size="32"
该项为eaccelerator可使用的共享内存大小(单位为MB)设置。
在Linux下,单个进程的最大共享内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节),例如Redhat 4.7的shmmax默认值为33554432字节(33554432bytes/1024/1024=32MB)。
  
  临时更改该值(例如修改为128MB=128x1024x1024=134217728字节):
1echo 134217728 > /proc/sys/kernel/shmmax
2echo 134217728 > /proc/sys/kernel/shmall
按照以上方法更改,在每次重启系统时,该值会被自动还原。如果想永久更改,可以修改/etc/sysctl.conf文件,设置:
1#系统共享内存大小优化
2kernel.shmmax = 134217728
完整的/etc/sysctl.conf修改添加内容如下:
01#在/etc/sysctl.conf中添加如下内容
02# 网络参数优化开始
03net.ipv4.tcp_max_syn_backlog = 65536
04net.core.netdev_max_backlog =  32768
05net.core.somaxconn = 32768
06 
07net.core.wmem_default = 8388608
08net.core.rmem_default = 8388608
09net.core.rmem_max = 16777216
10net.core.wmem_max = 16777216
11 
12net.ipv4.tcp_timestamps = 0
13net.ipv4.tcp_synack_retries = 2
14net.ipv4.tcp_syn_retries = 2
15 
16net.ipv4.tcp_tw_recycle = 1
17#net.ipv4.tcp_tw_len = 1
18net.ipv4.tcp_tw_reuse = 1
19 
20net.ipv4.tcp_mem = 94500000 915000000 927000000
21net.ipv4.tcp_max_orphans = 3276800
22 
23#net.ipv4.tcp_fin_timeout = 30
24#net.ipv4.tcp_keepalive_time = 120
25net.ipv4.ip_local_port_range = 1024  65535
26#网络参数优化结束
27#系统共享内存大小优化开始
28kernel.shmmax = 134217728
29#系统共享内存大小优化结束
30#添加内容结束
修改完成后运行以下命令使参数生效:
1/sbin/sysctl -p
以上,如有不足,欢迎大家指正和追加.
Viewing all 20452 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>