linux常用命令和shell编程



shell编程

#!/bin/bash 指定了shell脚本的执行shell

使用bash命令来运行脚本时,-v-x选项可以显示输入行和命令。

1.变量

变量名区分大小写,无须声明,可以直接赋值;引用变量需要在变量前面加$符号。注意:直接赋值时变量和=之间不带空格,如'var=100'。

如果需要用变量和其他字符组成新的字符串,可以把变量用{}括起来。变量后还可以加一个参数表示如果变量没有初始化就使用的值.形式是{var:-val}

对于未赋值的变量,bash会以空值对待,也可以使用unset命令来清除给变量赋的值。

数组形式为:变量名[下标]=值,或者 变量名={多个值}。下标可以用字符。

declaretypeset可以使用+/-r选项来设置/撤销变量的只读属性。

export可以把变量输出到环境中,以使其他程序也可以使用。相反,使用local声明的变量是局部变量,仅供在当前函数内使用。

特定shell变量:$0当前命令对应的可执行文件名;$1-$9命令参数;$#参数个数;$*所有参数;$@所有参数,并且每个参数以'括住;$$当前进程ID号;$?最后的命令的退出状态,如果正常退出则返回0,反之为非0值。

2.特有命令

,永远返回true,可用于while循环作为条件

shift 可以后跟一个数字n来左移n个参数

read 从输入设备读入变量值,后必须跟一个变量名

echo 显示信息

eval 它把参数连接成一个命令让shell执行

exec 执行命令

return/break/continue 在函数和循环中使用

3.比较语句

使用test expression[ expression ]形式. 注意,在bash语法中,if语句中应该使用[[ ]]进行判断。

字符串比较:比较两个字符串内容是否相同可以直接使用=!=操作符。选项-n用于判断字符串是否非空。选项-z用于判断字符串是否为空。使用=~来判断正则匹配,比如[ "${line}" =~ ".*${keywd}.*" ]来判断line中是否包含keywd。注意:对字符串进行判断时,一定要使用""括住变量,而不能直接判断变量,否则会得到错误的结果。例如$nu; 则[ -n $nu ]为真;[ -n "$nu" ]为假。

数值比较:使用选项-eq,-ne,-lt,-gt,-le,-ge来判断两个数值之间的大小。

文件操作:选项-d,-f,-L分别用于判断对象类型是否是目录,文件和符号链接。选项-r,-w,-x分别用于判断文件属性是否是可读,可写,可执行。选项-e用来判断文件是否存在,选项-s用来判断文件长度是否大于零。选项-n用来判断第一个文件是否比第二个文件新(根据修改日期)。

逻辑操作:使用选项-a,-o,!来表示与,或,非的逻辑操作。

4.算术计算语句

使用let expression(( expression ))形式

可以在表达式里使用多种操作符,+,-,*,/,%,<=,>=,<,>,==,!=,=

注:返回的是一个变量,故赋值前要加$符号,使用类似以下方式赋值:

var=100
var=$(($var+1))

5.控制语句

for循环语法格式如下:

for var in list

do

...

done

以上语句对list列表中以空格等分隔的对象实行遍历。

while循环语法格式如下:

while condition

do

...

done

当条件为真时循环执行。

until循环语法格式如下:

until condition

do

...

done

当条件为假时循环执行。

if语句语法如下:

if cond1

then

...

elif cond2

then

...

else

...

fi

case语句语法如下:

case string in

str1|str2)

...

;;

str3)

...

;;

*)

...

;;

esac

select语句语法如下:

select name in list

do

...  #一般在这里使用case

done

6.函数

函数定义的基本格式如下:

function name

{

...

}

函数调用的形式类似于普通的命令,也可以加参数。并且函数可以采用递归形式。

linux基本命令

1.命令语法

" " 双引号表示整个引号内的内容是一个完整字符串,如果字符串中包含环境变量,则会在执行时被替换成环境变量对应的内容

' ' 单引号也表示整个引号内的内容是一个完整字符串,但不会对环境变量进行替换

` ` 反引号括起来的内容被作为命令行处理,执行的结果用来代替整个反引号所括起来的内容.也可以使用$(cmd)形式

用来在命令行中分隔多个命令,多个命令会顺序执行,但前一个命令是否成功执行并不会影响后一个命令的执行

&& 也可以分隔多个命令,单只有前一个命令成功执行才会再执行下一个命令

输出重定向字符

输入重定向字符

>> 重定向追加字符

管道符,将一个命令的输出传送给另一个命令作为输入

位于命令行的末尾,表示后台处理,返回的是命令的PID

2.帮助命令

man 显示详细帮助。man查看的文档保存在usr/share/man目录下的各个子目录中以.gz格式存储。此外,还可以在usr/share/docusr/doc目录下找到大量的FAQsHow-To操作指南。也可以在命令后加--help选项来实现相同的功能.

whereis 用于查找命令,帮助信息等所在的位置。

info 用于显示命令相关的信息文档。已经被man代替,不推荐。

3.系统状态命令

查看当前使用系统的用户,也等同于who命令

date 显示当前日期和时间,例如date +'%Y-%m-%d %H:%M:%S'可以指定格式显示日期时间。注意:-d参数可以得到其他时间,例如:date -d "5 minute ago" +"%m-%d %H:%M",可以得到5分钟之前的时间,并按照指定格式输出。

cal 显示日历

env 显示所以环境变量,也多用于自动执行文件,类似于: #!/usr/bin/env ruby

4.通用命令

grep 它能使用正则表达式搜索文本并把匹配的行显示出来。选项-v只显示不匹配的行,-i匹配时忽略大小写。

sort 排序

uniq 去除重复,选项-d是只显示重复项

tee 把输出同时输出到标准输出和文件中

expr 进行数学运算

alias 为字符串或命令起别名,unalias禁止一个别名

history 显示已输入过的命令,使用!加命令号码可以重新执行该命令

times 后加命令可以显示该命令执行所用的时间

type 查询命令类型,是否是shell内建命令.

clear 清屏

export 导出变量,如添加新路径,但重启后就会恢复修改。

5.文件和目录操作命令

cd 切换目录。cd-返回上一个目录,cd~进入用户的home目录。

ls 目录列表。选项-a显示全部文件,-l显示长信息,-R递归列出所有子目录的内容,--sort=time按更新时间降序排序。注:alias ll='ls -l --color=tty'

mkdir 建立目录。

rmdir 删除目录。

rm 删除文件。选项-f强制删除,-i删除前给出提示信息,-r|-R递归删除所有子目录和文件。

cp 复制。选项-r|-R递归复制所有子目录和文件,-u不覆盖更新的文件,-b为被覆盖的文件创建备份(默认以~为后缀)。

mv 移动或重命名文件。

ln 建立连接文件.

chmod 改变文件的存取权限。a为所有用户,u为所有者,g为组用户,o为其他用户,对这几种范围可以使用+,-,=来设置r,w,x属性。-R来做递归修改。

umask 改变文件的默认存取权限

chown 改变文件的属主

chgrp 改变文件所属的组

touch 更新文件的时间标志或创建新文件

pwd 显示当前工作路径

cat 显示文件内容,选项-n显示行号,-s显示时合并多个空行为一个空行,-Ttab符显示为^I

more 按页显示文件内容,中途可以按q提前退出

less 按页显示文件内容,可以使用翻页键来前后翻页

wc 统计文件中的行数,单词数和字符数

find 查找文件。选项-name后可跟文件名的匹配模式,-iname则文件名忽略大小写,-exec cmd '{}' ';'使用每一个匹配的文件名作为参数执行指定的命令。其他常用参数:-group -user -nouser -empty -size +/-512k -amin -n -atime -n -mmin-n -mtime -n

locate 定位路径。支持多个搜索字符串和正则表达式匹配。

file 判断可执行文件的具体类型

strings 查找一个二进制文件中的可显示字符串

6.用户帐号管理命令

useradd 添加用户

passwd 为用户制定密码

userdel 删除用户,选项-r会删除该用户账户拥有的所有目录和文件

usermod 更改用户的设置

groupadd 增加一个用户组

groupdel 删除一个用户组

groupmod 更改一个用户组的设置

7.进程管理命令

nice 改变指定进程的优先级,优先级默认为10,值越小优先级越高

ps 对当前的进程状态进行快照并显示.

top 动态显示进程状态,选项-d指定刷新间隔,单位为秒

kill 杀死指定PID的对应进程,选项-9/-KILL是强行结束,-1/-HUP是重新运行,不加参数默认是-15/-TERM

8.磁盘和设备管理命令

df 检查文件系统的磁盘空间占用情况,选项-a显示所有文件系统

du 显示指定目录的磁盘空间的使用情况,选项-s只显示总数,-a递归显示所有文件和子目录,默认是只递归显示子目录

mount 加载设备,选项-t type dev dir用来加载设备的文件系统到指定的目录,type指定分区类型,vfatFAT32FAT16,ntfsNTFS分区,-ocodepage=936,iocharset=cp936指定用中文显示文件名和目录。

例如:

加载U盘:mount /dev/sda1 /usb -ocodepage=936,iocharset=cp936

加载软盘:mount /dev/df0 /mnt/floppy

加载光盘:mount /dev/cdrom /mnt/cdrom

如果需要开机时自动加载,需要把以上命令的参数加入etc/fstab

umount 卸载指定目录对应的文件系统

9.网络管理命令

nslookup 将域名解析为IP地址

ifcongfig 网络接口配置,可以配置IP地址,子网掩码等

route 路由配置

netstat 显示网络状态信息

ping ping命令,选项-c后跟测试次数

traceroute 跟踪路由,得到数据包从源主机到目标地址的路由信息

service 启动某个守护进程

arp 地址解析协议命令,选项-a可以显示当前访问的所有远程主机名,IP地址和硬件地址

telnet 远程登陆命令

ftp ftp命令

10.常用应用程序

vi 有三种模式:命令模式,文本输入模式,命令提示行交互模式。常用的编辑指令有:wq存盘退出,w FileName把缓冲区内容写入指定文件中,q!不存盘直接退出,n,mw FileNamenm行写入指定文件中,n,mw>> Filenamenm行追加到指定文件中。

emacs linux平台另一个流行文本编辑器

awk 可以对匹配模式的行进行指定的操作.命令的格式为awk -F [fild_separator] 'pattern {action} pattern {action}'input_file

sed 也是一个文本过滤工具.

tar 命令的常用选项有:c用于创建新的档案文件,t查看档案文件的内容,x从档案文件中释放文件,v显示命令处理的文件信息,f使用档案文件或设备,z使用gzip进行过滤处理。

使用举例:

tar cf my.tar /home /home目录下所有的文件和子目录打包成my.tar文件

tar tvf my.tar 查看my.tar文件的内容

tar xvf root/my.tar /home root目录下的my.tar文件展开到/home目录下

tar cfz my.tar.gz /home 使用gzip压缩的打包文件(也常用.tgz.tar.z作为扩展名)

tar -cfz my.tar.gz --exlude myfile/log myfile  把当前目录下的myfile文件或文件夹压缩成my.tar.gz文件,而且,不包含myfile文件中的log文件或目录

tar tvfz my.tar.gz 查看my.tar.gz文件的内容

tar xvfz my.tar.gz /home 解压缩gzip的打包文件

gzip 该命令是linux下经常使用的压缩和解压缩工具,压缩后文件的扩展名默认为.gz。常用的选项有:-d解压缩(默认功能是进行文件压缩)--fast最快压缩,--best最好压缩。gunzip即对应gzip -d的命令,用来解压缩文件。

unzip 命令主要用于解压Windows平台下winzip压缩的文档,扩展名即为.zip。选项-P< >输入密码。

zip 命令则用于以winzip格式压缩多个文件。

uncompress 命令用于解压缩.Z格式的文档。

rpm 命令可以实现RPM软件包的安装、更新、卸载和检验等操作。常用的选项有:-i安装,-h安装时输出hash标记,-v显示附加信息,-q查询安装包的是否安装和版本信息,-e卸载安装包,-U升级安装。

举例如下:

rpm -ivh usermin.rpm 安装RPM软件包

rpm -q webmin 查询

rpm -e webmin 卸载RPM安装包

rpm -Uvh usermin.rpm 升级安装

apt 可以在制定软件包名称后自动下载更新的版本并解压缩,编译和安装。

yum 同上,可以自动更新程序的安装和配置

11.开放源代码的编译使用

readmeinstall文档中一般都介绍了编译方法和安装步骤,列出了程序正常工作需要的其他程序、编译选项,以及默认安装位置等。一般步骤是:

./configure

make

make install

注意:在这种方式下,一般前两步用户权限就可以,而第三步需要root权限,否则无法写入/usr/bin等目录。解决办法是执行configure命令时添加--prefix=/home/my/tool --exec-prefix=/home/my/tool两个参数来指定目录。

Red Hat Linux的图形界面

X Windows系统由许多部分组成,包括X服务器,X客户端,X协议,X开发库和X工具箱.和用户实现交互的是X客户端,它借助于X协议访问X服务器.在一个系统中可以拥有多个X客户端,但是只能运行一个X服务器.

Windows操作系统除98外操作系统和GUI界面是紧密耦合的,Linux中的字符界面和GUI界面是完全独立的.

/etc/inittab文件里修改默认启动级别为5可以更改默认启动的用户界面.

X Windows在即插即用方面做了很大改进,可以自动识别需要mount的设备.

两种桌面风格:GNOMEKDE

常用应用程序:文件管理器Nautilus,运行对话框,搜索文件,运行终端,记事本gedit,系统监视器,包管理器,服务管理器,浏览器Firefox,办公软件OpenOffice包括Writer,Calc,Impress,Wine模拟器模拟windows系统程序.

RedHatshell界面中,用蓝色表示文件夹,青色表示链接文件,白色表示文件。

★文件布局详解

一、根目录详解

/usr 操作系统的命令,库和文档

/etc 系统配置文件,不包含可执行文件

/var 动态信息,如日志,临时文件,缓冲文件

/home 用户目录

/root root用户的主目录

/lib 库文件

/bin 标准命令文件

/sbin 系统管理命令

/opt 应用程序

/dev 设备文件

/mnt 挂接临时映射的文件系统

/tmp 临时文件夹,随时可清空

/boot 内核和引导加载器

/proc 用内存虚拟的文件系统,存放进程和系统信息

二、部分子目录详解

1./usr目录的子目录

bin 操作系统的命令

sbin 系统管理命令

local 用户自己新安装的软件

X11R6 X Windows相关的内容

include C开发工具需要的头文件

share 共享目录,如帮助手册和技术文档

2./var目录的子目录

log 日志文件

spool 缓冲文件

local 安装程序产生的中间数据

run 系统运行期间的有关系统信息

tmp 临时文件夹

3./dev目录的子目录

hd[s][d] sa,b,c,d等表示第nIDE硬盘驱动设备,d1,2,3,4,5等表示第n个分区

sd[s][d] sa,b,c,d等表示第nSCSI硬盘驱动设备,d1,2,3,4,5等表示第n个分区

ttyS[d] d1,2,3,4表示COM1~COM4设备

lp0 并口设备

null 空设备,用于屏蔽输出消息或者删除不需要的文件

4./proc目录的内容

version 保存了Linux核,gcc等版本号

cpuinfo CPU信息

meminfo 内存状态的信息

stat 这个文件包含的信息有CPU利用率,磁盘,内存页,内存对换,全部中断,接触开关以及上次自举时间(自197011日起的秒数)

uptime 自从上次系统自举以来的秒数,以及其中有多少秒处于空闲

loadavg 给出以几个不同的时间间隔计算的系统平均负载

devices 字符和块设备的主设备号和设备名称

modules 可加载内核模块的信息

mounts 给出当前系统所安装的文件系统信息

dma DMA通道和驱动程序名称

pci 给出PCI设备的信息

ioports 设备的I/O端口范围

kcore 物理内存以core文件格式保存的二进制格式文件

filesystems 可供使用的文件系统类型

interrupts 中断号和发生中断次数

数字n 该文件夹存储了pid和数字n相同的应用进程的信息,包括该应用进程的可执行文件的所在路径都可以在这里查到

5.Bash配置:

~/.bash_profile 是交互式、login方式进入 bash运行的

~/.bashrc 是交互式 non-login方式进入 bash运行的

通常二者设置大致相同,所以通常前者会调用后者。

使用source命令可以不重启而令配置文件立刻生效

source FileName作用:在当前bash环境下读取并执行FileName中的命令。source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

6.重要配置文件

/etc/inittab 用来保存默认启动的运行级别,设置为5可直接进入X窗口。

/etc/fstab 用来存放文件系统的静态信息的文件,自动挂载文件系统应该修改此文件。

/etc/resolv.conf 编辑DNS地址

/etc/sysconfig/network 修改主机名

/etc/sysconfig/network-scripts/ifcfg-eth0编辑IP地址,掩码和网关。可以使用netconfig命令来在文本图形界面里设置该文件和DNS地址的文件。

/etc/profile 所有用户的配置文件,可以把export语句加入这里来为所有用户添加环境变量。

7.重要的环境变量

PATH 可执行文件搜索路径,一般用export PATH=$PATH:/newpath来添加新路径

LANG 显示语言。LANG=UTF-8可以正常显示英文。在X窗口的终端里可以设置LANG=zh_CN.UTF-8显示中文。在纯控制台下是不可以简单通过设置LANG来显示中文的。

VMWare网络配置

1.桥接方式(bridge) :

默认使用vmnet0

将虚拟机的ip设置与主机同网段未使用ip,其余与主机相同:

ip地址与主机同段相异,子网掩码,网管,DNS服务器与主机相同。

实现虚拟机<--->主机虚拟机<---->互联网通信。

2.共享方式(nat) :

默认使用vmnet8

将虚拟机设置成使用DHCP方式上网,windows下选择"自动获取ip",linux下开启DHCP服务即可。

3.私有方式(host-only):

默认使用vmnet1

将虚拟机ip设置与vmnet1同网段,gateway设置成vmnet1ip,其余设置与vmnet1相同,DNS设置与主机相同

这样就实现了虚拟机<--->主机 通信,但是虚拟机<--->互联网 仍无法通信

★工作中常用的命令详解

1.从其他机器拷贝文件夹

格式: scp -r 文件夹名 用户名@机器名:/路径

范例: scp -r searchwork@zjm-testing-ps23.zjm.baidu.com:/home/work/

格式:wget <url>

范例:wgetftp://zjm-testing-ps23.zjm.baidu.com//home/work/search

说明:下载远程ftphttp服务器的文件到本地当前目录

2.查看哪个程序在用特定端口

格式: netstat -eap | grep 端口号

范例: netstat -eap | grep 8080

注,有时间会改方式无法看到某些端口号,则使用如下命令:

netstat -na | grep 端口号

3.实时监控日志文件内容

格式: tail -f 日志文件名

范例: tail -f ui.log | grep 'hello'

说明:这显示ui.log文件的最后十行中含有hello字符串的行。tail命令继续显示添加到ui.log文件中的并且含hello字符串的行。显示会一直继续,直到您按下Ctrl-C按键顺序来停止

4.查看指定用户拥有的进程

格式: pstree 用户id

范例: pstree work

说明:显示work用户正在运行的各进程之间的继承关系,以树状结构方式列出

5.查看磁盘空间使用情况

格式: df -h

6.查找某文件中出现指定字符串的行

格式: grep 指定字符串 文件名

范例: grep 电视剧夏天的味道 ui.log

说明找出日志文件ui.log中包含“电视剧夏天的味道”的行

范例:grep --include *.{c,cpp} --exclude ‘common.c’ -r “function”./*

说明:在当前目录下循环查找子目录里,所有ccpp文件,且非common.c文件中,包含function字符串的文件。

进阶:-A n显示匹配行和其之后的n行,-B显示匹配行和之后的n行,-C显示匹配行和以其为中心的n行。

7.查看内存使用情况

格式: free

8.查看本机系统内核

格式: uname -a

9.查看当前路径下的文件/文件夹大小

格式: du -sh 文件名/文件夹名

10.变更为其它使用者的身份

格式: su 使用者帐号

范例: su work

11.远程登陆

格式: ssh 用户名@机器名

范例: ssh rd@build01

12.不挂断地运行命令(即使关闭终端连接)

格式: nohup command &

范例: nohup ./build_index.sh -d ../newdbi/ &

高级:使用screen命令可以在新窗口运行shell,并且在从远程终端退出后,仍然可以在保持窗口的状态,再以后时再次进入。

格式: screen #进入窗口(新建一个窗口)

格式: screen -list #显示当前后台(Detached)所有的窗口,格式为<session id>.<session name>例如:29334.screensession

格式: screen -r [session id]

进入窗口后:

使用exit命令退出当前窗口;

使用Ctrl+A后,输入?显示帮助,帮助中命令均要使用Ctrl+A后再去输入

使用Ctrl+A后,输入d将当前窗口Detached,回到原来的环境

使用Ctrl+A后,输入a将执行Ctrl+A的组合键功能

修改配置文件(位于~/.screenrc)进行功能加强:

#启动时不显示欢迎屏幕
startup_message off
term linux
#  定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。
#escape ^Zz
##设置屏幕缓冲区为4096行
defscrollback 4096
#设置状态栏
hardstatus on
hardstatus alwayslastline
shelltitle "$|bash"
hardstatus string '%{= kG}[ %{G}%c:%s %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][ %{C}(F1)New (F2)Rename (F3)Monitor (F4)Slience %{g}][%{kB} %d/%m %{w}%c %{g}]'
##shutdown the noise
vbell off
## w to show the window list
bind w windowlist -b
bind ^w windowlist -b
##初始化显示4个窗口,默认选择窗口0
screen
screen
screen
screen
select 0
#进行快捷键的绑定:k1-k9表示功能键F1-F9,F1、F2表示功能键F11、F12
bindkey -k k1 screen
bindkey -k k2 title
bindkey -k k3 monitor
bindkey -k k4 silence
bindkey -k k5 colon
#bindkey -k k6 split
#bindkey -k k; focus
bindkey -k k7 focus
#bindkey -k k8 only
bindkey -k k9 detach
bindkey -k F1 prev
bindkey -k F2 next
attrcolor u "-u B"
sessionname screensession
autodetach on

13.查看文件的行数

格式: wc -l 文件名

范例: wc -l as.conf

14.比较两个文件的不同之处

格式: diff 文件1文件2

-u 以统一的格式来展示。输出格式如下:@@ -127,10 +127,6 @@表示此段显示前一个文件(---)的127行开始的10行,后一个文件(+++)的127行开始的6行,在展示时,如果此行前面为-号表示只在前一个文件(---)中出现,前面为+号表示只在后一个文件(+++)中出现,前面为空格表示在两个文件中都出现。

-b 忽略空格造成的不同。

-B 忽略空行造成的不同。

-I:忽略大小写的变化。

-y 以并列的方式显示文件的异同之处。

-W<宽度在使用-y参数时,指定栏宽。

-u 以合并的方式来显示文件内容的不同。

-c 显示全部内容,并标出不同之处。

-q 只显示不同的文件名

diff -ruN <文件名> <文件名> > <补丁文件名>

注:vimdiff命令请参考vimsplit命令。

15.杀死进程

格式: killall -9 进程名

范例: killall -9 bs.se

16.SecureCRT中把文件传给本机的‘我的文档’目录下

格式: sz 文件名   #注:本机的保存位置,是由SecureCRT的配置项决定的

范例: sz 1.txt

17.把本机文件传给SecureCRT中当前机器的当前目录

格式: rz -be

18.Vi文本编辑器

光标移至屏幕顶行

nG 光标移至第n行首,等同于::n;移到文件头使用1G,移到文件尾使用G

n+ 光标下移n

n- 光标上移n

nz 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

x/X 删除光标后/光标前的字符(前面可加数字表示删除的字符个数)

dd 剪切行(前面可加数字表示删除的行数,前面加字母表示复制到哪个缓冲区)

yy 复制行(前面可加数字表示复制的行数,前面加字母表示复制到哪个缓冲区)

yw 复制一个word

贴在游标后(整行复制则是下一行,前面加字母表示从哪个缓冲区复制)

贴在游标前(整行复制则是上一行,前面加字母表示从哪个缓冲区复制)

撤销命令


输入:后可以使用的命令有:

split [file] 水平分割,不接文件则新窗口显示当前文件。Ctrl+W,然后按方向键可以切换窗口。

vsplit [file] 垂直分割

diffsplit [file] 比较并水平分割

vertical diffsplit [file] 比较并垂直分割

比较并分割的具体命令:1.将光标移动到蓝色区后,输入 do或者 dpdo表示将以对比的文件为标准来修改当前文件中光标所在的不同之处

dp表示以当前文件为标准,来修改对比文件中的差异之处。2.从一个差异移动到另一个差异的方法有: n[c移动到上一个差异,移动n此,如果要向下移动则使用: n]c

#,# copy/move # 把行号#,#之间的行区域复制/移动到行号#

保存

保存并退出

q! 直接退出不保存

/word 查找

#,#s/old/new/g 替换命令,"#,#"表示两个行号之间的行区域,"old"指被替换的字符串,"new"替换成哪个字符串

%s/old/new/g 整篇替换命令

:set nu 显示行号

:set fileencoding 查看文件编码格式。

:set list/nolist 显示所有字符/隐藏不可见字符

set all 显示所有支持的vi环境变量,这些变量均可以使用set <env_var>来显示,使用set <env_var> <value>来设置新值


配置文件设置:(即~/.vimrc,默认不存在,自己新建即可)

colorscheme desert  "设置背景

syntax on   "自动语法高亮,也就是有多种颜色了

解决乱码(其实是GBK编码显示乱码问题)的一套方案(放于.vimrc的最顶端)

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set encoding=utf-8
set termencoding=cp936
language messages zh_CN.UTF-8 

自动将TAB符以4个空格替换,并且将文件中TAB符以4个空格长度表示(默认为8个),该设置只对ruby和rb类型的文件生效:

autocmd FileType rb,ruby set tabstop=4 | set shiftwidth=4 | set expandtab


view xxx.txt 等价于 vi -R xxx.txt : 以只读方式打开文件

19.察看文件类型

格式:file 文件名

20.文本抽取

awk命令专题总结

21.非交互性文本流编辑器

sed命令专题总结

22.将文件中的记录分类

格式:sort [选项]o输出文件名 [其他选项] +pos1+pos2输入文件名

参数:

     -c   测试文件是否已经分类

     -m   合并两个分类文件

     -u    删除所有复制行

     -o    存储sort结果的输出文件名

其它参数有:

     -b 使用域进行分类时,忽略第一个空格。

-n 指定分类是域上的数字分类。

-t 域分隔符;用非空格或t a b键分隔域。

-r 对分类次序或比较求逆。

+n n为域号。使用此域号开始分类。

n n为域号。在分类比较时忽略此域,一般与+ n一起使用。

pos1pos2 传递到mnm为域号,n为开始分类字符数;例如46意即以第5域分类,从第7个字符开始。

范例:sort -t: +2n video.txt 以“:”为域分割符,按第三个域数字分类video.txt

23.去除文本文件的重复行

格式:uniq [选项]输入文件 [输出文件]

参数:

     -u 只显示不重复行。

-d 只显示有重复数据行,每种重复行只显示其中一行

-c 打印每一重复行出现次数。

-f n为数字,前n个域被忽略。一些系统不识别- f选项,这时替代使用- n

范例:uniq n2 parts.txt

-s n为数字,前n个字符被忽略。

-w n为数字,只比较n个字符

24.连接两个文本文件

格式:join [选项]文件1文件2

说明:join用来将来自两个文本文件的行连在一起,两个输入文件必须已经分过类,每个文件里都有一些元素与另一个文件相关,由于这种关系,join将两个文件连在一起。

参数:

     -an   n为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。

     -o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个nm必须用逗号分隔,如1 . 32 .1

-j n m n为文件号,m为域号。使用其他域做连接域。

-t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t

范例: join o 1.1,2.2 names.txttown.txt

25.从文本文件中剪切列或域

格式:cut [选项文件名

参数:

     -c list 指定剪切字符数。

-f field 指定剪切域数。

-d 指定与空格和tab键不同的域分隔符。

- c用来指定剪切范围,如下所示:

- c 15-7 剪切第1个字符,然后是第5到第7个字符。

-f 格式与- c相同。

-f 1剪切第1域,第5域。

范例: cut d: -f3 pers

26.将两个文本文件粘贴在一起

格式:paste [options] file1 file2

说明:粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本,除非指定-d选项,它将成为域分隔符。

参数:

       -d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @

-s 将每个文件合并成行而不是按行粘贴。

范例: paste d: pas2 pas1 用冒号作分割符

27.将大文件进行分割

格式:split [选项]输入文件名 输出文件名前缀

参数:-a 指定后缀的长度(缺省为2

      -b 每个输出文件的字节大小

      -l 每个输出文件的行数

      -d 后缀以数字形式排序

范例:split l 1000 bigfile.txtoutfile

进阶:csplit可以支持更多的筛选功能,例如:csplitserver.log /SERVER/ -n 2 -s {*} -f server -b “%02d.log”这个命令的意思是把server.log文件以包含/SERVER/的行进行分离为文件server01.logserver02.log等,并且{*}表示全部都分割。

29.查找文件

格式:find 查找路径 -iname/-name字符串

范例:find . -iname "*hello*" 2>/dev/null

说明:在当前路径下找到文件名包含hello字符串(不区分大小写)的文件。后面的输出表示不显示Permission denied的行。

范例:find .  name.txtorname.pdf

说明:查找以txt或者pdf结尾的文件

范例:find . -type f -maxdepth 1 -user work -exec cp {}{}.bak \;

说明:把当前目录下的文件全部做一个以.bak结尾的备份

进阶: -not否定条件,-and交集条件,-path限定路径,-mindepth限定最小路径深度,-maxdepth限定最大路径深度,-type指定搜索的文件类型(f/l/d/c/b/s/p,-atime/mtime/ctime +/-n文件在n天之前/或之内,被访问过/内容被修改过/状态发生了变化,-amin/mmin/cmin +/-n同前,只是单位为分钟,-size +/-n(b/c/w/k/M/G)文件的体积大于/小于n单位,-perm指定权限,-user指定用户

30.压缩包操作

打包:tar  cvf   文件名.tar  文件

解包:tar  xvf  文件名.tar

打压缩包:tar zcvf  文件名.tar.gz 文件

解压缩包: tar zxvf  文件名.tar.gz

zip压缩包:unzip文件名.zip

31.计算文件的md5

格式:md5sum 文件名 >保存md5码的文件名

范例:md5sum download.xml > download.xml.md5

范例:md5sum -c download.xml.md5

说明:校验md5是否正确

进阶:计算和校验sha1码的命令是sha1sum,用法类似。

32.向服务器发送POSTGET请求

格式:curl -d POST参数 url地址

范例:curl -d 'username=xx&passwd=mypd'http://www.baidu.com/login

范例:curl "http://www.baidu.com"   #get方式

范例:curl -i -H 'Content-Type:application/json;charset=UTF-8' --data-ascii '{key1:val1, key2:val2}' 'http://www.sample.com/deal.php'   #jason方式,可以使用--data-ascii参数来POST纯文本的数据;-i来显示HTTP头

范例:curl -F 'key1=val1' -F 'key2=val2' -F 'filekey=@file_fullpath' 'http://www.sample.com/deal.php'   #上传文件,会自动添加Content-Type: multipart/form-data; boundary=----------------------------长度

33.将上一个命令的结果作为参数,分组使用进行操作

格式:前一个命令 | xargs -i -t -n1 <命令和参数>

范例:find . -iname '*openmobile*' | xargs -i -t -n1 cp {} {}.bak

说明:把当前目录的文件名含有openmobile的文件,全部做个备份,生成对应的'文件名.bak'文件。其中{}引用了上一个命令的结果,n1表示如何使用上一个命令的结果,n1为执行一次命令使用1个结果值,n2为执行一次命令使用2个结果值,例如find . -iname 'openmobile*' | xargs -i -t -n2 diff –q

34.录制执行命令的脚本为文本文件

格式:script 文件名

范例:script cmdlines.txt

说明:执行exit命令或ctrl-D命令结束录制,录制的命令和输出结果会存储在cmdlines.txt文件中。

35.替换操作

格式:tr 字符集字符集2

范例:echo “HELLO WORLD | tr ‘A-Z’ ‘a-z’

说明:把大写转换为小写

进阶:-s删除掉重复的 字符集1中的字符(只保留第一次出现的那个字符),-d删除掉 字符集1中的字符。

36.文件名操作

格式:rename ‘模式文件

范例:rename ‘s/ /_/g’ *.txt

范例:rename ‘y/A-Z/a-z/’ *

范例:file_jpg=”sample.jpg”;name=${file_jpg%.*};extension=${file_jpg##*.}

说明:%非贪婪从右至左匹配,%%贪婪从右至左匹配,#非贪婪从左至右匹配,##贪婪从左至右匹配

37.检查拼写

格式:aspell -l  aspell -c文件名

范例:echo hello | aspell -l

格式:look 单词

范例:look - hello

说明:列出所有以’hello’开头的单词

38.查找两个文件内容相同的行

格式:comm 文件文件2 -1 -2 -3

范例:sort A.txt -o A.txt; sort B.txt -o B.txt; comm. A.txtB.txt -1 -2

说明:显示A.txtB.txt内容相同的行;comm的输入文件必须先sort,结果显示为3列,第1列为只在A文件有,第2列为只在B文件有,第3列为在AB文件都有的行,三个列之间用tab分割。-1-2-3的参数分别表示不显示第1列,第2列和第3列。

39.对文本文件按行进行循环处理

范例:...(cat filename) | (while read line; do echo $line; done)

范例:
while read line
do
    echo $line
done < filename(待读取的文件)

40.倒序单词或字符

格式:rev 字符串

格式:tac 字符串

范例:echo "hello world" | tac -s ' ' | tr '\n' ' '

说明:把单词倒序,tac默认是倒序行,此处指定分隔符为空格;rev是倒序每个字符。


41. 添加定时任务

格式:crontab -e
说明:执行文字编辑器来设定时程表。时程表格式如下:“f1 f2 f3 f4 f5 program”,其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天(星期天为0,星期一为1,...,星期六为6)。program 表示要执行的程式。
fx的表示说明:当 f1 为 * 时表示每分钟都要执行 program;当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行;当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次;当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行。

其他参数: -l 列出目前的时程表
范例:0 2 * * * cd /home/mysql/dbproxy/log && find . -mtime +30 -exec rm -rf {} \;
说明:每天凌晨2点定期删除30天以前的日志文件


42. core文件的设置

格式:ulimit -a #显示当前core文件的相关设置,例如:开启或关闭core文件的生成

/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0

/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如可以这样设置:/home/coresave/core.%e.%p.%t


43. 执行脚本的绝对路径

#获取当前执行的脚本文件所在的绝对路径:

sh_dir_tmp=`dirname "$0"`
sh_dir=`cd "$sh_dir_tmp"; pwd`

#`basename "$0"`来获取当前执行的脚本文件的文件名


44. 调试shell命令

选项-x 进入跟踪方式,显示所执行的每一条命令;-n 只读取shell脚本,测试shell脚本是否存在语法错误,但不实际执行。
“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。先执行export PS4='+{$LINENO:${FUNCNAME[0]}} ', 然后再使用“-x”选项来执行脚本,就能在每一条实际执行的命令前面显示其行号以及所属的函数名。
对于使用-x得到的+输出,是无法通过重定向命令保存的,也不可以使用管道+more命令来分页查看;可以使用录制命令来保存输出结果到文件中再自行查看,即:script 文件名,exit结束录制。
shell的执行选项除了可以在启动shell时指定外,亦可在脚本中用set命令来指定。 "set -x"表示启用调试选项,"set +x"表示关闭调试选项,这2个标记之间的内容为被跟踪的代码段。
调试钩子,例如以下的DEBUG函数,可以通过DEBUG <命令>的方式来调用,例如:“DEBUG set -x”;并且在执行时使用export DEBUG=true来打开。

[python]  view plain copy
  1. DEBUG() 
  2. if [ "$DEBUG" = "true" ]; then 
  3.     $@   
  4. fi 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值