Linux命令2 --文件操作

2022-08-09

生成文件,文件夹

~/Desktop/a$ touch a.txt

touch命令可以生成文件,但不能生成目录。

$ mkdir aa

mkdir用于创建目录。

这样我们可以看到:

~/Desktop/a$ ls
aa  a.txt

创建隐藏文件:

$ touch .test

以.开头即可。

删除文件,目录

$ rm a.txt
$ rm -d aa
$ rm -r aa

如果不加参数,rm只能删除文件,加上参数-d或-r之后即可删除目录。但是当目录不为空不能直接删,这个时候需要-rf

rm -rf 可以删除多级目录

文件和文件夹的移动和复制

~/Desktop$ mv test.txt a

在Desktop目录下,将test.txt移动到了a目录。

也可以使用绝对路径移动:

~/Desktop$ mv test.txt /home/Desktop/a

mv不仅可以移动文件,还可以移动目录:

~/Desktop$ mkdir bb
~/Desktop$ mv bb a

使用cp命令进行复制:

$ cp a.txt bb

把a.txt复制到bb文件夹中。

复制目录的时候要用-r指定才行:

~/Desktop$ cp -r a/bb aa

这个命令将a文件夹下bb文件夹复制到了Desktop下的aa文件夹,注意加-r。

如果要剪切、复制到当前目录,把最后的换成.即可:

$ cp a.txt .
~/Desktop$ cp -r a/bb .

移动+改名:

~/Desktop$ mv  a/a.txt bb/b.txt

将a下的a.txt移动到bb目录下并改名为b.txt

方向键取得命令

按方向键上可以取得上一条命令,按两次可以取得上上条,以此类推

文件搜索

先来看看我们之前的搜索:

~$ ls 1*.txt
~$ ls 12??.txt

是靠罗列和通配符的筛选,方法上有局限。

按照文件名搜索

更加强大的搜索功能find:

~/Desktop$ find /home -name a.txt
/home/bo/Desktop/aa/a.txt
/home/bo/Desktop/a/a.txt
/home/bo/Desktop/a/bb/a.txt
即find +路径 -name 文件名

注意搜索的时候路径范围一定要尽量精确,否则可能会造成范围没有权限搜索失败的情况

find命令让我们在不知道文件在哪的情况下都可以查找到

注意,*和?依然可以使用,但是文件名最好加上单引号,有的文件名是包含空格,单引号表示整个表达式是一个文件:

$ find /home -name 'a.txt'
$ find /home -name '*.txt'

如果是涉及大小写字母的文件:

$ find /home -iname 'a.txt'

这样就是不区分大小写的搜索。a.txt和A.txt都会被搜索到。

按照文件大小搜索

$ find /home -size +1
$ find 路径 -size 大小

+1就是大于512字节(0.5k)的文件,1就是一个数据块,-1就是小于一个数据块(512字节)

按照文件所属人(当有多个所属人时)和文件类型搜索

$ find /home -user bo
$ find 路径   -user 所属人
$ find /home -type f
$ find /home -type 类型(f/d/l)

文件类型有三种,文件(f)文件夹(d)软链接(l)。

注:可以用条件连接符-a来组合多种条件(option)

$ find /home/Desktop -name '*.txt' -a -user bo -a -type f

这样可以搜索同时三个条件:名字,用户和类型。

还可以通过文件id搜索:

$ ls -li
列出文件id
$ find /home -inum 11890
$ find 路径   -inum id

使用locate搜索

locate搜索速度很快,加上文件名即可把所有带有该名称的文件包括目录找出来

$ locate a.txt

文件内容的查看和搜索

$ cat a.txt
$ cat -n a.txt
$ more a.txt

两种方法,cat是直接将文件内容打印出来,more会有一个新的页面来展示内容。

cat -n可以把行号打印出来

$ grep abc a.txt
$ grep -n abc a.txt
$ grep -v abc a.txt

a.txt中所有含有abc的行都会被打印出来。加上-n还会显示abc在哪一行。-v是反向搜索,搜索不含有abc的行。

搜索有些特殊符号如#最好带上单引号:

$ grep '#' a.txt

硬链接和软链接

Linux链接分两种:

  • 硬链接 A–B,假设B是A的硬链接,那么他们两个指向的是同一个文件,也就是允许一个文件拥有多个路径,用户可以通过这个机制将硬链接建立在重要文件以防误删

  • 软链接:类似Windows下的快捷方式,删除原文件,快捷方式也就访问不了了。

    创建链接测试,使用ln命令!:

    root@:~# touch f1             创建一个f1文件
    root@:~# ls
    f1  snap
    root@:~# ln f1 f2             创建一个硬链接f2
    root@:~# ls
    f1  f2  snap
    root@:~# ls -s f1 f3			创建一个软链接f3
    ls: cannot access 'f3': No such file or directory
    0 f1
    root@:~# ln -s f1 f3
    root@:~# ls
    f1  f2  f3  snap
    root@:~# echo "i love bo" >>f1         向f1中写入字符串
    root@:~# ls
    f1  f2  f3  snap
    root@:~# cat f1
    i love bo
    root@:~# cat f2
    i love bo
    root@:~# cat f3
    i love bo
    root@:~# rm -rf f1           删除原文件f1
    root@:~# ls
    f2  f3  snap                 发现f3变成红色,已经无效
    root@:~# cat f2              此时访问f2硬链接还是可以访问到
    i love bo
    cat: f3: No such file or directory   f3却不在是文件
    

    由此,备份一定用硬链接,即ln不加参数