1.gdb:flash builder模拟客户端运行程序,这时服务器挂在内存中运行,如果此时发送了请求而程序中的某个模块没有正确运行,就需要进行调试,gdb就是很好的工具,常用的命令是,gdb + 可执行文件, gdb -c core文件 + 可执行文件,要产生core文件首先要使用命令ulimit -c unlimited,还有一种方法就是使用gdb -p + 进程号,这种方法特别适用在此处,因为前台发送的请求是前两种方式不能模拟的,这种方法能更好的跟踪出错的模块。查看进程号:netstat -lpn | grep 程序名。
gdb -c core文件 + 可执行文件:产生core文件是一个对程序调试比较有用的工具,直接使用命令bt就能打印出错地点,很方便。
set follow-fork-mode child:用来跟踪fork产生的子进程,gdb默认情况是跟踪父进程的。
通常在gdb调试时要打印出一些字符串的内容,如果字符串长度过长,print命令不会将字符串完全打印出来,这时需要命令p str@str_len,在linux上长度限制一般为200,所以,如果还不能完整打印,通过命令set print element 0就可以了。如果要输出16进制,则使用p/x str@str_len,通常在输出 中文编码内容 时,使用 16进制有 用 。
2.如果你只想看文件的前5行,可以使用head命令,如:
head -5 /etc/passwd
如果你想查看文件的后10行,可以使用tail命令,如:
tail -10 /etc/passwd
tail -f /var/log/messages
参数-f使tail不停地去读最新的内容,这样有实时监视的效果.
3.netstat:这个命令可以用来查看网络信息,特别有用:
netstat -lpn | grep 进程号或者端口号。可以查看进程的网络连接信息。
4.dos2unix:在dos操作系统中拷贝或者移动Unix系统的文件时,经常会出现文件中多了些奇怪的字符,这时就是使用这个命令的时候。
dos2unix + 文件名。
5.ls -l /proc/ + 进程号 :查看一个进程打开的所有文件描述符。如ls -l /proc/8090。
6.lsof -p + 进程号:与上个命令类似,可以查看一个进程打开的所有文件。
7.find / -name + 文件名:从根目录开始寻找某个文件所在位置。
8.今天在linux下下载了一个软件,解压编译安装好之后显示cannot open 某个动态库,但是我打开/etc/ld.so.conf文件下查看默认的动态库链接目录发现能在其中的某个目录/usr/local/lib中找到这个动态库,感觉挺纳闷的,不知道什么原因。然后上网搜索了下,发现原来还要使用ldconfig命令来清理一下缓存,然后果真就成功了。因此总结下该命令的作用:ldconfig是一个动态链接库管理命令
为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig
ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.
ldconfig命令行用法如下:
ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] [- |--help|--usage] path...
ldconfig可用的选项说明如下:
(1) -v或--verbose : 用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字.
(2) -n : 用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib,/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录.
(3) -N : 此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache).若未用-X选项,ldconfig照常更新文件的连接.
(4) -X : 此选项指示ldconfig不更新文件的连接.若未用-N选项,则缓存文件正常更新.
(5) -f CONF : 此选项指定动态链接库的配置文件为CONF,系统默认为/etc/ld.so.conf.
(6) -C CACHE : 此选项指定生成的缓存文件为CACHE,系统默认的是/etc/ld.so.cache,此文件存放已排好序的可共享的动态链接库的列表.
(7) -r ROOT : 此选项改变应用程序的根目录为ROOT(是调用chroot函数实现的).选择此项时,系统默认的配置文件/etc/ld.so.conf,实际对应的为 ROOT/etc/ld.so.conf.如用-r /usr/zzz时,打开配置文件/etc/ld.so.conf时,实际打开的是/usr/zzz/etc/ld.so.conf文件.用此选项,可以 大大增加动态链接库管理的灵活性.
(8) -l : 通常情况下,ldconfig搜索动态链接库时将自动建立动态链接库的连接.选择此项时,将进入专家模式,需要手工设置连接.一般用户不用此项.
(9) -p或--print-cache : 此选项指示ldconfig打印出当前缓存文件所保存的所有共享库的名字.
(10) -c FORMAT 或 --format=FORMAT : 此选项用于指定缓存文件所使用的格式,共有三种: ld(老格式),new(新格式)和compat(兼容格式,此为默认格式).
(11) -V : 此选项打印出ldconfig的版本信息,而后退出.
(12) - 或 --help 或 --usage : 这三个选项作用相同,都是让ldconfig打印出其帮助信息,而后退出.
9.rz:这个命令支持从windows上传文件到linux操作系统,只需要执行rz -bey就会弹出一个上传界面,非常方便。
10.sz:与上个命令相反,这个命令可以下载linux文件到本地windows下,上传和下载的目录在SecureCRT会话选项-终端-X/Y/Zmodem中设置。
11.locate:这个命令与find / -name类似,但是要比它执行的更快,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。具体使用方法:http://www.cnblogs.com/flysnail/archive/2012/05/16/2504266.html
12.chkconfig:今天在装mysql的时候使用了这个命令:chkconfig --add mysqld,添加mysqld服务器,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。具体的使用方式:http://www.cnblogs.com/flysnail/archive/2012/05/16/2504266.html
13.perl -i -pe :perl工具很常用,比如将一个目录下的所有文件的某个字段改成另一个字段,可以使用:perl -i -pe 's/port="18/port="17/g' ./*.xml。将当前目录下的所有.xml文件的port="18字段转换成port="17字段,自动匹配。
14.telnet:用于连接远程ip端口,当需要测试是否能够连接远程ip时比较有用。
15.mysql服务器启动命令:./mysqld --defaults-file=/etc/my.cnf --user=root 或者 ./mysqld_safe --defaults-file=/etc/my.cnf --user=root & 或者 /etc/init.d/mysqld start。
16.touch:创建一个空文件。
17.vi ~/.bash_profile:用于修改环境变量,在PATH后面就可以添加目录,格式是PAHT=$PATH:$HOME/bin后接:+目录名,这样就避免经常出现常用的命令使用不了,而要通过添加目录才能使用的情况。修改完之后如果要立即生效还需使用命令source .bash_profile或者. .bash_profile即可。这是root账户下的文件,而普通用户则可以通过vi ~/.bashrc修改环境变量,格式为export PATH=/usr/bin:/bin。同样要立即生效的话使用命令source .bashrc或者. .bashrc即可。
18.crontab:当需要在linux环境下添加定时执行任务,就可以通过这个命令添加或删除执行脚本。参数:
-u 指定用户执行任务,一般root用户在执行这个命令的时候需要此参数
编辑的格式是:
01 * * * * root run-parts /etc/cron.hourly
任务的描述格式如下:
hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
退出后用/etc/init.d/crond restart命令重启crond进程。详见:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html
18.xargs:xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
rm `find /path -type f`
find /path -type f -print0 | xargs -0 rm19.file:file + 文件名可以用来查看该文件的类型和编码方式,挺实用的。
20.kill -l:显示系统支持的所有信号。
21.su username:切换用户名。如:su root。
22.date -s:修改系统时间。如:date -s "2007-08-03 14:15:00",注意格式。date命令详解参加:http://www.2cto.com/os/201108/102154.html
22.myslq命令:当不想进入mysql客户端中执行语句时可以直接在shell下执行命令就能做到相同的事情,只需加上-e选项就行,如:
mysql -uroot -p*** -e "select * from table;"
就会在终端显示操作的结果。通常结果的第一行都会带有表的字段名,有的时候处理这些结果数据时想要过滤第一行的字段名,则只需再加上-N选项即可。如:
mysql -uroot -p*** -e "select * from table;" -N
这样打印出来的结果就是纯数据而没有字段名了。
23.iconv命令:在linux环境下经常要处理关于字符集的问题,尤其是处理mysql数据的时候,因为如果没有编辑或者设置mysql配置文件,则mysql默认的字符集为latin1,而我们大多数处理的数据都是基于字符集utf8的环境下,所以就会出现一些需要转换字符集的情况,比如:默认字符集时,当在mysql的一个表中插入一个中文字段,那么在mysql客户端显示时就是乱码的,要使用语句set names latin1,这里没有问题,但是当使用一个php脚本去跟数据库交互时,将这个表的数据输出到网页上或者文件中时,就会出现乱码情况,而在php中执行sql与若包含set names latin1很不妥,因此我们需要将mysql本地的数据库转换成utf8格式的,这里就需要用到iconv命令,简要介绍下该命令:
iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。
例如:从GB2312转换为UTF-8。
用法: iconv [选项...] [文件...]
Convert encoding of given files from one encoding toanother.
输入/输出格式规范:
-f, --from-code=NAME 原始文本编码
-t, --to-code=NAME 输出编码
信息:
-l, --list 列举所有已知的字符集
输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent suppress warnings
--verbose 打印进度信息
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号
piconv是流模式的,处理超大文件比较方便.convmv是给文件名重命名的,windows和linux系统间切换后尤其有用。
我们这里处理关于字符集替换的方式为先将mysql数据导出到sql脚本中,如:(1).mysqldump --default-character-set=latin1 -hlocalhost -uroot -p****** -B database --tables old_table > old.sql
这里-B指定数据库,--tables指定表,将数据导出到old.sql中。
(2).转换编码:iconv -t utf-8 -f latin1 -c old.sql > new.sql。
将old.sql编码方式由latin1改为utf-8.
(3).导入数据:修改new.sql脚本,在插入/更新之前加入语句:SET NAMES utf8;保存。
mysql -uroot -p****** database < new.sql。
这样就完成了mysql的旧数据升级。
24.mailx:使用linux时,有时我们想发邮件给朋友或同事,可不可以通过命令行直接发呢?想通过linux监控网站或者系统状况并自动报警,如何使用脚本发出邮件给外部邮箱呢?答案是可以的,就是使用mailx命令。CentOS5自带的mailx是8.1版本的,不支持配置外部公网邮箱,必须升级到最新版本12.4,可以使用mailx -V查看系统自带的mailx版本。使用wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files下载最新版本mailx-12.4.tar.bz2 (271.5 kB) 。
# tar jxvf mailx-12.4.tar.bz2
# cd mailx-12.4
# make
# make install UCBINSTALL=/usr/bin/install
如此即安装完毕。这时,如果没有卸载旧版本的mailx,是不能直接使用mailx或mail命令的,否则使用的仍然是旧版mailx。新版mailx在解压后的mailx-12.4文件夹里面,即调用路径为:解压路径/mailx-12.4/mailx。例如我解压在/root/下,那我要使用新版mailx并查看版本号,则可以用/root/mailx-12.4/mailx -V 查看。
为使得新版mailx更加易用,我们可以利用alias和.bashrc将mail命令指向该新版mailx:
编辑.bashrc:vi /root/.bashrc
添加一行:alias mail='/root/mailx-12.4/mailx'
即时生效:source /root/.bashrc
这时的mail命令即代表新版mailx。
接下来配置新版mailx使用外部邮箱发送邮件:vi /etc/nail.rc(/etc/mail.rc)
添加两行:
set from=myname@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=myname smtp-auth-password=password smtp-auth=login
from指明发送邮件的地址,即发件人地址,如:23201249@qq.com
smtp指明smtp服务器,
smtp-auth-user指明在smtp服务器上的用户名,根据上面的qq邮箱:23201249;smtp-auth-password指明邮箱的登陆密码或者独立密码;smtp-auth指明访问方式。
这样就配置好了,然后通过命令:
echo "test" | mail -s "mail head" 23201249@qq.com
就能发送一封内容为test,名字为mail head的邮件给23201249@qq.com。你如果没有开通该服务,一般qq邮箱会发送一封邮件提示SMTP服务设置提醒,按照说明开启服务即可成功收到邮件啦。
25.sort命令:sort是在Linux里非常常用的一个命令,主要用来将数据进行排序,而且功能非常强大。sort的工作原理:
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
选项:
-u:去除重复行;
-r:逆序排序;
-o:能够将输出的数据直接输入到读取数据的文件中;如: cat test.txt | sort -o test.txt 如果没有-o选项,则test.txt文件会变成空文件。
-n:在使用sort时有时会出现10比2小的情况,出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
-t:设定间隔符;
-k:指定了间隔符之后,就可以用-k来指定列数了;
-f:忽略大小写;
-c:会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1;
-C:会检查文件是否已排好序,如果乱序,不输出内容,仅返回1;
-M:会以月份来排序,比如JAN小于FEB等等;
-b:会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
该命令详见:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html
26.df命令:检查文件系统的磁盘空间占用情况。
常用命令为:df -lh;
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 6.4G 41G 14% /
tmpfs 3.7G 8.0K 3.7G 1% /dev/shm
/dev/sda1 485M 42M 418M 10% /boot
/dev/mapper/VolGroup-lv_home
858G 74G 741G 10% /data
第一列代表文件系统对应的设备文件的路径名(一般是硬盘上的分区),剩下的分别是容量大小,使用大小,剩余大小,使用率,文件系统挂载目录。第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。
28.du命令:查询档案或目录的磁盘使用空间
a:显示全部目录和其次目录下的每个档案所占的磁盘空间
b:大小用bytes来表示 (默认值为k bytes)
c:最后再加上总计 (默认值)
s:只显示各档案大小的总合 (summarize)
x:只计算同属同一个档案系统的档案
L:计算所有的档案大小
常用命令:du -a
29.top命令:用于查看系统中运行的各进程的cpu,内存情况,比较直观。可以用htop命令替代,比top命令更方便,但是系统没有默认执行程序,需要下载安装。
top -p +进程号: 可以查看指定程序的运行情况。
30.strace命令:用于查看进程的系统调用,出错情况,是一种方便的调试手段。
strace -p +进程号:可以查看指定进程的系统调用情况。
31.pstree命令:查看系统所有进程生成的线程树。
常用参数:-a。
32.sed命令:将一个目录下的所有文件内容里的某个字符串更改为另外一个字符串.
find . -type f -exec sed -i 's/strA/strB/g' {} \;
33.fuser命令:可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息.
fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访问类型。
访问类型如下:
c 代表当前目录
e 将此文件作为程序的可执行对象使用
f 打开的文件。默认不显示。
F 打开的文件,用于写操作。默认不显示。
r 根目录。
m 映射文件或者共享库。
s 将此文件作为共享库(或其他可装载对象)使用
当指定的文件没有被访问,或者出现错误的时候,fuser会返回非零。
为了查看使用tcp和udp套接字的进程,需要-n选项并指定名称空间。默认IpV4和IpV6都会显示。套接字可以是本地的或者是远程的端口,和远程的地址。所有的域是可选的,但是其前面的','必须存在。如下:
[lcl_port][,[rmt_host][,[rmt_port]]]
对于ip地址和port,名称和数字表示都可以使用。
fuser只把PID输出到标准输出,其他的都输出到标准错误输出。