切换目录
cd ~
回家目录
cd -
回刚才的目录
cd ..
回上级目录
cd
回家目录
——————
显示当前所在目录
pwd
显示实际路径而非连接路径
pwd -P
——————
建立新目录
mkdir 目录名
赋予权限
mkdir -m 777 test
递归建立
mkdir -p test/test1/test2
——————
删除空目录
rmdir 目录名
递归删除空目录
rmdir -p test/test1/test2
——————
查看目录和文件
ls
-t时间排序,-S大小排序,-r反向排列,-a显示隐藏文件
--full-time显示完整日期
——————
复制
cp 源文件 目标文件
-p复制属性,-d链接文件复制为被链接文件的属性,-r递归复制,-a等同于-pdr
-s生成快捷方式,-l生成硬链接,-u如果源文件比目标文件新则替换目标文件,
-i覆盖前若目标文件已经存在则询问,-f强制覆盖
注:复制快捷方式时不加任何参数,复制的是源文件,只复制快捷方式用-a或-d。
——————
删除
rm 文件或目录
-f强制删除,-i询问是否要删,-r递归删除
——————
移动或重命名
mv 源文件 目标文件
-f强制移动,-i询问是否移动,-u若目标文件已存在且源文件比较新再替换
——————
直接查看文件内容
cat 文件名
-v列出特殊字符,-T显示Tab键为^T,显示换行符$
-n显示行号
——————
反向显示
tac 文件名
跟cat正好相反,倒着显示
——————
查看内容时加上行号
nl 文件名
-b a空行也要行号,-b t空行不要行号
——————
翻页查看
more 文件名
空格翻页,回车下一行,q退出,/字符串 查询
——————
翻页查看
less 文件名
前后翻页:pageUp,pageDown,其他同上
——————
查看前几行
head -n 行数 文件名
——————
查看后几行
tail -n 行数 文件名
——————
查看字节码文件
od -t c 文件名
-t a默认输出,-t c用ascii输出,-t d十进制、f浮点数、o八进制,x十六进制
——————
建立空文件,修改文件时间
touch 文件名
touch -t YYMMDDhhmm 文件名
——————
文件的默认权限
umask -S
更改默认权限 umask 002(删去的权限值)
——————
设置文件的隐藏属性
chattr [+-=][ASacdistu] 文件名
+增加属性,-删除属性,=设置属性
+i 设置只读
——————
显示文件的隐藏属性
lsattr [-aR] 文件名
-a显示隐藏文件的属性,-R递归子目录
——————
分辨文件类型
file 文件名
——————
寻找执行文件
which [command]
-a找出所有命令
——————
寻找指定文件
whereis 文件名
-b 寻找可执行文件
locate 部分文件名
find [PATH] [OPTION] 文件名
例如:find /etc -name *(通配符)名字
——————
查看目录的容量
df 目录
-a显示隐藏(含内存中的文件),-k以kb形式展示,-m以mb形式展示,-h加单位,-i显示inode容量
——————
列出当前目录下所有文件的总容量
du
-a列出所有文件的容量,-k单位kb,-m单位mb,-h加单位,-s统计当前目录的总大小
du -smh /home/weblogic/* 分别统计当前目录下的各个文件大小
——————
建立连接
ln 源文件 目标文件 建立硬链接
-s 符号连接,-f目标若存在则先删再添
符号连接:修改连接文件 = 修改源文件
目录的默认连接数是2(包括..和.两个连接)
——————
fdisk -l 设备名称
-l输出设备的所有分区内容
只有root才能执行fdisk,fdisk只改分区表不实际删除数据
d删除分区,p查看分区详情,n新增分区(p主分区1-4,e扩展分区,l逻辑分区),容量填写+100M(不填就是默认值)
——————
磁盘格式化
mke2fs 起名 设备名称
-b设置块大小1024、2048、4096,-i设置inode大小,-c测试读,-c -c测试读写,-L设置卷标,-j格式化成EXT3
例如:mke2fs -j -L "logical" -b 4096 /dev/hdb5
mkbootdisk --device /dev/fd0 ‘uname -r‘ 建立启动软盘
fdformat /dev/fd0H1440 低级格式化启动软盘
——————
磁盘自检
只有有载入点的目录下才会有lost+found目录,自检中发现的错误文件会被送到这里。
fsck 设备名称
-C显示进度条,-t指定文件系统 -A扫描所有设备,-a/-y自动修复,-r修复时询问
例如:fsck -C -t ext3 /dev/hdb5
只有root用户能用
检查坏轨(fsck可取代此命令)
badblocks 设备名称
-s显示进度,-v显示进度
——————
sync 把内存中的数据同步到硬盘
——————
将建立的分区载入到文件系统
mount 设备名称/代号 载入点
例如mount -t ext3 /dev/hdb5 /mnt/hdb5
-t提示用什么文件系统载入(可以不写让它自己识别),载入点也可以不写。
-L利用设备代号/卷标载入
例如mount -t ext3 -L logical /mnt/hdb5
remount重新载入
只写mount会列出所有挂载点和文件系统
只有root用户能用
——————
从文件系统中卸载分区
unmount 设备名称/代号/载入点
——————
修改卷标
e2label 设备名称 卷标
——————
多功能修改磁盘属性
tune2fs 设备号
-j讲设备的文件系统从ext2变为ext3
-L 改卷标
-l 读出超级块的数据
——————
调整磁盘属性,开启DMA
hdparm 设备名称
-i显示磁盘的测试信息,-d开启dma模式d1开启、d0取消
只有root能用
——————
建立虚拟内存设备
第一种方法:
fdisk /dev/hd[a-d] 先建立个分区,将分区的ID改成82
mkswap /dev/hd[a-d][1-16] 将建立的分区格式化成swap的文件格式
swapon /dev/hd[a-d][1-16] 启动swap
完成
如果不需要虚拟内存可以用swapoff关闭
第二种方法:
dd if=/dev/zero of=/tmp/swap bs=4k count=16382 dd命令用于转换格式同时复制文件,if是输入格式of是输出格式,bs是一个分区占多大,count是多少个分区(64m)
于是建立了一个/tmp/swap文件
mkswap /tmp/swap 把该文件格式化为虚拟内存文件格式
swapon /tmp/swap 启动虚拟内存,不想手动启动就把这句写进/etc/rc.d/rc.local里
想关闭的话用swapoff /tmp/swap
——————
compress压缩解压,压缩单文件
compress 文件名 ——压缩
compress -d 文件名.Z ——解压,uncompress也行
compress已经被grip取代了
——————
gzip压缩解压,压缩单文件
-c数据流重导向,-d解压,-t检查一致性,-#压缩等级1-9,默认是6
gzip 文件名 ——压缩
zcat *.gz ——读取压缩文件内容(解压后的内容)
——————
bzip2压缩解压,压缩单文件
-c数据流重导向,-d解压,-z压缩,-#压缩等级1-9,默认是6
bzip -z 文件名 ——压缩
bzip -d 文件名 ——解压 可用bunzip2代替
bzcat *.bz2 ——读取压缩文件内容(解压后的内容)
——————
tar打包解包,文件或目录
tar 打包后的文件 需要打包的文件或目录
-c建立打包文件(create),-x解包,-t查看内部文件,cxt三者互相冲突只能用一个
-z用gzip压缩或解压,-j用bzip2压缩或解压
-v显示压缩解压过程的log
-f指定操作哪个文件
-N用时间(yyyy/MM/dd)过滤,比这个时间新的会被打包
--exclude FILE 在压缩的过程中排除某个文件
tar -cvf /tmp/etc.tar /etc 仅打包不压缩
tar -zcvf /tmp/etc.tar /etc 打包后再用gzip压缩
查看gz文件 tar -ztvf /tmp/etc.tar
只解压其中的某个文件 tar -zxvf /tmp/etc.tar etc/password
比日期新的才打包 tar -N ‘2015/11/11‘ -zcvf home.tar.gz /home
打包两个目录时排除某个文件 tar --exclude /home/dmtssi -zcvf myfile.tar.gz /home/* /etc
——————
备份,回写
dd if="input_file" of="output_file" bs="block_size" count="number"
if:输入文件/设备,of:输出文件/设备,bs:规划一个块的大小,count:多少个块
if和of的目录不能相同,否则失败
——————
将文件checkout到本地目录
svn checkout [path]
例如svn checkout svn://192.168.1.1/pro/domain
——————
往版本库中添加新的文件
svn add [file]
例如svn add test.php(添加test.php,可以用通配符添加所有*.php)
——————
将改动的文件提交到版本库
svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如svn commit -m "add test file for my test" test.php
——————
更新svn到某个版本
svn update -r m [path]
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本 。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
——————
查看svn文件或者目录状态
svn status [path](目录下的文件和子目录的状态,正常状态不显示)
?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定
-v path(显示文件和子目录状态)
——————
删除svn文件
svn delete [path] -m "delete test fle"
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
——————
查看svn日志
svn log [path]
——————
查看svn文件信息
svn info [path]
——————
svn比较差异
svn diff [path]
——————
将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
——————
vi编辑器
建立一个新文件 vi test.text
按下a、o、i进入编辑模式
按下Esc回到一般模式
在一般模式中按下:wq存储并离开vi
遇到权限不许写入时可以wq!强制写入
一般模式下的命令:
+ or -光标移动到下一行/上一行
0 or $光标移动到这一行的最开始/最后面
G or gg光标移动到该文件的最后一行/第一行
n+回车 光标向下移动n行
/word 向下搜索关键字 ?word 向上搜索关键字
:n1、n2s/word1/word2/g 从n1和n2行之间把word1替换成word2
例如:1、$s/word1/word2/gc从第一行到最后一行把word1替换成word2,在替换时confirm询问
x or X向后/向前删一个字符
dd删除光标所在的整行
ndd删除光标之后的n行
yy复制光标所在整行
nyy复制光标之后的n行
p or P 粘贴到光标的下一行/上一行
u撤销
Ctrl + r重做 或者.
命令行模式下的命令:
:w保存,!强制保存
:w [filename] 另存为
:r [filename] 把另一个文件的内容贴到当前文件中
:q离开, !强制离开
:e!将文件还原到初始状态
ZZ如果已改动则保存离开,如果没改动则直接离开
:set nu 显示行号
:set nonu 隐藏行号
在vi编辑文件时会生成一个.swp的临时隐藏文件用来做恢复用
——————
vim编辑器
块选择 ctrl + v 然后上下左右移动光标选中目标区域
y复制目标区域,d删除目标区域,p粘贴
多文件编辑 vi 文件1 文件2
:n编辑下一个文件
:N编辑上一个文件
:files列出当前打开的所有文件
多窗口编辑 vi 文件1
:sp [filename] 不填filename就是在同屏的第二个窗口打开同一文件
ctrl+w +j光标往下个窗口跳
ctrl+w +k光标往上个窗口跳
——————
DOS和Linux文件互转
dos2unix filename
unix2dos dilename
-k保留mtime(最近修改时间)不改变
-n old new 保留旧文件,将转换后的新文件输出
——————
给命令设置别名
例如alias lm = ‘ls -al‘
——————
辨别命令是否输入内核
type [command]
——————
变量
查看变量值
echo $varname
设置变量varname=varvalue 不能有空格(空格回车用\转义),变量名不能以数字开头,双引号中引用变量会翻译成变量的值,单引号则只以普通的字符串来处理
扩展变量varname="$varname":varvalue
将变量升级为环境变量export varname
bash打开一个新的shell,exit离开这个shell,父程序的自定义变量是无法再子程序内使用的,除非升级为环境变量
删除变量unset varname
被`括住的命令会先执行,如ls -l `locate crontab`
如果没有更改/etc/profile系统参数文件,那么这次登录进行的变量设置在下次登录时会被取消
——————
查看环境变量
env
其中RANDOM是生成随机数0~32767
declare -i number=$RANDOM*10/32767 生成一个0~9的随机数给变量number
——————
查看当前shell(当前用户的)中的变量(也包括环境变量)
set
——————
查看系统支持的语言类型
locale -a
设置语言LANG=zh_TW.big5(支持中文)
——————
从键盘读取一个值到变量
read -p "please input your name: " -t 30 name
-p提示信息,-t等待时间
——————
声明变量(并声明类型)
declare varname 默认类型是字符串
-a定义为数组,-i定义为整数数字,-x定义为环境变量,-r定义为只读(不能更改不能删除unset)
数组变量varname[index]=varvalue
引用数组echo ${varname[index]}
——————
命令的别名设置
alias lm=‘ls -l | more‘格式和定义变量一样
同名的会取代原有的命令
取消别名设置
unalias lm
——————
列出输入过的历史命令
history n
n是列出最近的几条历史记录
!n执行第n条历史命令
!!执行上一条命令
!al执行最近以al开头的命令
——————
执行当前目录下的可执行文件不能直接打名字调用
需要相对路径,例如./squid的方式
——————
修改系统登录提示语
vi /etc/motd
加入的句子会出现在登录主机后
——————
马上应用设置文件
source file
如:source ~/.bashrc 或者. ~/.bashrc
——————
快捷键的设置
ssty -a 显示所有快捷键(^代表ctrl)
stty erase ^h 把删除字符换成ctrl+H
——————
组合按键和通配符
*通配0或多个字符,?必然有一个字符,#注释,\转义字符,/路径分割,|管道符,;连续命令分割符
$调用变量之前要加,&将命令变为后台工作,()中间为shell的起始与结束,[]中间为字符组合,{}中间为命令块
组合按键:
Ctrl+C终止命令,Ctrl+D输入结束,Ctrl+Z暂停命令,Ctrl+S暂停屏幕输出,Ctrl+Q恢复屏幕输出
如:cp test[1-5] /tmp 复制test1,test2....test5到/tmp
[!a-z]* 不想要有小写字母开头的文件
——————
数据流重导向
将本该输出到屏幕上的数据输入到别的地方(文件或设备)
标准输入 代码0 使用< 或<<
标准输出 代码1 使用> 或>>
标准错误输出 代码2 使用2>或2>>
命令 导向符 设备或文件
例如把root目录下的文件列表记录下来
ls -l / > ~/rootfile (>建立文件的方式是若存在则覆盖,不存在就新建,>>不会覆盖而是在下边接着写)
记录正确的信息遗弃错误信息
find /home -name testing > list_right 2> /dev/null(黑洞垃圾桶,输入到这里的数据会消失)
记录到同一个文件
find /home -name testing >list 2>&1 (特殊写法)
<代表把本该由键盘输入的数据改为从文件读取
如:cat > catfile < somefile (cat > catfile 会要求键盘输入文字到catfile里,现在改为从somefile里读)
——————
文件若不存在则新建
ls /tmp && touch /tmp/testingagain 前者没问题就执行后者
ls /tmp/testingagain || touch /tmp/testingagain 前者有问题才执行后者
可以连用,比如
ls /tmp/vbriding && echo "exist" || echo "not exist" 如果正确则显示exist否则显示not exist
注意因为回传值的问题,&&要在||前边
——————
管道符| 用来处理前面命令传过来的标准输入
选取命令:
cut将同行的数据进行分解,选取想要的部分
-d ‘分隔符‘ -f n1,n2 按分隔符分解,选取第n1段和n2段
grep分析一行,若包含需要的信息则选取它
grep ‘搜索字符串’ filename
-n行号,-v反选
如:last | grep ‘root‘| cut -d ‘ ‘ -f 1 取带root的记录的第一列
排序命令:
sort默认按照文字排序
-f忽略大小写,-b忽略最前面的空格,-n按纯数字排序,-r反向排序,-u相同数据只显示一行,-t分隔符-k按分隔后的哪列排序
如:cat /etc/passwd | sort -t ‘:‘ -k 3 -n按:分隔按第三列数字排序
uniq将重复的数据仅显示一次
-i忽略大小写,-c进行计数
wc显示行数、字数、字符数
-l仅显示行数,-w仅显示字数(英文单词),-m仅显示字符数
awk 文本分析
命令行形式awk [-F field-separator] ‘commands‘ input-file(s)
-F 以什么分割,可选,默认空格
awk ‘{pattern + action}‘ {filenames}
例如
#last -n 5 | awk ‘{print $1}‘
读入有‘\n‘换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "
awk -F "" ‘{print NF}‘ 获取每行的长度
awk ‘NR>=10 && NR<=15‘ 获取第几行到第几行之间的数据
双向重导向:
tee file保留数据流输出到屏幕,同时将数据流输入文件或设备
-a以累加的方式加入file(不写就是覆盖)
如last | tee last.list | cut -d ‘ ‘ -f1
字符转换命令:
删除或替换消息中的文字
tr [-ds] SET1
-d删除消息中的SET1字符串,-s替换重复的字符串
如:last | tr ‘[a-z]‘ ‘[A-Z]‘
将tab键转化为对等的空格
col [-x]
——————————————
shell 脚本
#!/bin/bash 告诉脚本用bash来解析
filename=${fileuser:-"filename"} 判断fileuser变量是不是有值,若没有就用-后面的值
date=`date +%Y%m%d` 获取当天日期字符串
date=`date -date="1 days ago" +%Y%m%d` 获取昨天的日期字符串
数值运算方法:
total=$(($a*$b)) # $((运算内容))
test测试命令:
test -e /dmtsai && echo "exist" || echo "not exist" 测试目录是否存在
其他的选项 -f 是否是文件 -d是否是目录 -b是否是块设备 -L是否是链接文件
-r 是否可读 -w 是否可写 -x 是否可执行 -s 是否非空白
test file1 -nt file2 # new than 比文件新旧
test file1 -ot file2 # old than
test file1 -ef file2 # 是否是同一个文件 是否用了同一个inode 判断硬链接
test n1 -eq n2 #两数值相等 其他选项:-ne 不等 -gt 大于 -lt 小于 -ge大于等于 -le小于等于
test -z string #是否空字符串 其他选项 -n 是否非空字符串
test str1 = str2 #字符串是否相等 其他选项 != 不等于
test -r filename -a -x filename #多重判断 -a且,-o或 !非
——————————
判断符号 []
[ "$HOME" == "$MAIL" ] 注意空格和双引号都是必须带的
[ "$choice" == "Y" -o "$choice" == "y" ] && echo "OK" && exit 0
[ "$choice" == "N" -o "$choice" == "n" ] && echo "No" && exit 0
——————————
shell脚本的默认变量
$0是执行文件的名字 第一个参数是$1 以此类推
特殊的例如:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
[email protected]为"1" "2" "3"(分别被包住)
$#为3(参数数量)
——————————
条件判断
if [ 条件判断表达式 ]; then
#命令
fi
if [ "$a" == "Y" ] || [ "$a" == "y" ]; then
echo ok
exit 0
fi
if [ 条件判断1 ]; then
#命令1
else
#命令2
fi
if [ 条件判断1 ]; then
#命令1
elif [ 条件判断2 ]; then
#命令2
else
#命令3
fi
——————————
netstat -tuln 获取当前主机启动的服务
端口与功能的对应关系:
80 WWW;22:ssh;21:ftp;25:mail
——————————
case in esac 相当于switch
case $1 in
"hello") #符合第一个条件,输出Hello,;;表示代码块结束
echo "Hello"
;;
"") #符合第二个条件
echo "haha"
;;
*) #其他条件
echo "NONE"
;;
esac
——————————
函数功能
function fname() { //参数不会出现在()里,用$0 $1 $2 $3表示,$0是函数名
#程序段
echo -n "your choice is "
}
调用函数: fname 参数
如printf 1
——————————
循环
while [ condition ]
do
#程序
done
当满足条件时,继续循环
until [ condition ]
do
#程序
done
当满足条件时,循环终止
for(( i=1; i<100; i=i+1 ))
do
#代码段
done
for var in con1 con2 con3 ...
do
#代码段
done
第一次循环时$var的值是con1,第二次是con2,第三层是con3
例如 展示目录下的所有文件
filelist=`ls $dir`
for filename in $filelist
do
#echo
done
————————————
shell脚本的调试
sh -nvx script.sh
-n 不执行脚本,检查语法错误 没问题就不显示
-v 执行前先打印脚本到屏幕
-x 将使用的脚本内容显示到屏幕上 ==打印执行轨迹
————————————————
#用mv取代rm
vi .bashrc
mkdir -p ~/.trash #加到文件尾
alias rm=trash
alias r=trash
alias rl=‘ls ~/.trash‘
alias ur=undelfile
undelfile(){
mv -i ~/.trash/[email protected] ./
}
trash(){
mv [email protected] ~/.trash/
}
source ~/.bashrc