jjzjj

Linux基础-文件管理

你丶 2023-10-07 原文

一、文件管理

[TOC]

目前服务器端的主流文件系统是:ext4与xfs;

df -T 查看磁盘的格式化的格式,主流一般是 xfs 和ext4,系统盘默认是xfs,后续添加数据盘尽量也是xfs格式这样统一比较好,也方便写脚本批量挂盘。

1.文件操作

(1.1),查看文件列表:ls

# 1.查看文件的详细信息: 
$ ls -l
# 2.查看文件的详细信息并以人性化的方式展现(k/M/G): 
$ ls -lh
# 3.查看所有的文件(包括隐藏文件): 
$ ls -a
# 4.查看所有文件的详细信息: 
$ ls -al
# 5.查看所有文件的详细信息并以人性化的方式展现(k/M/G): 
$ ls -alh
# 6.帮助查询命令: 
$ ls --help
# 7.分屏显示文件列表: 
$ more ls

[图片上传失败...(image-b89a3a-1659493439801)]

?图详解
(1).第1个字母代表文件的类型:“d” 代表文件夹、“-” 代表普通文件、“c” 代表硬件字符设备、“b” 代表硬件块设备、“s”表示管道文件、“l” 代表软链接文件。 
(2).后 9 个字母分别代表三组权限:文件所有者、用户组、其他用户拥有的权限。
(3).文件的硬链接数
(4).文件的拥有者
(5).文件的拥有组
(6).文件的大小
(7).文件的修改时间
(8).文件名
ls.png

(1.2).通配符

命令(含通配符) 含义
* 文件代表文件名中所有字符
ls am* 查找以am开头的文件
ls *html 查找结尾为html的文件
代表文件名中任意一个字符
ls ?.c 只找第一个字符任意,后缀为.c的文件
ls a.? 只找只有3个字符,前2字符为a.,最后一个字符任意的文件
[] [”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
[abc] 匹配a、b、c中的任意一个
[a-f] 匹配从a到f范围内的的任意一个字符

(2),输出重定向:

# 1.将查询出来的目录名输出到指定文件中(重新并覆盖之前的,如果不存在则创建):
$ ls > xxx.txt
# 2.将查询出来的目录名输出到指定文件中(在之前的基础上追加,如果不存在则创建):
$ ls >> xxx.txt

(3),文件的创建、查看、删除

# 1.创建一个空文件: 
$ touch xxx.txt
# 2.查看文件的内容: 
$ cat xxx.txt
# 3.查看文件的内容并显示行号: 
$ cat -b xxx.txt
# 4.合并文件内容到一个新的文件中(源文件不删除): 
$ cat xxx1.txt xxx2.txt > xxx.txt
# 5.删除一个文件: 
$ rm xxx.txt
rm 参数 含义
-i 以进行交互式方式执行
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数

(4),管道(一个命令的输出可以作为管道作为另一个命令的输入):

$ ls -alh | more

(5),为两个文件建立连接(需要指明源文件名和连接文件名):

# 1.软连接: 当原始文件被删除,当前软连接文件则不能被访问
$ ln -s xxx.txt soft_xxx.txt
# 2.硬链接: 即使原始的文件被删除,当前硬链接文件仍然可以访问
$ ln xxx.txt hard_xxx.txt

(6),文件的查找

# find命令功能非常强大,通常用来在特定的目录下搜索符合条件(使用正则表达式)的文件,也可以用来搜索特定用户属主的文件。
# 1.查找/etc目录下的所有文件中含有"root"的:
$ find /etc -name "root"
# 2.查找/etc目录下的所有文件中"root"开头的:
$ find /etc -name "^root"
# 3.查找/etc目录下的所有文件中"root"结尾的:
$ find /etc -name "root$"
命令 含义
find ./ -name test.sh 查找当前目录下所有名为test.sh的文件
find ./ -name '*.sh' 查找当前目录下所有后缀为.sh的文件
find ./ -name "[A-Z]*" 查找当前目录下所有以大写字母开头的文件
find /tmp -size 2M 查找在/tmp 目录下等于2M的文件
find /tmp -size +2M 查找在/tmp 目录下大于2M的文件
find /tmp -size -2M 查找在/tmp 目录下小于2M的文件
find ./ -size +4k -size -5M 查找当前目录下大于4k,小于5M的文件
find ./ -perm 777 查找当前目录下权限为 777 的文件或目录

(7),文本文件的内容搜索,也可以在通道之后搜索:

grep选项 含义
-v 显示不包含匹配文本的所有行(相当于求反)
-n 显示匹配行及行号
-i 忽略大小写
# grep命令是文本搜索工具,grep允许对文本文件进行模式(通过指定正则表达式)查找。如果找到匹配模式,grep打印包含模式的所有行。
# grep [-选项] ‘搜索内容串’文件名
# 1.搜索以a开头的行: 
$ grep "^a" 1.txt
# 2.搜索以a结尾的行: 
$ grep "a$" 1.txt
3.匹配[]里中一系列字符中的任意一个: 
$ grep "[a-g]kk" 1.txt

(8),文件的拷贝和移动

# cp命令的功能是将给出的文件或目录复制到另一个文件或目录中
1.拷贝文件到a路径下:
    1)直接复制不提示:
    $ cp 1.txt a
    2)显示拷贝进度:cp 1.txt a -v
    3)已经存在的目标文件不提示:cp 1.txt a -f
2.拷贝文件夹a到文件夹b中(不存在则创建): cp a b -r
# 用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。
3.移动文件到a路径下: mv 1.txt /a -v
4.移动文件夹a到文件夹b中(不存在则创建): mv a b -v
5.修改文件名: mv 1.txt 2.txt
选 项 含义
-a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f 已经存在的目标文件而不提示
-i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v 显示拷贝进度

(9),文件的压缩与解压缩

# tar使用格式 tar [参数] 打包文件名 文件
1.打包文件:tar -cvf xxx.tar *.txt
解压文件:tar -xvf xxx.tar
2.打包并压缩文件(.tar.gz):tar -zcvf xxx.tar.gz *.txt
解压缩文件(.tar.gz):tar -zxvf xxx.tar.gz
3.打包并压缩文件(.tar.bz2):tar -jcvf xxx.tar.bz2 *.txt
解压缩文件(.tar.bz2):tar -jxvf xxx.tar.bz2
4.打包并压缩文件(.tar.zip):zip xxx.zip *.txt
解压缩文件(.tar.zip):unzip xxx.zip
5.解压到指定路径:tar -zxvf xxx.tar.gz -C /a
参数 含义
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t 列出档案中包含的文件
-x 解开档案文件

(10),文件的权限管理

1,修改文件的所有者:
    使用方法:chown 用户名 文件或目录名
    sudo chown demo xxx.txt
2,修改文件的所在组:
    使用方法:chgrp 用户组名 文件或者目录名
    chgrp demo xxx.txt
3,修改文件的权限:
    (1).字母法:chmod u/g/o/a +/-/= rwx 文件
        u:user 表示该文件的所有者
        g:group 表示与该文件的所有者属于同一组( group )者,即用户组
        o:other 表示其他以外的人
        a:all 表示这三者皆是
        r:读取; w:写入; x:可执行
        +:增加权限; -:撤销权限; =:设定权限
        修改文件所有者的权限:chmod u+w XXX.txt
        修改文件所有者的属于同一组的权限:chmod g+w XXX.txt
        修改其他人的权限:chmod o+w XXX.txt
        修改三者的权限:chmod a+w XXX.txt
    (2).数字法(读、写、执行<--->4、2、1;不具有任何权限是0):
        例0:chmod u=rwx,g=rx,o=r filename <=======>chmod u=7,g=5,o=4 filename
        例1: chmod 751 file
        文件所有者:读、写、执行权限(7=4+2+1)
        同组用户:读、执行的权限(5=4+1)
        其它用户:执行的权限(1=1)
        例2: chmod 777 file:所有用户拥有读、写、执行权限
        例3: 如果想递归所有目录加上相同权限,需要加上参数"-R" 
        chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限
数字法控制权限.png

(11),处理INode资源耗尽的问题

1),方法一

通过找到当前系统中文件最多的目录,然后查看文件的硬连接数(因为一个文件名和一个INode号是一一对应的关系,但是也可以多个相同的文件名对应一个Inode号码),删除多余的文件,并控制文件生成的数量。

  • 1,查看文件最多的目录

    这里直接指定的根目录,当然也可可以指定具体的目录。

    for i in /*; do echo $i; find $i | wc -l; done
    
  • 2,删除大量文件

    ls | xargs -n 1000 rm -rf
    

2.目录操作

(1),展示当前目录:

pwd

(2),切换目录:

1.切换到当前用户的主目录: cd
2.切换到根目录: cd /
3.切换到家目录: cd ~
4.切换到上一层目录: cd ..
5.当前目录: .
6.切换到指定目录: cd /etc
7.可进入上次所在的目录: cd -

(3).创建和删除目录:

1.创建一个普通的文件夹:mkdir a
2.创建指定路径下的文件夹(指定-p的时候是确保目录名称存在,如果目录不存在的就新创建一个):
mkdir a/b/c/d -p
删除一个空目录: rmdir a
删除一个有文件的目录: rm -r a

(4).清除当前屏幕中显示的内容

直接敲命令: clear
使用快捷键: ctrl+L

3.Vi编辑器

vi.png

1.命令模式

# (1),进入插入模式:
    i: 插入光标前一个字符 
    I: 插入行首 
    a: 插入光标后一个字符 
    A: 插入行未 
    o: 向下新开一行,插入行首 
    O: 向上新开一行,插入行首
# (2),复制粘贴命令:
    yy:复制 光标所在的这一行
    4yy:复制 光标所在的这一行开始向下的4行
    p:粘贴
# (3),删除命令(也就是剪切,在不粘贴的情况下就是删除):
    x:删除(剪切) 当前光标选中的那个,每次只删除一个
    X:删除(剪切) 当前光标前面的那个,每次只删除一个
    dd:剪切(删除) 光标所在的这一行
    2dd:剪切(删除) 光标所在的这一行开始向下的2行
    d0:从当前光标开始剪切(删除),一直到行首
    dw:删除光标开始位置的字,包含光标所在字符
    D:从当前的光标开始剪切(删除),一直到行末
# (4),移动光标命令:
    h:左  j:下  k:上  l:右
    H:当前屏幕的上方
    M:当前屏幕的中间
    L:当前屏幕的下方
    {: 按段移动,上移 
    }: 按段移动,下移
    ctrl+f------>向下翻一页代码
    ctrl+b------>向上翻一页代码
    ctrl+d------>向下翻半页代码
    ctrl+u------>向上翻半页代码
    20G:快速定位到第20行代码
    G:快速回到 整个代码的最后一行
    gg:快速回到 整个代码的第1行
    w:向后跳一个单词的长度,即跳到下一个单词的开始处
    b:向前跳一个单词的长度,即跳到上一个单词的开始处
# (5),撤销命令:
        u:撤销刚刚的操作
        ctrl+r:反撤销
# (6),可视模式下选中文本:    
        v:按字符移动,选中文本 
        V:按行移动,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动
# (7),文本移动
        >>:向右移动代码
        <<:向左移动代码
# (8),重复命令:
        .:重复执行上一次的命令,可以配合左右移动代码的时候使用
# (9),替换命令:
    r:替换一个字符:在命令模式下先输入r,然后可以输入新的字符替换当前字符
        末行模式下,将光标所在行的abc替换成123
            :%s/abc/123/g
        末行模式下,将第一行至第10行之间的abc替换成123
            :1, 10s/abc/123/g
    R:替换光标以及后面的字符:在命令默认下输入R,然后输入新的字符可以将当前光标之后的所有元素进行替换
# (10),查看命令:
    /:str(字符串)查找
    n:在查找之后,表示下一个
    N:在查找之后,表示上一个
    在搜索之后一直高亮显示,我们可以尝试搜索一个不存在的字符便可以去除.
# 补充常见错误说明、以及解决方法:
# (1).如果在vim中按ctrl+s后出现键盘失灵,可以按ctrl+q恢复!
详细说明:
使用vim时,如果你不小心按了 Ctrl + s后,你会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而已,要想退出这种状态,只需按Ctrl + q 即可恢复正常。

2.末行模式

(1),在vim中执行shell命令:
    末行模式里输入!,后面跟命令  
(2)退出:
    shift+zz:相当于末行模式下的wq(保存并退出)
    w:保存
    q:退出
    wq:保存并退出
    q!:强制退出
(3),设置行号(只是在当前vim打开的文档中生效):
        显示行号(要在末行模式下输入): :set number <====> :set nu
        取消显示行号(同样也要在末行模式下输入):set nonumber <====> set nonu
        永久设置vim的一些属性:更改~/.vimrc文件即可
        vim ~/.vimrc
        设置行号:set number
        设置搜索出的内容高亮:set hlsearch
(4),在末行模式下的替换
    将光标所在行的abc全部替换成123(其中g的固定的):
        :%s/abc/123/g
    将第一行至第10行之间的abc替换成123:
        :1, 10s/abc/123/g
    替换文中每一行的第一个 str1 为 str2: 
        :%s/str1/str2/ 

有关Linux基础-文件管理的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  5. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  9. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  10. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

随机推荐