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 对应执行,读写
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" 判断文件是否存在
-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
case $变量名称1 in
"第一个变量")
程序段
;;
"第二个变量")
程序段
;;
*)
不包含在上述case的条件
exit 1
;;
esac
使用函数
function fname(){
程序段
}
函数参数和shell脚本类似,也是使用 $1 $2 $3 ... 依次标记参数
例如:
function printit(){
echo -n "Your choice is $1"
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 将使用的脚本内容显示到屏幕上,很有用的参数
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 $变量名称1 in
"第一个变量")
程序段
;;
"第二个变量")
程序段
;;
*)
不包含在上述case的条件
exit 1
;;
esac
使用函数
function fname(){
程序段
}
函数参数和shell脚本类似,也是使用 $1 $2 $3 ... 依次标记参数
例如:
function printit(){
echo -n "Your choice is $1"
}
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 将使用的脚本内容显示到屏幕上,很有用的参数