Linux基础04 移动(剪切)mv, 删除rm, 看文件内容cat, tac, more, less, 看前后n行head, tail, 三剑客grep

移动(剪切)mv

    mv:移动 move    # 系统默认别名mv -i 为mv(-i交互,在覆盖前会进行提醒),经测试我的centos7虚拟机并没有该别名...
    
    mv [OPTION]... 源文件 目标
    -i:交互(在覆盖前会进行提醒)
    -t:调换目标和源文件位置
   -f: 强制替换
1.如果目标是一个目录,就把文件放入目录 2.如果目标是一个文件,就会被覆盖 [root@db04 ~]# mv file /tmp/ [root@db04 ~]# mv file1 test1 # 如test1不存在, file1改名为test1。test1存在且为文件,覆盖; 如为目录, 放到该目录下 [root@db04 ~]# mv dir1 /tmp/ [root@db04 ~]# mv dir2 file4 file5 file6 /opt/ /usr/local/ # 移动dir2..., opt文件夹到/usr/local/路径下 [root@db04 ~]# mv /tmp/dir1 ./ [root@db04 ~]# mv /tmp/dir1 . [root@db04 ~]# mv /tmp/dir2 ../ [root@db04 ~]# mv -t /tmp/ file1 file2 ./file3 # 注: 在移动很多内容的文件夹时使用下方命令 绝对路径执行命令:就是执行命令本身,不经过alias(别名) # which cp获取命令位置,使用 /usr/bin/cp ... 命令前面加上转义符'\':就是执行命令本身,不经过alias # \mv hig qqq 或者 /bin/mv hig qqq
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快,数据位置没有变化
不同分区移动数据,速度相对慢,数据位置发生了变化

 利用 rename 可以批量修改文件名

rename [options] <expression> <replacement> <file>...
#常用选项
-v|--verbose     #显示过程
-s|--symlink     #如果目标是链接文件,则是重命名其指向
-n|--no-act       #不做任何改变
-o|--no-overwrite #不覆盖己存在文件

#为所有的f开头包含conf的文件加上.bak后缀
[root@rocky86 ~]# rename 'conf'   'conf.bak'   f* 
#去掉所有的bak后缀
[root@rocky86 ~]# rename '.bak' '' *.bak
#将当前目录下 以.txt结尾的文件,批量改名成 .log结尾
[root@rocky86 ~]# rename -v txt log *.txt
#将 abc.link 指向的文件由 abc 改成 xyz
[root@rocky86 ~]# rename -s abc xyz abc.link

#不同版本用法不一样

[root@rocky8.6 ~]# rename -V
rename from util-linux 2.32.1
[root@ubuntu2204 ~]# rename -V
/usr/bin/rename using File::Rename version 1.30, File::Rename::Options version 
1.10
[root@ubuntu2204 ~]# ls
f1.conf f2.conf
[root@ubuntu2204 ~]# rename 's/conf$/conf.bak/' f* 
[root@ubuntu2204 ~]# ls
f1.conf.bak f2.conf.bak

 

删除 rm

    rm:删除 remove
    -i:交互
    -r:递归
    -f:强制删除(force)
    -v:显示删除过程
   企业当中会给rm命令设置别面,给危险的命令加上一个保险 [root@oldboyedu
~]# rm -r zls rm: descend into directory ‘zls’? y rm: descend into directory ‘zls/zls1’? y rm: descend into directory ‘zls/zls1/zls2’? y rm: remove directory ‘zls/zls1/zls2/oldboy’? y rm: remove directory ‘zls/zls1/zls2’? y rm: remove directory ‘zls/zls1’? y rm: remove directory ‘zls’? y 注: 最好别名永久禁止rm命令,写入/etc/bashrc重启也会生效, 再执行source /etc/bashrc即可

避免误删除,定义别名

[root@ubuntu2204 ~]# alias rm='mv -t /tmp'

 

查看文件内容cat tac

    cat:查看
    -n:查看文件内容并显示行号
    -A:显示文件的结束符和tab键 相当于-vET
    ----------------------------------------
    -b:空行不显示编号
    -E:显示文件的结束符($)
    -T:显示文件的tab键(^I)
    
    cat >> zls.txt << EOF    # 写入文件
    卧槽
    作者:曾老湿
    江山风景美如画,
    本想吟诗赠天下。
    奈何自己没文化,
    一句卧槽浪好大。
    谢谢大家。
    EOF
  # 注意如果写入的内容有特殊字符如$,EOF加引号, cat >> zls.txt << "EOF"


  > :输入重定向   >> :追加重定向
  [root@oldboyedu ~]# > /etc/bashrc  # 相当于清空文件,非常危险
    
    用法:cat [选项]... [文件]...
    
    [root@oldboyedu ~]# cat 123
    file1
    [root@oldboyedu ~]# cat 456
    file2
    [root@oldboyedu ~]# cat 123 456
    file1
    file2
    
    tac    # 文件内容从尾到头反向输出

分页查看文件命令 more,less

    more    # 按空格是翻页, 按回车是一行一行显示, 按q退出(cat把所有内容全加载到内存里,太大会崩。用more没事)
    [root@oldboyedu ~]# more /etc/services
   空格/f  向下翻页
   b     向上翻页
   回车键  向下显示一行
   q     退出
   /     搜索关键字,不会高亮显示
   =     显示当前光标所在行
   -N(数字) 指定分页显示内容的函数
   +N(数字) 指定从第几行显示文件内容
   文件显示完成会自动退出
less # 有查找功能 [root@oldboyedu ~]# less /etc/services
   -N    显示行号
   空格/f  向下翻页
   b     向上翻页
   回车键  向下显示一行
   q     退出
/ + 关键字 搜索关键字,会高亮显示 n:向下搜索 N:向上搜索(shift + n) 或者开启大写键也行 [root@oldboyedu ~]# less -m -N /etc/services # 其中-m显示百分比,-N显示行号。 输入操作命令G转到最后一行。(输入g跳转到第一行)
   文件显示完成不会自动退出

查看文件的前n行

    head + 文件名
    默认显示前10行
    -n:显示前n行,n可以不写,为数字,n后面加数字
    [root@oldboyedu ~]# head /etc/services
    #查看文件前20行
    [root@oldboyedu ~]# head -n 20 /etc/services 
    [root@oldboyedu ~]# head -20 /etc/services
   -cN(数字)  显示文件内容的前多少个字符
tail + 文件名 默认显示后10行 -f:追踪文件末尾 相当于 tailf (通过再开一个窗口,echo 123 >> services左右对比测试)
   -F:实时查看文件内容的更新,当文件不存在时,会一直尝试 [root@oldboyedu
~]# tail -f services 等同于 tailf services -n:显示后n行,n可以不写,为数字,n后面加数字 tail -n 5 services 或 tail -5 services
   -cN(数字)  显示文件内容的最后多少个字符(包含一个换行符)

  tailf  实时查看文件内容的更新

 

 

三剑客之一:过滤grep

    grep:过滤关键字
    -n:显示行号    # grep -n '.' passwd |grep -w '^20'  查找第20行
             # grep -n '.' passwd |grep -Ew '^15|16' 匹配15,16行
-o:只显示关键字 # grep -on 'root' /etc/passwd显示行号不然分不清
   -c:统计过滤出来的内容总共多少行
-B:显示关键字的前n行,n为数字 (before)# grep -B 2 '呵呵' zls.txt -A:显示关键字的后n行,n为数字 (after) -C:显示关键字的前后n行,n为数字(center)# grep -C 1 '' zls.txt 等于 grep -B 1 -A 1 '' zls.txt
   # grep -2 本想 zls.txt   # 可以不加直接 -数字
-v:取反 # grep -v '^[a-f]' /etc/passwd -i:忽略大小写,不区分大小写 -E:支持多关键字,多个关键字之间要用竖线 '|'分隔 相当于egrep # grep -E 'root|bash|mail' /etc/passwd # egrep '^root|^bash|^mail' /etc/passwd 以root,bash或mail开头
            # egrep -v '^$|^#' /etc/services  # 去除services中的空行和注释开头的行
   -w:只过滤匹配的字符串(一整串字符串)
^ :以...开头 $ :以...结尾 . :代表任意字符 * :代表所有 # grep '.*' /etc/passwd 匹配所有 | :管道符,将前面命令输出的结果,交给后面的命令去处理 # ifconfig |grep eno
   -r, -R:递归过滤 某一目录下的 文件中的关键字  # grep -R 'root' ./ [root@oldboyedu
~]# grep '^root' /etc/passwd # 以root开头 [root@oldboyedu ~]# grep 'bash$' /etc/passwd # 以bash结尾 [root@oldboyedu ~]# grep -n '' zls.txt # -n显示行数(从1开始计数) [root@oldboyedu ~]# grep -n '^$' zls.txt # 查找空行 #以数字的范围开头 [root@oldboyedu ~]# grep -n '^[0-9]' passwd 26:1 27:2 28:3 [root@oldboyedu ~]# grep -n '^[6-9]' passwd [root@oldboyedu ~]# grep -n '^[1-2]' passwd 26:1 27:2 #以字母的范围开头 [root@oldboyedu ~]# grep -n '^m' passwd 13:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin [root@oldboyedu ~]# grep -n '^[m-n]' passwd   # []表示多个字符串,会单个匹配[]里面的内容,[^]表示不包含 13:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 17:nobody:x:99:99:Nobody:/:/sbin/nologin [root@oldboyedu ~]# grep -n '^[a-z]' passwd # 开头a-z范围 [root@oldboyedu ~]# grep -n '^[a-Z]' passwd [root@oldboyedu ~]# grep -i 'ftp' passwd

   #匹配空行
   grep '^$' passwd  # 有空格,tab键,空字符串的行的,不算空行
   grep -v '^\s*$' passwd # 不包含空行,或空白字符(包括tab), *表示出现0次或0次以上
   # 过滤以.结尾
   grep '\.$' oldboy.txt  # \ 转义,取消特殊字符的特殊含义
   # 匹配以m开头或n开头的行
   grep '^[mn]' oldboy.txt
   # 排除不以m/n开头的行
   grep -v '^[mn]' oldboy.txt
   grep '^[^mn]' oldboy.txt  # ^在中括号里面是不匹配的意思

   # {n,m} 匹配其前面的字符至少n次,至多m次(如果写一个就是精确匹配多少个)
   grep '[0-9]{17}' id.txt # 前面字符串只匹配17个
grep '[0-9]{17}[0-9X]{1}' id.txt # 匹配身份证号
grep -Ev '^$|^#' /etc/ssh/sshd_config

 

posted @ 2021-10-13 12:00  战斗小人  阅读(177)  评论(0编辑  收藏  举报