#Shell基本命令
##目录相关
###创建新目录
mkdir [-mp] 目录名称
-m 配置文件权限
-p 递归创建目录
mkdir -m 777 hello
mkdir -p hello/hi/mm
###删除空目录
rmdir [-p] 目录名称
###查看文件与目录
ls [-aAdfFhilnrRSt] 目录名称
-a 全部文件
-d 列出目录
-h 将文件容量以人类教易读的方式列出来
-l 列出长数据串,包含文件的属性与权限
-r 将排序结果反向输出
-t 依时间顺序
ls -lrt 按照时间顺序反向输出(最后面显示的是最近的文件)
###复制、删除与移动:cp、rm、mv
####复制文件
cp 源文件路径 目的路径
cp 源文件路径1 源文件路径2 源文件路径3 目的路径
cp 文件* 目的路径
####复制文件夹
cp -r 文件夹源路径 目的路径
####只有源文件较目标文件新时复制。
cp -u 源文件 目标文件
####删除文件
rm 文件
强制删除:
rm -rf 文件/文件夹
-f (force)强制删除,从不给出提示
-i (interactive)进行交互式删除
-r,-R (recursive)指示rm将参数中列出的全部目录和子目录均递归地删除
####移动
mv 源文件/文件夹路径 目的路径
##查看操作
###文件内容查阅
cat:由第一行开始显示文件内容
-b 打印出非空白行做行号显示
-n 打印出行号,空白行也会有行号
tac:由最后一行开始显示
nl:显示的时候,顺便输出行号
more:一页一页地显示文件内容
/字符串 向下查询这个”字符串”这个关键字
:f 立刻显示出文件名以及目前显示的行数
q 退出more
空格键 向下翻滚一页
Enter 向下翻滚一行
less:与more相似,但可以往前翻页
空格键 向下翻滚一页
[PageDown] 向下翻滚一页
[PageUp] 向上翻滚一页
/字符串 向下查询这个”字符串”这个关键字
?字符串 向上查询这个”字符串”这个关键字
n 重复前一个查询
N 反向重复前一个查询
q 退出less
head:只看头几行
tail:只看结尾几行
###查看文件类型
file ~/.bashrc
==> ASCII text
file ~
==> Directory
###脚本文件名的查询
which(寻找”执行文件”)
###文件名的查找
whereis(寻找特定文件)
whereis [-bmsu] 文件或目录名
-b 只寻找二进制格式的文件
-s 只找source源文件
-u 查找其他特殊文件
locate
locate [-ir] keyword
-i 忽略大小写的差异
-r 正则表达式的显示方式
find
find [PATH]
###磁盘与目录的容量
df 列出文件系统的整体磁盘使用量
df [-ahikHTm] 目录或文件名
-a 列出所有的文件系统
-h GB、MB、KB等格式显示
df -h /etc
du 评估文件系统的磁盘使用量
du [-ahskm] 目录或文件名
-a 列出所有的文件与目录容量
-h GB、MB、KB等格式显示
-s 列出总量
查看文件夹大小:du -sh 文件夹名称
###连接文件:ln
hard link(硬连接或实际连接)
例如:ln /etc/crontab
symbolic link(符号连接)也就是快捷方式
ln [-sf] 源文件 目标文件
-s 如果不加任何参数就是hard link, -s就是symbolic link
-f 如果目标文件存在时,就主动将目标文件直接删除后再创建
例如:ln -s /etc/crontab crontab2
###磁盘分区、格式化、检验与挂载
fdisk 磁盘分区
fdisk -l 设备名称
mkfs 磁盘格式化
mkfs [-t 文件系统格式] 设备文件名
-t可以接文件系统格式,如ext3,ext2,vfat等
##压缩与打包
###压缩
gzip
###解压
gzip -d
###打包
tar cvf hello.tar hello
##文件编辑
vi/vim test.txt
i 进入插入模式
r 进入替换模式
###在命令行模式的操作说明:
w 将编辑的数据保存在硬盘中
w! 若文件属性为“只读”时,强制写入该文件。不过到底能不能写入该文件,还是跟你对该文件的权限有关。
q 离开 vi 常用
q! 若曾修改文件,又不想保存,q!为强制退出,且不保存。
wq 若为wq!则是强制保存后离开
ZZ 若文件没有改动,直接离开,若文件发送改动,保存后离开
r filename 在编辑的数据中,读入另一个文件的数据,即将“filename”这个文件内容(也可以是本文件)加到光标所在行后面
w filename 将编辑的数据保存成另一个文件
! Command 暂时离开vim到命令行模式下执行Command的显示结果
set nu 显示行号,设置后,会在每一行的前缀显示该行的行号
set nonu 与set nu相反,为取消行号
####移动光标的方式:
ctrl+f 屏幕向下移动一页
ctrl+b 屏幕向上移动一页
n n代表数字,输入数字按下空格,光标会向右移动这一行的 n 个字符
0或[home] 移动到这一行的最后面字符处
$或[end] 移动到这一行的最后面字符处
G 移动到这个文件的最后一行
nG n为数字,移动到这个文件的第n行
####vim的功能
V 字符选择,会将光标经过的地方选择
v 行选择,会将光标经过的行选择
ctrl+v 块选择,可以用长方形的块选择
####多窗口功能
在命令行模式输入 :sp [filename] 即可
两个文件之间使用 ctrl+w+↑ ctrl+w+↓ 来相互切换
###选取命令:cut、grep
cut -d ‘分隔符’ -f fields
cut -c 字符范围
将PATH路径使用:分割,选取第5个输出
echo $PATH | cut -d ‘:’ -f 5
echo $PATH | cut -d ‘:’ -f 3,5
输出后12位字符的所有字符串
echo $PATH | cut -c 12-
grep [-acinv] ‘查找字符串’ filename
-a 将binary文件以text文件方式查找数据
-c 计算找到’查找字符串’的次数
-i 忽略大小写的不同
-n 输出行号
-v 反向选择,找出不存在所查找字符串的行
–color=auto 将找到的关键字加颜色显示
###字符转换命令:tr、col、join、paste、expand
tr [-ds] ‘字符串’
-d 删除信息中的’字符串’
-s 替换掉重复的字符
删除文件中的hi
cat hello | tr -d ‘hi’
文件hello中的大小写替换
cat hello | tr ‘[a-z]’ ‘[A-Z]’
###文件切割命令 split
split [-bl] file PREFIX
-b 后面可接受切割文件大小
-l 以行数进行切割
PREFIX 作为切割文件的前导文件
切割:
split -b 300k /etc/temp tmp
合并:
cat tmp* >> tempback
#Shell进阶
##定时crontab任务
crontab *
###编辑crontab任务
crontab -e
###列出crontab任务
crontab -l
###时间设置
minute(分钟) hour(小时) day-of-month(每天) month-of-year(每月) day-of-week(每周)
###服务操作
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
##管道命令(pipe)
###将ls输出的内容使用less来读取
ls -al /etc | less
##find命令
find [指定查找目录] [查找规则] [查找完后执行的action]
1. 查找当前路径下的所有文件目录
find [目录] -type d
2. find命令之exec
find [目录] -type d -exec 命令 {} \;
{} \; 是标准写法表示所有
3. 场景:有些时候需要对指定路径下的所有目录做指定操作
将home目录下的目录类型的文件列出来
find /home -type d -exec ls -l {} \;
删除home目录下的所有文件
find /home -type f -exec rm -rf {} \;
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
查找一天前修改过的文件
find /home -type d -mtime +1;
###sftp -oPort=22 user@IP Address
put 将本地文件上传到远程路径
put 本地路径 远程路径
get 将远程路径下的文件下载到本地
get 远程路径 本地路径
lls 显示本地详细信息
lcd 本地路径
lpwd 打印本地路径
put 文件名 把linux当前目录下的文件上传到sftp服务器的当前目录下
get 文件名 把sftp服务器当前目录下的文件下载到linux当前目录下
###while : ; do // 死循环
-eq 等于
-ne 不等于
-le 小于等于
-ge 大于等于
-lt 小于
-gt 大于
echo $(date +%YMH) 得到当前日期
echo $(date +%W) 得到一年中的第几周
echo $(date +%w) 得到本周的第几天
##数据流重导向
###cat命令创建一个文件的简单流程
cat >> [文件名]
###变量的截取
从右往左截取0-8位:${subdir:0-8}
假设有变量 var=http://www.google.com/test.htm
1、 # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.google.com/test.htm
2、 ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.google.com/
结果是 test.htm
3、 %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.google.com
4、 %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5、 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6、 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.google.com/test.htm
7、 从右边第几个字符开始,及字符的个数
echo ${var:0-8:4}
其中的 0-8 表示右边算起第八个字符开始,3 表示字符的个数。
结果是:test
8、 从右边第几个字符开始,一直到结束。
echo ${var:0-8}
表示从右边第八个字符开始,一直到结束。
结果是:test.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用1表示)