Linux之四:文件操作命令详解

目录列表

cd

cd : change directory 改变目录

cd /dir : 切换到指定的目录中

注意:绝对路径和相对路径

cd /dir 和 cd dir 完全不同的,前者是根目录下找dir , 后者是在当前目录下找dir

cd .. : 切换到上一级目录

ls

ls - list directory contents

列出当前目录或指定的目录下所有文件

ls 直接查看当前目录下的文件

ls /dir : 查看指定目录下的文件

ls -a : 查询当前目录下所有的文件包括隐藏文件

ls -l dir : 查询列出指定目录dir 下所有文件的详细信息。

ll

等价于 ls -l

ll /usr 列出/usr 目录下文件信息

查看文件内容

cat filename : 查看指定文件的内容

head -5 filename : 查看指定文件中的前 5 行内容

tail -5 filename : 查看指定文件中的后 5 行内容

more filename : 分部分查看文件内容的。按百分比提示已经显示的内容,可以使用 空格键 来切换下一屏内容

删除文件

rm : remove files or directory 删除文件或目录

[root@wang dir]# rm *.txt            # 默认会提示删除,匹配,* 表示任意个任意字符
rm: remove regular empty file ‘Test2.txt’? y
rm: remove regular empty file ‘Test3.txt’? y
rm: remove regular empty file ‘Test4.txt’? y
rm: remove regular empty file ‘Test5.txt’? y
[root@wang dir]# ls
java  Test2.java  Test3.java  Test4.java  Test5.java  x
[root@wang dir]# rm -f *.java        # -f force  强制无提示删除
[root@wang dir]# ls

rm Test.java : 直接提示删除文件

rm -i Test.java :提示删除

rm -f Test.java : 无提示直接删除

rm -r dir : 递归删除目录。 删除目录 必须带 -r

rm -rf dir : 递归无提示直接删除目录

rm -rf * : 把当前目录下所有的文件和目录删除

创建文件、查看文件、复制文件、移动文件、重名文件、删除文件

创建目录:
[root@zhangpeng opt]# mkdir zhang
[root@zhangpeng opt]# ls
rh  zhang
[root@zhangpeng opt]# cd zhang
[root@zhangpeng zhang]# ls
[root@zhangpeng zhang]# pwd
/opt/zhang
[root@zhangpeng zhang]# 

上面只能创建一级目录,如果需要创建多级目录,使用选项 -p

[root@zhangpeng zhang]# mkdir -p a/b/c     ## 注意:多级目录 使用 -p
[root@zhangpeng zhang]# ls
a  Test.java
[root@zhangpeng zhang]# ls a
b
[root@zhangpeng zhang]# ls a/b
c
[root@zhangpeng zhang]# 
创建文件:
[root@zhangpeng zhang]# touch Test.java    ## 创建一个空的文件,命名为 Test.java
[root@zhangpeng zhang]# ls
Test.java

touch命令有两个功能:

一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;

二是用来创建新的空文件。

touch:创建共10个文件

touch java{1..10}
[root@zhangpeng wang]# touch user{1..10}.java        //创建多个文件,名字变量
[root@zhangpeng wang]# ls
a    Test{2-10}  user10.java  user2.java  user4.java  user6.java  user8.java
dir  Test.java   user1.java   user3.java  user5.java  user7.java  user9.java
[root@zhangpeng wang]# 
文件复制

cp - copy files and directories

[root@wang dir]# ls
dir  test  Test.java
[root@wang dir]# cp Test.java Test.txt    同目录下单文件复制
[root@wang dir]# ls
dir  test  Test.java  Test.txt
[root@wang dir]# ls dir
[root@wang dir]# cp *Test* dir  # 拷贝当前目录下文件名包含Test 字符串文件 复制到 dir 目录下

目录拷贝:

[root@wang dir]# ls dest
[root@wang dir]# cp dir dest        # 默认 文件夹不能直接复制的
cp: omitting directory ‘dir’
[root@wang dir]# cp -r dir dest        # 使用-r 拷贝。表示递归拷贝
[root@wang dir]# ls dest
文件移动

mv - move (rename) files

当前目录下的文件重命名,不能实现文件夹的重命名

移动文件或多个文件到指定目录下

移动目录或多个目录到指定目录下

[root@wang dir]# ls
dest  dir  test  Test2.jva  Test3.jva  Test4.jva  Test5.jva  Test.java  Test.txt
[root@wang dir]# mv Test.txt TT.txt        # 重命名 当前目录下做的文件移动
[root@wang dir]# ls
dest  dir  test  Test2.jva  Test3.jva  Test4.jva  Test5.jva  Test.java  TT.txt
[root@wang dir]# mkdir a
[root@wang dir]# ls
a  dest  dir  test  Test2.jva  Test3.jva  Test4.jva  Test5.jva  Test.java  TT.txt
[root@wang dir]# mv *.jva a                # 把指定后缀的类型文件 全部移动到指定的目录 a 下
[root@wang dir]# ls
a  dest  dir  test  Test.java  TT.txt
[root@wang dir]# ls test
Test.java
[root@wang dir]# mv test dest            # 把目录test 直接整个移动到目录 dest下
[root@wang dir]# ls
a  dest  dir  Test.java  TT.txt
[root@wang dir]# ls dest
dir  test
文件重命名

rename

rename old new filename : 重命名文件或文件夹(目录)

old 表示原文件名中包含的字符串

new 表示更换后的字符串

filename 表示原有文件名

[root@wang dir]# ls
dest  dir  myfile.txt  T.java  TT.txt  xyz
[root@wang dir]# rename myfile testfile myfile.txt        #把myfile.txt 文件名中的myfile字符串换为 testfile
[root@wang dir]# ls
dest  dir  testfile.txt  T.java  TT.txt  xyz
[root@wang dir]# rename dir newdir dir                    # 重命名文件夹
[root@wang dir]# ls
dest  newdir  testfile.txt  T.java  TT.txt  xyz
[root@wang dir]# 
vi 文件编辑

vi(全称:Visual Editor)是一种基于命令行的文本编辑器

Vim 是一款基于终端的文本编辑器,它是vi(Visual Editor Improved)的改进版本,由 Bram Moolenaar 开发

三种模式:命令模式、底行模式、编辑模式

进入默认是命令模式,

Ctrl+u: 向上翻半屏 Ctrl+d:向下翻半屏 Ctrl+f: 向下翻一屏 Ctrl+b: 向前翻一屏

dd : 删除当前光标所在的一行

shift+d : 删除当前光标所在的行,光标之后的此行内容

切换到编辑模式:

  • 在当前光标位置前插入:i

    在当前光标位置后插入:a

    在当前行尾插入:A

    新建一行并插入:o(在当前行下方新建),O(在当前行上方新建)

  • 保存并退出:

    • 先按 ESC

      键回到命令模式,然后输入以下命令:

      • 保存并退出::wq
      • 强制保存并退出(即使无权限写入文件)::wq!
      • 不保存并退出::q!

编辑模式切换到命令模式:esc 进入命令模式

底行模式

命令模式进入底行模式:

在命令模式下,输入冒号:":"

:wq 保存并退出

:q 直接不保存退出

:q! 强制不保存退出

:set nu 设置行号的

:set nonu 取消行号的

:/string 搜索文件中的string 字符串,区分大小写的

替换指定字符串:%s/hadoop/mongoDB

注意:%s 后面都没有空格,如果有空格,表示匹配的字符

%s/String /int :因为有空格,所以匹配时,找到所有String后有空格才会被替换。

:?str 文件内容中搜索指定的字符串str ,n 向上指向下一个,shift+n 向后找下一个

文件搜索

NAME find - search for files in a directory hierarchy

SYNOPSIS find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

[root@wang dir]# find /opt -name "*txt*"    #在指定的目录下搜索 文件名中包含指定字符串的所有文件(包含目录及子目录)

[root@wang dir]# find  -name "*txt*"        #在当前目录下搜索

按类型搜索 文件或目录 类型

[root@wang dir]# find -type d   # 搜索当前目录下所有的目录。  -type 表示文件类型  d表示目录  f 表示文件
.
./dest
./dest/dir
./dest/test
./xyz
./newdir
[root@wang dir]# 

[root@wang dest]# find -type f  # 搜索所有文件 不包含目录
./dir/Test2.jva
./dir/Test3.jva
./dir/Test4.jva
./dir/Test5.jva

按类型和名字搜索

[root@wang dir]# find -type d -name "*t*"   # 按类型  找出名字中包含t的所有目录
./dest
./dest/test

按类型&名字&大小搜索

-size 表示按文件大小

+50M : 大于50M

50M : 等于50M

-50M : 小于50M

[root@wang dir]# find /opt -type f -name "*.rpm" -size +50M   
/opt/soft/jdk-11.0.12_linux-x64_bin.rpm
/opt/soft/mysql/mysql-community-server-8.0.26-1.el7.x86_64.rpm
/opt/soft/mysql/mysql-community-test-8.0.26-1.el7.x86_64.rpm

按大小 字节来搜索,注意使用 c

[root@wang dir]# find  -type f  -size 8c  # 搜索文件大小正好是8字节的文件
./dest/dir/Test.java
./dest/dir/Test.txt

find -type f -size 2 : 注意:没有指定单位的,默认0.5k , 默认单位是 b。

-size +2b: 一个b 表示512字节,2b 表示1024个字节

linux下的find命令用来查找文件,-size 表示大小 -size n[cwbkMG] File uses n units of space. The following suffixes can be used:

  b    for 512-byte blocks (this is the default if no suffix is used)

  c    for bytes

  w    for two-byte words

  k    for Kilobytes (units of 1024 bytes)

  M    for Megabytes (units of 1048576 bytes)

  G    for Gigabytes (units of 1073741824 bytes)
文件属性

stat filename 查看文件详细属性

[root@zhangpeng mydir]# stat Test.java
  File: ‘Test.java’
  Size: 106           Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 3658000     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2021-08-14 17:56:52.709614840 +0800
Modify: 2021-08-14 17:56:52.709614840 +0800
Change: 2021-08-14 17:56:52.710614834 +0800
 Birth: -

- File:显示文件名 - Size:显示文件大小 - Blocks:文件使用的数据块总数 - IO Block:IO块大小 - regular file:文件类型(常规文件) - Device:设备编号 - Inode:Inode号 - Links:链接数 - Access:文件的权限 - Gid、Uid:文件所有权的Gid和Uid。

Linux下的三个时间:

  1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间

  2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。

  3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

文件统计

1)du 查看指定文件大小

查看指定文件的字节数 -b

[root@zhangpeng mydir]# du -b Test.java
106    Test.java

查看指定文件的大小 默认为 k

[root@zhangpeng mydir]# du -k Test.java   ## 等价于 du Test.java
4    Test.java
[root@zhangpeng mydir]# du -h Test.java  ## -h 使用易读的方式显示大小 带单位
4.0K    Test.java

注意和提醒: 默认单位K。如果文件大小不足4K时,显示4K 。

原因是:占用空间取决于文件系统的块(block)的大小,linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k

[root@zhangpeng mydir]# du -sh /usr   ### -s 表示--summarize,仅列出总量,而不列出每个目录和文件的大小
3.8G    /usr

2)wc (Word Count)

wc - print newline, word, and byte counts for each file

命令的功能为统计指定文件中的字节数、字数、行数 -c 统计字节数。 -l 统计行数。 -m 统计字符数。这个标志不能与 -c 标志一起使用。 -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。 -L 打印最长行的长度

[root@zhangpeng mydir]# wc Test.java      
  7  11 106 Test.java
[root@zhangpeng mydir]# wc -c Test.java
106 Test.java
[root@zhangpeng mydir]# wc -w Test.java
11 Test.java
[root@zhangpeng mydir]# wc -l Test.java
7 Test.java
[root@zhangpeng mydir]# wc -L Test.java
43 Test.java
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zp8126

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值