一、基本命令 1、查看目录大小: du -sh * 2、tail -f <filename> 可用于监视文件变化和实时显示变化 3、查看活动进程 ps -ef 4、查看安装文件信息 rpm -ql | grep xxx 5、查看全部文件,包括隐藏的 ls -a 6、文件内容排序 sort result.csv > result_all 7、查看文件二进制格式(用于看文件是否有额外的字符) xxd result.csv | tail 8、在文件中查找字符串 grep xxx filename grep '^abc' filname 以abc开头 9、文件格式转换 dos2unix -o filename 10、文件行数 wc -l 11、比较文件不同 diff file1 file2 <:第一个文件有,第二个文件没有 >:第一个文件没有,第二个文件有 12、vim选定块儿 ctrl+v 方向键 13、查看历史命令 history 10 14、vim缩进格式化 gg = G 15、shell if [ $a -eq 0 ] then fi 中的if [ 之间,以及[与变量之间都有空格 16、shell 双括号让shell更像c语言:POSIX标准的扩展计算:$((exp)) 这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),甚至是三目运算符。 注意:这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0 if(($a==2)) 或者 if((a==2)) for(($i=0;$i<=10;$i++)) 或者 for((i=0;i<=10;i++)) echo $((3+2)) echo $((3>2)) echo $((var=2+3)) echo $((var++)) 17、nohup 用户退出,进程仍然执行 18、sleep sleep 1s sleep 1m sleep 1h 19、定时任务 crontab -e 添加一行任务,类似: 00 02 * * * sh /home/rd/chenlei/mis_log/uploadmis_log.sh >/dev/null 2>&1 注:>/dev/null 2>&1 意思是将产生的所有信息丢弃 它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段, 格式如下:* * * * * 分钟 小时 日期 月份 星期几 20、打包连接文件的目标文件 tar -h -cvf 21、HI截屏 alt+shift+a,然后框起所选部分。 22、vim跳到函数定义 在源文件目录执行:ctags –R * 文件中:进入后ctrl + ] 回退是ctrl + o 23、查找含有某内容的文件 grep string * -R 24、vim查找 光标定位到单词 # n:向下查找 N:反方向查找 25、vim窗口分割 横排:vsplit 竖排:split 窗口切换:ctrl+w 26、xargs 在管道中使用,将前面的输出列表作为输入参数,执行后面的命令,每次输入一个参数,执行一次后面的命令 例如:列出本目录下每个文件的行数 1)管道实现:ls | wc -l 2)xargs:ls | xargs wc -l 注:这两个是不同的,第一个是将所有文件列表作为参数输入wc命令,执行一次wc 第二个是,每次取出文件列表中的一个文件名,作为wc执行一次wc,共执行N次wc 例如:ls | xargs -i mv {} {}.bak 将此目录下的所有文件都重命名为xxxx.bak,-i配置{}使用,表示用{}代表前面输出参数的名称 27、用户管理 增加用户 useradd –d /usr/sam -s /bin/bash -m sam 修改密码 passwd username 把文件夹转移拥有者 chown user dir 28、-h选项 文件的大小以用户容易理解的方式显示 eg. ll -h du -h df -h 29、任务管理器 top 30、显示所有的环境变量 env 31、时间戳转换 时间戳转换为字符串:date -d '1970-01-01 UTC 1283829490 seconds' 字符串转换为时间戳:data -d '20100908'+%s (只精确到天) 32、创建/清空文件 >a.txt 33、终端翻页 向下:b (below) 向上:f (forward) 34、查看帮助 man write 查看write命令用法 man -k write 查看write所有项,包括命令行、库函数以及内核api等 man 3 write 查看write库函数 1 -Commands available to users 一般用户命令 2 - Unix and C system calls 系统调用命令 3 - C library routines for C programs C函数库命令 35、回到上一次打开的目录 cd - 36、找到某个程序存放目录,包括bin,source以及etc等 whereis mysql 37、删除文件中的空行 grep . filename > newfilename 38、批量修改文件后缀名 rename .txt .c * 39、查看可执行文件 readelf -a xxxx 40、GCC编译选项 -O2 二级优化 -Werror 警告视为错误 -Wall 显示警告信息 -pipe 中间生成文件定位到管道 41、vim跳转到变量定义 gd 42、vim撤销与重复 撤销:u 重复:. 43、当前登录人 who 我是谁? whoami 44、dev/null 2>&1 解释 crontab内容 :50 18 5-30 * * /script/myscript.sh 1> /dev/null 2>&1 其中 1> /dev/null 2>&1是什么意思?? dev/null 为系统垃圾箱 &为后台运行 1代表标准输出,2代表错误信息输出. 1>/dev/null 就是指将标准输出定向到空设备, 2>&1,的意思是将错误输出定向到和1一样的输出设备,也同样是空. cmd >a 2>a 和 cmd >a 2>&1 为什么不同? cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。 cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a 。a文件只被打开一遍。 二、文本操作 1、uniq 显示文件内容,不显示重复的记录 uniq -d file 显示重复的行 uniq -u file 显示不重复的行 2、join -t symbol 合并两个文件,把具有相同字段的两个记录合并到一起,注意,字段相同:不但是名字相同,而且处于同一行 a.txt: 1 100 2 200 3 300 b.txt: 1 a 2 b 4 c 3 d join a.txt b.txt 结果: 1 100 a 2 200 b 3、paste paste -d symbol pas1 pas2 将pas1和pas2粘贴成两列,用符号symbol分隔 eg. test1.txt AAAAA: EEEEE BBBBB: FFFFF CCCCC: GGGGG DDDDD: HHHHH test2.txt 11111 22222 33333 44444 paste test1.txt test2.txt AAAAA: EEEEE 11111 BBBBB: FFFFF 22222 CCCCC: GGGGG 33333 DDDDD: HHHHH 44444 4、cut 按列切割文件 cut -d symbol -f num file 将file中,以symbol符号分域,将第num域分割出来 eg。 1:100 2:200 3:300 cut -d: -f1 a.txt 结果: 100 200 300 5、diff a.txt b.txt 比较两个文件在某一行的不同 <:第一个文件有,第二个文件没有 >:第二个文件有,第一个文件没有 6、find find pathname –options -name 按照文件名查找文件,name要加引号 -mtime –n +n 按照文件更改时间来查找,-n表示文件更改时间距现在n天以内,+n表示距现在n天以前 -exec indication {} 对找到的文件执行shell操作,{}表示用find的结果作为参数,是必须的。 find . –mtime +5 查找5天之前的文件 find -size 0 -exec rm -rf {} 删除空文件 7、sort sort -o file +pos1 +pos2 input_files -o 存储结果的输出文件名。 -t 域分隔符;用非空格或tab键分隔域。 -r 对分类次序或比较求逆。 +n n为域号。使用此域号开始分类。 eg. sort -t',' +0 +3 a.txt -o b.txt 对a.txt中,以逗号为分隔符分域,先对第0域排序,按第3域排序,结果存储在b.txt中。
磁盘/文件操作命令
1.cd 目录名: 进入指定目录;
2.mkdir [-p]目录名 ------新建目录
-p如果目录不存会新建一个,如mkdir -p dirA/dirB,如果dirA不存在,会新建dirA
3.vi 文件名:------新建文件
4.rm -rf 目录/文件名 -----删除指定目录或文件
5.cp [-r/-f]source目录/文件名 dest目录 -----拷贝指定目录或文件
常用参数:
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制
范例:
将档案 aaa 复制(已存在),并命名为 bbb:
cp aaa bbb
将所有的C语言程序拷贝至 Finished 子目录中:
cp *.c Finished
6.mv source目录/文件 dest目录 -----将源目录或文件移动至指定目录中
9.diff source 文件 dest文件 ------比较两个文件的差异
10.tar zcfv dirname.tar.gz dirname/ ------将dirname文件一夹下的所有文件打包
11.sz dirname.tar.gz -------将打包好的文件下载到本地磁盘,对于文件夹只能先打包后下载
12.sz -be filename -------将指定文件下载到本地磁盘
13.rz -be --------将指定文件上传到工作机
14.scp -r 源目录/文件名 目标机器:路径 -------两台机器之间的拷贝
如:scp -r * work@bb-testing-ibase40.vm.baidu.com:zhangdan03 编译机上,将所有文件拷贝到测试机zhangdan03目录下
系统操作命令
1.mpstat -P ALL 1 -------查看CPU每个核的状态
2.pgrep test
top -p 16382 查看cpu占用率
3.du -u 查看虚拟机空间占用大小
4.pstree work 查看系统当前运行的进程
其它
1.当secureCRT不小心被置为全屏时,可以使用Alt+Enter取消全屏,或者Alt+V获得secureCRT菜单
2.用ctrl+C结束当前进程
常用shell命令
文件和目录操作命令
ls(显示文件和目录的信息)
ls 以默认方式显示当前目录文件列表
ls -a 显示所有文件包括隐藏文件
ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
ls -lh 显示文件的大小,以容易理解的格式印出文件大小 (例如 1K 234M 2G)
ls -lt 显示文件,按照修改时间排序
cd(改名目录)
cd dir 切换到当前目录下的dir目录
cd / 切换到根目录
cd .. 切换到到上一级目录
cd ../.. 切换到上二级目录
cd ~ 切换到用户目录,比如是root用户,则切换到/root下
cp(copy文件)
cp source target 将文件source复制为target
cp /root/source . 将/root下的文件source复制到当前目录
cp –av soure_dir target_dir 将整个目录复制,两目录完全一样
rm(删除文件或目录)
rm file 删除某一个文件
rm -f file 删除时候不进行提示。可以于r参数配合使用
rm -rf dir 删除当前目录下叫dir的整个目录
mv命令(将文件移动走,或者改名)
mv source target 将文件source更名为target
diff(比较文件内容)
diff dir1 dir2 比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出
diff -r dir1 dir2 比较目录1与目录2的所有文件及内容
diff file1 file2 比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的
comm file1 file2 比较文件,显示两个文件不相同的内容
ln命令(建立链接, 一般常用软链接)
ln source_path target_path 硬连接
ln -s source_path target_path 软连接
pwd(显示当前所在目录)
mkdir (创建目录)
mkdir AAA 在当前目录下创建一子目录,名为 AAA
rmdir(删除空的目录)
rmdir AAA : 将当前目录下,名为 AAA 的子目录删除
rmdir -p BBB/Test : 在当前目录下的 BBB 目录中,删除名为 Test 的子目录。若Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
chgrp (改变文件的所属的组)
chgrp users file1.txt :将文件 file1.txt 的所属组设为 users 组
chgrp -R bin * : 将当前目录下的所有文件与子目录(包括子目录下的文件)都设为 bin 组。
find(列出符合参数要求的文件)
find [path...] [expression] : 将符合 expression 的文件列出来。
-amin n : 在过去 n 分钟内被读取过的文件
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天被读取过的文件
-cmin n : 在过去 n 分钟内被修改过的文件
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天过修改过的文件
-name filename, -iname filename : 符合 filename 的文件。iname 会忽略大小写
-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。
find . -name "*.c" 将当前目录及其子目录下所有扩展名是 c 的文件列出来。
find . -cmin -20将当前目录及其子目录下所有最近 20 分钟内更新过的文件列出
locate(让使用者可以很快速的搜寻档案系统内是否有指定的档案)
locate [-q] [-d ] [--database=]
locate [-r ] [--regexp=]
locate [-qv] [-o ] [--output=]
locate [-Vh] [--version] [--help]
说明: locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找时就只需查询这个资料库,而不必实际深入档案系统之中了。在一般的 distribution 之中,资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用
# locate your_file_name 的型式就可以了。
参数: -n 至多显示n 个输出。
范例:
1. locate chdrv : 寻找所有叫 chdrv 的档案。
2. locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个。
文件处理
cat(显示文件内容)
more/less(均为分页显示命令)
more file
less -N file 显示内容, 并在前面标出行号
它们也能用于管道命令之后, 例如 ps aux | less
tail 命令(显示文件的最后几行)
tail -n 100 aaa.txt 显示文件aaa.txt文件的最后100行
tail -f x.txt 动态显示x.txt的末尾几行, 即日志滚动时自动刷新
vi命令
vi file 编辑文件file
vi 原基本使用及命令:
输入命令的方式为先按[ESC]键,然后输入:w(写入文件),:w!(不询问方式写入文件),:wq保存并退出,:q退出,q!不保存退出
常用vi -d a.txt b.txt 进行文件比较, [c 跳转到上一修改处,]c跳转到下一修改处
touch命令(创建一个空文件)
touch aaa.txt 创建一个空文件,文件名为aaa.txt
wc(显示文件信息)
例如wc -l *表示查看文件的行数
chmod(更改文件权限)
chown(更改文件所有者)
head(显示文件头部内容)
head [-n|c num] filename 没有参数时,显示最前10行
参数: -n num 显示最前num行
-c num显示最前num 字符
cut (显示每行开头的字符)
cut -cnum1-num2 filename 显示每行从开头算起第 num1 到 num2 的字符。
cut -c0-6 example 显示每行开头算起前 6 个字符。
sleep (将当前动作延迟一段时间)
格式 : sleep [--help] [--version] number[smhd]
说明 : sleep 可以用来将当前动作延迟一段时间
参数 : --help : 显示辅助讯息
--version : 显示版本编号
number : 时间长度,后面可接 s、m、h 或 d, 其中 s 为秒,m 为 分钟,h 为小时,d 为日数
范例 :
- 显示当前时间后延迟 1 分钟,之后再次显示时间 : date;sleep 1m;date
expr(字符串处理命令)
格式: expr [option] expresion
范例:
- 求字串长度: expr length "this is a test"
14
- 数字运算 : expr 14 +[-*/%] 9
23[5、126、1、5]
- 从位置处抓取字串 : expr substr "this is a test" 3 5
is is
- 字符串首次出现的索引值 : expr index "testforthegame" e
- 字串真实重现 : expr quote thisisatestformela
thisisatestformela
split (将一个档案分割成数个)
格式:split [OPTION] [INPUT [PREFIX]]
说明:将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为PREFIXaa, PREFIXab...;PREFIX 预设值为 `x。若没有 INPUT 档或为 `-,则从标准输入读进资料。
参数:� -b, --bytes=SIZE
-b, --bytes=SIZE SIZE 值为每一输出档案的大小,单位为 byte。
-C, --line-bytes=SIZE 每一输出档中,单行的最大 byte 数。
-l, --lines=NUMBER NUMBER 值为每一输出档的列数大小。
-NUMBER 与 -l NUMBER 相同。
--verbose 于每个输出档被开启前,列印出侦错资讯到标准错误输出。
--help 显示辅助资讯然后离开。
--version 列出版本资讯然后离开。
SIZE 可加入单位: b 代表 512, k 代表 1K, m 代表 1 Meg。
范例:
1. PostgresSQL 大型资料库备份与回存:
因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split进行档案分割。
% pg_dump dbname | split -b 1m - filename.dump.
重新载入
% createdb dbname
% cat filename.dump.* | pgsql dbname
% cat filename.dump.* | pgsql dbname
系统相关
date(显示时间)
df(显示磁盘使用情况)
可加-h参数, 显示human-readable的信息; -i参数, 表示显示inode使用情况
free(显示内存使用情况)
du(显示文件或者目录的大小)
一般可使用 du -hs *的形式
top(显示系统状态, 例如cpu, 进程等情况)
vmstat(显示系统状态)
可加-n参数动态刷新, 进行性能测试时可以使用类似的有iostat, 可以显示io的使用状态; 外部命令sar, 可以显示之前一段时间的系统状态
su(切换用户)
ps (显示当前的进程)
常用ps aux | grep "进程名"
pstree(显示树状进程使用)
常用pstree work, 查看work帐户的进程使用
kill(杀死进程: kill -9 进程号)
更多地, 我们使用killall -9 进程名称
netstat(查看网络使用情况)
常用netstat -nltp查看端口占用情况
ssh(登陆到其他机器)
需要输入密码, 也可以先建立信任关系: http://www.oklinux.cn/html/network/ser/20080907/60717.html
或者使用批量信任关系工具: http://wiki.babel.baidu.com/twiki/bin/view/Com/Test/Pf_smartssh
或者在安装了shell-lib的机器上使用"go"命令: http://wiki.babel.baidu.com/twiki/bin/view/Com/Test/ShellLib库使用规范#go使用方法
scp(机器之间拷贝文件)
-r参数表示是文件夹
常用: 从其他机器拷贝到本地机器: scp [-r] 远程机器名:远程路径名 本地路径
从本地机器推送到其他机器: scp [-r] 本地路径 远程机器名:远程路径名
和ssh相同, 需要建立信任关系, 或者在安装了shell-lib的机器上使用pscp命令: http://wiki.babel.baidu.com/twiki/bin/view/Com/Test/ShellLib库使用规范#pscp使用方法
wget(ftp下载)
wget常用的方式为wget ftp://xxxx
wget有很多有效的参数, 常用的包括-r获取文件夹, -nH不建立hostname的文件夹, --cut-dirs=数字表示对父目录进行截断(否则可能下载到的是home/work/xxx这样的一个若干层级目录), -P下载的本地位置, -q不显示debug信息等, 具体的可以man wget获得
man、info (线手册命令)
格式:man command 范例:man cat [info cat]
alias (别名)
alias aaa=“ls –l” 设置“ls –l”的别名为 aaa
unalias (消别名)
unalias aaa 取消aaa的别名
passwd (更改使用者的密码)
passwd -l xxx 锁定账户: xxx ,使他不能登录 passwd -u lijiangong 解除锁定: passwd -x10 -n3 -w2 -i5 lijiangong 设定密码有效期: 即:3天之后才能更改密码、10天之后必须更改密码、第八天提醒修改密码、 密码失效5天之后账户失效
who(显示有哪些用户登录到系统中)
who - [husfV] [user] : 显示有哪些用户登录到系统中,显示的信息包含用户ID,使用的终端,上线时间,呆滞时间,CPU使用量,动作等等。
whoami(显示当前用户是谁)
at(指定在某个特定时刻执行某个程序或指令)
格式: at TIME command 说明 : 指定在 TIME 这个特定时刻执行某个程序或指令,TIME 的格式 是 HH:MM,其中的 HH 为小时,MM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点)等口语词。 如果想要指定超过一天内的时间,则可以用 MMDDYY 或者 MM/DD/YY 的格式, 其中 MM 是月份,DD 是第几日,YY是指年份。另外,使用者甚至也可以使用是 now + 时间间隔来弹性指定时间,其中的时间间隔可以是 minutes, hours,days, weeks� 另外,使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后,at会进入交谈模式并要求输入指令或程式,当你输入完后按下 ctrl+D 即可完 成所有动作。 范例 :
- 三天后的下午 5 点钟执行 /bin/ls : at 5pm + 3 days /bin/ls
- 三个星期后的下午 5 点执行 /bin/ls : at 5pm + 2 weeks /bin/ls
- 明天的 17:20 执行 /bin/date : at 17:20 tomorrow /bin/date
- 1999 年的最后一天的最后一分钟印出 hello world ! at 23:59 12/31/1999 hello world !
crontab (在固定时间或固定间隔执行)
格式 : crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } cmd 说明 : crontab 是用来在固定时间或固定间隔执行程序。 -u user 设定指定user 的时间表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user ,就是表示设定自己的时间表。 参数 : -e : 执行文字编辑器来设定时程表,默认的文字编辑器是 VI -r : 删除当前的时程表 -l : 列出当前的时程表 时程表的格式如下 : f1 f2 f3 f4 f5 program 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天(0~6,0为星期天)。cmd 表示要执行的程序。 当 f1 为 * 时表示每分钟都要执行,f2 为 * 时表示每小时都要执行,其余类推; 当 f1 为 a-b 时,表示从第 a 分钟到第 b 分钟这段时间内要执行,f2为 a-b 时,表示从第 a 到第 b小时都要执行,其余类推; 当 f1 为 */n 时,表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示,每n 小时个时间间隔执行一次,其余类推; 当 f1 为 a, b, c,... 时,表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示,第 a, b, c...个小时要执行,其余类推; 使用者也可以将所有的设定先存放在文件 file 中,用 crontab file 的方式来设定时间表。 范例 :
- 每月每天每小时的第 0 分钟执行一次 /bin/ls :
- * * * * /bin/ls
2. 在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :
- /20 6-12 * 12 * /usr/bin/backup
- 周一到周五每天下午 5:00 执行一次 /bin/ls :
- 17 * * 1-5 /bin/ls
- 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
- 0-23/2 * * * echo "haha"
其他命令
if 条件判断
1 字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 = str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2 数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
3 文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
3 复杂逻辑判断
-a 与
-o 或
! 非
hostname
hostname命令可以获取当前测试机器的名称, 远程获得其他机器的名称, 可以使用ssh 机器名 "hostname"
hostname -i可以获得当前测试机的ip地址, 远程获得, 和上面类似
nohup(在后台启动程序)
如果我们直接运行命令, 它是在前台执行的, 如果在末尾加上&, 则程序会到后台执行. 但是如果我们的secureCRT断开了连接, 这个进程还是会挂掉.
如果使用nohup 命令名称 &这样的形式, 则断开连接, 进程也会依旧执行, 同时, 打印的内容会存入nohup.out文件中
screen(在后台启动程序)
更加强大, 参见http://www.ibm.com/developerworks/cn/linux/l-cn-screen/