Linux命令形式: 命令 [参数] [路径文件] []代表可选
rm -f /tmp/log.log
为什么需要参数,因为一个命令有多重功能,多种用途
1、创建一个目录: mkdir /data (make directory)
2、查看某个目录或文件 :ls -ld /data (list l: long d:目录)以长格式查看目录
drwxr-xr-x 2 root root 4096 Jun 24 08:30 /data
3、在 /data 下摸一个文件 log.txt: (就是摸一下文件,如果文件不存在,就新建文件,如果存在,就改变文件的访问时间atime等时间戳信息)(用于创建文件或修改文件的时间戳)
touch log.txt touch /data/log.txt
4、Vi 编辑器:
vi a.txt (如果这个文件不存在,也会直接创建)
vi 的模式:
命令模式下退出 vi
:q 退出
:wq 保存退出
:q! 强制不保存退出
:wq! 强制保存退出
echo: 打印输出内容
单行文本的覆盖:
echo "i am happy" > a.txt (重定向,会把 a.txt 的内容删除,覆盖为 i am happy)
不想覆盖,追加到末尾(追加重定向)
echo "aaaaa" >> a,txt
echo "aaaaa" >> a,txt <<EOF (末尾追加EOf)
符号
: 多个命令的分隔符
/ 根或多个路径的分隔符
> 重定向 (数据流朝着箭头的方向流动),覆盖原来的文件
>> 追加重定向(数据流朝着箭头的方向流动),在原来的文件的 【结尾】,【追加】内容
<< 还有这种流向
.. 上一级目录
. 当前目录
~ (波浪线)用户的家目录
cat命令:不仅仅查看,还可以写入
cat >a.txt (回车后我们就可以进行写入操作了,写完想结束就按 Ctr+C ) 【覆盖】
cat >>a.txt 【追加】
把 old.txt 拷贝到 /tmp 目录下
cp old.txt /tmp (cp 文件 路径)
cp /data/old.txt /tmp/ 完成路径拷贝
cp 默认情况下只能拷贝文件,不能拷贝目录
拷贝目录
cp -a 或者 cp -r
cp -a /etc /tmp
-a (相当于 -pdr)
-p (保持属性一样)
-r (递归,用于复制目录)
移动目录或文件
mv [-ifu] [源文件 / 源目录] [目的文件 / 目的目录]
- i :如果目的文件已存在,询问是否覆盖
- f :强制执行,不会询问
- u:若目的文件存在,则比源文件新,才会移动
问题:如果文件已存在,如何进行覆盖不提示?
cp /tmp/test.txt /mnt/
\cp /tmp/test.txt /mnt/ (在命令前面加一个 \ 就不会进行提示)
查看目录结构:
tree:
xargs :用于把 find / ls 的输出交给后面处理
alias (查看计算机中所有命令的别名)
cp = cp -i (复制时进行询问,输入cp ,相当于输 入 cp -i)
unalias cp (取消别名,这个时候再输入 cp 复制命令就不会提示询问了,尽量不要改,因为root权限很多人使用)
(可以自己添加别名,我们可以把多个名利组成一个简单的命令操作,重启电脑就失效了,但是我们可以定义永久别名)
查看命令的位置:
which cp
/bin/cp (命令的位置)
还可以使用(whereis,locate,find)
find : 在目录下查找文件 (注意:重要)
find / type f - name "cat" (从根目录开始查找,类型是文件,名字叫 “cat”)
/bin/cat
find 按时间删除
find / -type f -mtime +5 (找出五天前的文件)
find / -type f -mtime -5(最近五天)
find /log -type f -mtime -name "*.log" -5|xargs rm -f (删除 /log 库下的最近五天的所有日志 ,find 会自动去寻找 )
-type f 文件
d 目录
find的时间表
有用的查找方法:
从当前目录开始查找:查找文件名为 server.properties 其中包含 “2005”
find . -type f -name "server.properties" |xargs grep "2005" (.表示从当前目录)
grep -i : 不区分大小写
$grep -5 'parttern' inputfile //打印匹配行的前后5行
$grep -C 5 'parttern' inputfile //打印匹配行的前后5行
$grep -A 5 'parttern' inputfile //打印匹配行的后5行
$grep -B 5 'parttern' inputfile //打印匹配行的前5行
查看 ett.txt 的 20-30 行数据
head -30 ett.txt | tail -11
sed -n 20, 30p ett.txt (-n 取消默认输出)
seq 1 2 9 (输出 : 1 3 5 7 9 行:这样会隔行输出)
seq 20 30 > a.txt (这样我们就把20-30行输出到 a.txt 中,这样我们就可以查看了)
awk '{if(NR?19&&NR<31) print &0}' ett.txt NR 表示行号
sed适合行
awk适合列
1:2:3:4的数据
awk -F ":" '{print $1}' 文件名 (以 : 为列分割 ,$1 打印第一列)
sed 替换
sed -i s#aaaaaaa#bbbbbbbbb#g 文件名 (要替换的内容是aaaa,替换的结果是bbbb) 没文件名是全替换,我们需要加文件名 (加 -i 代表 是插入,不加不会修改文件,只是输出改变而已)
find / -type f -name "a.txt"|xargs sed -i s#aaaaaaa#bbbbbbbbb#g (使用find可以实现从哪个目录开始查找所有这个名字的文件进行替换)
sed -i s#aaaaaaa#bbbbbbbbb#g a.txt 进行替换
find / -type f -name "a.txt"|xargs cat (批量进行查看所有的 a.txt)
find / -type f -name "a.txt"|xargs ls (find可以进行一个文件一个文件的进行处理)
查看日志的方式:
1. 应用场景二:根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;
先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点
2.应用场景三:日志内容特别多,打印在屏幕上不方便查看
(1)使用more和less命令,
如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:cat -n test.log |grep "debug" >debug.txt
常用快捷键:
Ctr +C :终止当前任务命令或程序
Ctr+D : 退出当前用户环境。相当于exit,logout
Ctr+Shift+c(ctr+insert) 复制
Ctr+Shift+v(shift+insert) 粘贴
ctr+a :命令行的移动 :一行命令的开头
ctr+e : 一行命令的结尾
ctr+U: 不留痕迹的清除你写的命令
ctr+R : 自动帮我们从历史记录查找命令
!历史记录的行号 (就可以执行历史记录这一行的命令)
命令的帮助
man 命令 (man ls)
管道:
就是把前一个的处理结果交给后面处理 , 管道可以有多个
把 find 命令查找到的所有文件 送进管道进行,后面一个命令取出进行删除
find命令的高级使用
查看系统的日志
dmesg
Linux 的比较工具:
vimdiff a.txt b.txt
退出是 :q!
需要Linux视频(本人花钱购买的,可苗费赠送)教程可加WX:duye13533164533
Linux系统视频教程:https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.4ace1deb4a6RwP&ft=t&id=627367898363
jvm高级进阶优化教程:https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.4ace1debpKnCp8&ft=t&id=627374195856