1. 常用的命令包括:
ls
显示文件
-la 显示所有文件
bc
简单计算器
date
显示日期时间
cal
显示日历
加参数可以看指定年月的 cal 7 2015
man
查看命令帮助
info
查看命令帮助
帮助的使用方法:
空格键
向下翻页
[Page Up]
[Page Down]
Home
第一页
End
最后一页
/string
向下搜索字符串string
?string
向上搜索字符串string
n N
n继续向下搜索,N继续向上搜索
whatis
查看命令帮助
2. 文件操作命令
chgrp
改变文件所属用户组
chgrp users abc.txt
将abc.txt文件的用户组修改为users。users必须在/etc/group中出现的组名
chown
改变文件拥有者
chown bin abc.txt
将abc.txt文件的所有者修改为bin。
chown / chgrp两个命令用途不太错,但是也是有用的,比如将文件复制给别的用户时。
chmod
改变文件的属性等
chmod 770 abc.txt
将abc.txt的文件属性设置为770
chmod a+x abc.txt
三个权限都加上执行权限
a / u / g / o 对应于与所有,用户,组,其他三个
x / r / w
对应执行,读写
cd 更换目录 ~ 家目录 .. 上一级 - 上一个工作目录
pwd
显示工作目录
print working directory -P 显示实际路径,非链接路径
mkdir
建立目录
-m 设置权限 后加权限 -p 递归建立
rmdir
删除 空 目录
-p 与上层空目录一起删除
$PATH
可执行路径
echo $PATH 显示可执行路径 PATH="$PATH":/root 将/root也添加到可执行路径中
ls
列举文件
-a
列举所有的文件,包括隐藏文件
-A
列举所有文件,但是不包括 . 和 .. 两个文件
-d
仅仅列举出目录文件
-f
直接列举,不排序
-F
根据文件类型,附加一些字符信息,表示文件类型
-h
列举文件大小
-R
与子目录一起列举出来
-S
按照文件大小排序
-t
按照时间排序
-r
将排序 逆向列出来
cp
复制文件,还可以用来建立连接
-p
强制使用属性,而非默认的文件属性
-r
递归复制,用于目录复制
-s
复制文件为符号链接文件,即快捷方式
-u
目标文件比 源文件旧,则替换为新文件
-f
强制复制,不提示覆盖
-i
如果目标文件存在,则提示
mv
移动文件,同时可以重命名文件
-f
强制移动,不提示
-i
如果目标文件已存在,则提醒是否覆盖
-u
如果目标已存在,源文件更新才更新(update)
rm
删除文件
-f
强制删除,不提示
-i
删除前,提醒用户确认
-r
递归删除,用于目录的删除
basename
获取文件名
basename /etc/sysconfig/network.cig 结果为network.cig
dirname
获取路径名
dirname /etc/sysconfig/network 的结果是/etc/sysconfig
--------------------------------------------------------------------------------
cat
查看文件内容,从起始显示
-n
显示行号
tac
查看文件,从结尾开始
nl
显示时,输出行号
more
一页一页显示
less
一页一页显示,可以向前翻页
具有与 man 命令显示内容类似的查找等功能
head
只看前几行
tail
只看后几行
-n
两个命令同样的参数,表示显示几行 tail -n 10 尾部十行
od
以二进制形式读取文件内容
touch
创建一个文件,或用于修改创建时间等。
umask
显示文件默认创建的权限
-S
以符号形式给出默认权限的值
chattr
修改隐藏属性
lsattr
显示隐藏属性
file
显示文件的类型
------------------------------------------------------------------------------
which
搜索文件。这个命令根据 PATH 路径来搜索 执行文件 的文件名
-a
将所有可找到的命令都列举出来
whereis
寻找特定文件
-b
只找二进制文件
-s
只找源文件
-m
只在帮助目录下找文件
locate
寻找特定文件,与whereis都是从特定文件数据库中查找
find
搜寻文件,它搜寻磁盘,非常耗费时间
find [PATH] [option] [action]
[PATH]
指定了要搜索的目录,如果为 / 则是从root目录,根目录搜索所有的文件
-atime n
n 为数字,含义是n天之前,一天之内访问access过的文件
-ctime n
n 为数字,n天之前,一天之内修改(change)过状态的文件
-mtime n
n 为数字,n天之前,一天之内修改(modification)过的文件
-newer file
file为一个存在的文件,意思是比file更新的文件
-uid n
n为数字,用户帐号ID,UID
-gid n
n为GID,即特定GID的文件
-user name
name为用户名,即特定用户的文件
-group name
name为组名称,特定组的文件
-nouser
文件的拥有者不在 /etc/passwd中的文件
-nogroup
拥有的用户组不再 /etc/group中的文件
-name filename
搜索文件名为filename 的文件
-size [+-] SIZE
搜索比SIZE还要大(+)或小(-)的文件。SIZE规格 c为byte k为 1024bytes -size+50k 即大小大于50k的文件
-type TYPE
搜索文件的类型为TYPE,正规文件 f,设备文件b,c 目录 d,链接文件 l,套接字 s,FIFO(p)等属性
-perm mode
搜索文件属性刚好等于mode的文件
-perm -mode
文件属性全部包含 mode的属性
-perm +mode
搜索文件属性包含任一mode属性的文件
-exec command
command为命令,可以将搜索到的结果直接调用command处理
-print
默认的动作,即搜索到就会打印出来
-------------------------------------------------------------------------------------------------------
目录文件压缩
*.Z
compress程序压缩的文件
*.bz2
bzip2程序压缩的文件
*.gz
gzip程序压缩文件
*.tar
tar程序打包的数据,没有压缩过
*.tar.gz
tar程序打包,经过gzip压缩
compress
[-dcr] 文件或目录
-d
用来解压缩的参数
-r
联通目录下的文件同时压缩
-c
将压缩数据输出为标准输出
uncompress
也可以解压缩 *.Z的文件
gzip [-cdt#]
文件名
zcat 文件名.gz
-c
将压缩的数据输出到屏幕,通过重定向可以导向处理
-d
解压缩参数
-t
校验一个压缩文件的一致性
#
压缩登记,-1 最快,压缩比最小,-9最慢,压缩最小
bzip2 [-cdx] 文件名
bzcat 文件名.bz2
-c
将压缩产生数据输出到屏幕上
-d
解压缩的参数
-z
压缩的参数
-#
与gzip相同,压缩比例参数
tar [-cxtzjvfpPN] 文件 与 目录
-c
建立压缩文件参数
-x
见压缩文件的参数命令
-t
查看tarfile的文件,c / x / t 只能有一个存在
-z
是否使用gzip压缩
-j
是否使用bzip2压缩
-v
压缩过程中显示文件
-f
使用文件名,
-p
使用原文件的原来属性
-P
使用绝对路径来压缩
-N
要新的文件才会被打包
dd if="input_file" of="output_file" bs="block_size" count="number"
这个命令可以将输入文件复制到输出文件,可以用于备份文件等。
vim 与 vi
移动光标的方法 h 向左移动 l 向右移动 j 向下移动光标 k 向上移动光标
+ - 移动到非空格符的下一行 或 上一行
0 移动到当前行的行首字符, $ 移动到当前行的末尾字符
H 移动到屏幕的最上方一行,M 移动到屏幕的中间一行 L 移动到屏幕的最下方一行
G 移动到文件的最后一行 nG 移动到文件的第n行
gg 移动到文件的第一行,与 1G相同
n Enter 向下移动n行
/word 从光标处向后搜索 word字符串
?word 从光标处向上搜索word字符串
n / N 重复前一个搜索的动作,重复"反向"进行的前一个搜索命令
:n1、n2s/word1/word2/g 在n1与n2行之间搜索word1字符串,并将它替换为word2
x,X
在一行中x向后删除一个字符,X为向前删除一个字符
nx
n为数字,向后删除n个字符
dd
删除当前所在的行
ndd
删除当前行及其之后 共n行内容
d1G
删除光标所在位置到第一行的所有数据
dG
删除光标所在行到最后一行的所有内容
d$
删除光标所在位置到该行的最后一个字符
d0
删除光标所在位置到该行最开始的所有字符
yy
复制光标所在一行
nyy
复制光标及其之后的n行内容
y1G
复制光标所在行到第一行的所有内容
yG
复制光标所在行到最后一行的数据
y0
复制光标所在位置到行行首的所有的数据
y$
复制光标所在的字符到行末尾的所有数据
p,P
p为将复制数据粘贴到光标下一行。P为粘在光标上一行
J
将光标所在行与下一列的数据结合成一行
c
重复删除多个数据,向下删除10行 10cj
u
复原前一个操作
Ctrl-r
重复上一个操作
vim 的特殊的功能
块选择
v 字符选择,会将光标经过地方反白选择
V 行选择,会将光标经过的行反白选择
Ctrl + v
块选择,可以用长方形的方式选择数据
y 复制反白的地方
d 将反白的地方删除掉
多文件编辑
:n
编辑下一个文件
:N
编辑上一个文件
:files
列举出当前vim打开的所有文件
多窗口编辑
:sp [filename]
打开一个新窗口。如果加filename,表示新窗口打开一个新文件,否则打开同一个文件
Ctrl + wj
先按Ctrl不放,再按下w后,放开所有键,然后按下j,光标移动到下方窗口
Ctrl + wk
同上,窗口移向上面窗口
Ctrl + wl
同上,移向右边窗口
Ctrl + wq
结束离开。可以将光标移动到一个窗口,然后":q"命令离开
环境设置:
:set all
显示当前所有的环境参数设置值
:set nu
/ nonu
设置行号或取消行号
:set hlsearch
设置是否将搜索的字符反白
:set autoindent
设置自动缩排,不自动缩排 :set noautoindent
:set backup
设置是否自动存储备份文件
:set ruler
是否在右下角显示状态行说明
:set showmode
是否在左下角状态行显示 --Insert--
:syntax(off|on)
根据程序相关语法显示不同的颜色
Dos与Linux的换行符
Dos的换行符为 ^MS ,即CR LF,而Linux的换行为 LF
通过简单命令将dos与Unix的换行符进行替换
dos2unix [-kn]
file [newfile]
unix2dos [-kn]
file [newfile]
-k 保留该文件爱你原来的mtime时间个是
-n 保留原来的旧文件,将转换后的文件输出到新的文件,dos2unix -n old new
Shell编程
Bash的内置命令
type [-tpa] name
type显示出name是外部命令还是bash内置的命令
file
表示为外部命令
alias
表示为命令别名所设置名称
builtin
表示为bash内置的命令功能
-p 接name为命令,则显示完成文件名或显示为内置命令
-a 在PATH变量定义的路径中,列举出所有含有name的命令,包括alias
command [-options] parameter1 parameter2 ...
1.一行命令第一个输入的绝对是命令或勀执行文件
2.command 为命令名称
3.中括号[]并不存在实际的命令中,表示可选内容。-为加入参数设置,完整参数名输入--
4.parameter1 parameter2 ... 为跟在option后的参数,或command参数
5.命令太长时,用"\"符号来分行,注意 "\"符号后必须跟着换行
6.Unix中大小写敏感
bash变量功能
echo $variable / echoe ${variable}
输出变量内容
变量定义:
1.无类型定义
2.变量与变量内容以"="链接,等号两边不能有空格
3.变量名以英文字母和数字,但数字不能为起始字符
4.变量内容如果有空格,需要用双引号",或单引号“'”将内容结合起来,双引号可以保持变量特性
5.必要时,用转义字符"\"将特殊字符变为一般字符(Enter,$,\,空格符号等)
6.使用`command`在一串命令中放其他的命令。` 符号不是单引号,OK?
7.若变量为扩展变量内容,需要以双引号以及"$变量名称"继续累加,如"$PATH":/home
8.若变量需要在其他子程序执行,则需要用export是变量变为环境变量
9.通常大写字母为系统默认变量,自行设置变量用小写字母。
10.取消变量的方法为 "unset 变量名"
例如:
cd /lib/modules/`uname -r`/kernel
进入当前核心的模块目录,uname -r返回版本号
几个重要的环境变量
HOME
代表用户的家目录
SHELL
当前使用的Shell程序
HISTSIZE
历史命令的数量
PATH
执行文件搜索的路径,以冒号 : 分割
set
使得环境变量的设置只在当前shell环境下有效
$ 当前Shell的PID echo $$ 查看当前进程ID
? 上一个执行命令的回传码,echo $?
export name 将自定义变量转换为环境变量,这样可以在其他shell脚本引用
read [-pt] variable
读取键盘输入的变量,与用户交互时使用
-p 后面可以接提示符
-t 后面可以接等待的"秒数"
read -p "Please input string:" atest
将输入赋值给atest
declare [-aixr] variable
-a
将variable定义为数组
-i
将variable定义为整数数字
-x
将variable定义为环境变量,与export一样
-r
将variable的变量设置为readonly
var[index]="small min"
设置数组var的index元素为 small min字符串
读取内容可以用 echo ${var[1]} 这种方式,确保无误
alias 设置别名
alias rm='rm -i'
将rm设置为 rm -i 命令的别名
unalias rm
将设置的rm别名删除掉
通配符与特殊符号:
*
通配符,代表有0个或多个字符或数字
?
通配符,代表“一定有”一个字母
#
注释
\
转移字符
|
管道分隔符
;
继续命令执行
~
用户的家目录
$
变量之前,需要加的变量替换值
&
将命令变为后台执行
!
逻辑运算中的“非”
/
路径分割的符号
>,>>
输出导向,即重定向,替换与累加
'
不具有变量置换的功能
"
变量置换的功能,即$PATH会被置换成变量内容
``
可以先执行的命令
()
中间为zishell的起始与结束
[]
中间为字符的组合
{}
中间为命令区块组合
Ctrl+C
终止当前命令
Ctrl+D
输入结束
Ctrl+M
就是Enter键
Ctrl+S
暂停屏幕的输出
Ctrl+Q
恢复屏幕的输出
Ctrl+U
提示符下,删除整行命令
Ctrl+Z
暂停当前命令
例子:
ls -lda /etc/[!a-z]
找不想有小写字母开头的文件
ls -lda /etc/*[0-9]*
找文件名中有数字的文件名
[]仅表示一个数字,这个数字可以在 0-9之间选择
ls test*
表示以 test开头的文件名
ls test?
以test开头,且后面一定有一个未知字符的文件名
ls test?? 必须有三个未知字符的文件名
ls > ~/abc
将ls的结果导向到 ~/abc文件中,如果abc存在直接替换文件内容
0 1 2 分别表示 标准输入,标准输出,标准错误
ls / 2> abc.txt 将错误输出到abc.txt文件
cut 和 grep命令
cut -d '分隔符' -f fields 将内容按照 分隔符分割,取出 第fields块内容
cut -c 字符范围
-d 后面接分隔符,与-f一起使用
-f 歌曲-d分隔符将一段消息分为数段,-f标识取第几段
-c 以字符为单位去除固定的字符范围
echo $PATH | cut -d ':' -f 5
以 : 将PATH分割,取出第五块
用它来分析log比较合适,固定格式
grep分析一行消息,其中有所需信息,将该行去除
grep [-acinv] '搜索字符串' filename
-a 将二进制文件以文本方式搜索
-c 计算找到 目标字符串的次数
-i 忽略大小写的不同
-n 顺便输出行号
-v 反向选择,即显示没有目标字符串的行
排序命令 sort wc uniq
sort [-fbMnrtuk] [file or stdin]
-f 忽略大小写差异
-b 忽略最前面的空格符部分
-M 以月份的名字来排序
-n 使用 纯数字 进行排序
-r 反向排序
-u 就是uniq
-t 分隔符默认是tab
-k 按照那个字段进行排序
cat /etc/passwd | sort 以第一个数据,以文字类型排序
uniq [-ic]
-i 忽略大消息
-c 进行计数
可以将该命令跟在 cut之后,统计重复的数量
wc [-lwm]
-l 显示多少行
-w 显示多少字
-m 显示多少字符
tee 双向定位,即重定向到标准输入输出,也定向到文件
tee [-a] file
-a 以append 方式加入file文件
字符转换
tr,col,join,paste,expand
tr [-ds] SET1
-d 删除消息中的SET1字符串
-s 替换重复的字符
last | tr '[a-z]' '[A-Z]' 将消息中的所有小写变为大写
col [-x]
-x 将tab键转换成对等的空格键
join [-ti12] file1 file2
将两个文件中具有相同数据的行链接到一起
-t 分隔符
-i 忽略大小写差异
-1 第一个文件用那个字段分析
-2 第二个文件用那个字段分析
paste [-d] file1 file2 直接将两个文件拼接到一起
expand [-t] file 将tab键替换为空格键,
-t 后面接数字,表示将一个tab键转换为几个 空格键
正则表达式
grep选取字符串
grep [-acinv] '搜索字符串' filename
-a 二进制文件中以文本方式搜索数据
-c 计算找到‘搜索字符串’的次数
-i 忽略大小写
-n 输出行号
-v 反向选择,即显示没有'搜索字符串'内容的一行
正则表达式特殊字符:
^word
待搜索的字符串在行首,grep -n '^#' regular.txt搜索行首为#开始的一行
word$
带搜索的字符串在行尾
.
任意一个字符,一定是一个任意字符
\
转义字符,去除特殊符号的特殊意义
*
重复0个或多个前一个字符
\{n,m\}
连续n到m个"前一个重复字符",
\{n\} 连续重复n个前一个字符
\{n,\} 连续重复n个以上前一个字符
[]
字符集合的重复特殊字符,即选择其中一个可以使用连字符 - 来表示可选字符的范围,例如[a-z]从字符a到字符z随意选一个使用^来表示反义,即不选其中的字符
注意:正则的特殊符号与通配符的特殊符号不是一个意思
* 在正则表示重复0个或多个前一个字符,而在通配符则表示0个或多个字符
! ^ [!range]用于表示通配符的不包含,而正则的不包含用[^range]表示
扩展正则特殊字符
+
重复‘一个或一个以上’字符 egrep -n 'go+d' regular.txt
?
'0个或一个'字符
|
用或的方式找出数个字符串 egrep -n 'gd|good' regular.txt 包含gd 或good
()
找出'用户组'字符串,egrep -n 'g(la|oo)d' regular.txt
使用正则表达式的两个工具:
sed 主要用于整行文本的处理,可以添加删除文本
awk 主要是处理"每一行字段内的数据",默认的字段分隔符为空格或tab键
文件比较:
diff
比较两个文件不同,用于行对比。用于在ASCII纯文本文件的比较
cmp
比较两个文件,主要用"位"为单位比较
patch
用于文件的升级
Shell脚本
Shell脚本是纯文本文件,将shell语法与命令写在里面,与正则表达式,管道与数据流重导向一起实现目的
编写Shell脚本的良好习惯,在每个脚本的文件头处记录好
1. 脚本的功能
2. 脚本的版本信息
3. 脚本的作者与联系方式
3. 脚本的版权声明方式
4. 脚本的历史记录
5. 脚本内较忒数的命令,使用绝对路径的方式来执行
6. 预先声明与设置脚本运行时所需的环境变量
test检测系统上某些文件或相关属性
test -e /dmtsai && echo "exist" || echo "No exist" 判断文件是否存在
test [-efdbcSpL] filename
文件类型检测
-e
该"文件名"是否存在
-f
该"文件名"是否为文件
-d
该"文件名"是否为目录
-b
该“文件名”是否为一个块设备
-c
该“文件名”是否为一个字符设备
-S
该“文件名”是否为一个套接字
-p
该“文件名”是否是一个FIFO文件
-L
该“文件名”是否为一个链接文件
文件权限检测
-r
文件可读
-w
文件可写
-x
文件可执行
-u
文件是否具有SUID属性
-g
文件是否具有SGID属性
-k
文件是否Sticky bit属性
-s
文件是否非空白文件
比较两个文件
-nt 一个文件比另一个新 test file1 -nt file2
-ot 一个文件比另一个文件旧
-ef
判断是否同一文件,用于判断硬链接
两个整数之间判断
-eq
两数值相等
-ne 两数值不等
-gt n1大于n2
-lt n1小于n2
-ge n1大于等于n2
-le n1小于等于n2
字符串判断
test -z string
判断字符串是否为空
test -n string判断字符串是否非空
test str1 = str2 判断str1 是否等于str2
test str1 != str2 判断str1是否等于str2
多重条件判断
-a
用于多重条件判断 放在两个条件之间
test -r file -a -x file 同时具有可读可执行
-o
两个条件成立一个
!
条件求反 test ! -x file 即file不具备x时,为true
注:与test等同的就是 [] 条件判断运算符
使用[]时注意空格 [ "$HOME" == "$MAIL" ]
Shell脚本的默认变量
/etc/init.d/crond restart
/path/scriptname opt1 opt2 opt3 ...
$0
$1 $2 $3 ...
if..then语句
使用test 或 [] 判断,可以在其中添加 &&(AND) 或 ||(OR)
if [ 条件判断 ]; then
elif [ 条件二 ]; then
else
fi
case ... esac语句
case $变量名称1 in
"第一个变量")
程序段
;;
"第二个变量")
程序段
;;
*)
不包含在上述case的条件
exit 1
;;
esac
使用函数
function fname(){
程序段
}
函数参数和shell脚本类似,也是使用 $1 $2 $3 ... 依次标记参数
例如:
function printit(){
echo -n "Your choice is $1"
}
echo "This program will print your selection!"
case $1 in
"one")
printit 1
;;
"two")
printit 2
;;
*)
echo "Usage (one|two)"
;;
esac
循环语句
while [ condition ]
do
程序段落
done
until [ condition ]
do
程序段落
done
/////////////////////////////////////////
for (( 初始值; 限制值; 执行步长 ))
do
程序段
done
s = 0
for (( i=1; i<=100; i++ ))
do
s=$(($s+$i))
done
////////////////////////////////////////
for var in con1 con2 con3
do
程序段
done
Shell脚本的追踪调试
sh [-nvx] script.sh
-n 不要执行脚本,仅检查语法问题
-v 执行脚本前,将脚本的内容输出到屏幕
-x 将使用的脚本内容显示到屏幕上,很有用的参数