• Linux 学习笔记(2)—— 关于文件和目录


    目录

    1、切换目录

    2、查看系统信息

    3、文本的创建和编辑

    3-1)创建文件

     3-2)查看文件

    3-3)输出重定向和追加重定向等

    3-4)使用 vi 编辑器编辑文件

    4、文件和文件夹的处理

    4-1)对文件的处理 

    4-2)查看目录信息

    4-3)对目录的操作

    5、文件查找

    6、查找文件中的内容

    7、使用条件测试命令 test 来判断文件的信息

           7-1)test 用作文件信息判断

            7-2)test 的其他使用方法

    逻辑运算

     用作字符串测试

     数值测试

    使用 [[ ····· ]]

    8、用户与用户组权限

    9、文件和文件夹权限

    10、文件归档和压缩


     

    1、切换目录

    cd ../   或 cd ..

    切换到上一层目录(相对)

    cd 目录名

    切换到指定目录(绝对)

    pwd

    查看当前所在的目录路径

    cd ~
    切换到当前用户的主目录中
            cd ~ 表示切换到当前用户的主目录中,如果当前的用户为 root 则相当于cd /root,如果当前用户为tom,则相当于 cd /home/tom

    2、查看系统信息

    fdisk -l

    查看磁盘分区列表

    free

    查看内存使用情况

    cat /proc/meminfo

    查看内存信息

    cat /proc/cpuinfo

    查看CPU信息

    top命令(类似于window中的资源管理器):

    top            

          

    默认进入到完整界面实时查看系统的消耗,进程的情况;

    点击ctrl + C 或 q 键退出
    top -n 1  查看当前的消耗,不用进入到界面实时观看

    3、文本的创建和编辑

    3-1)创建文件

    vi  /opt/learn.txt

    在指定目录下创建learn.txt文件,并进入 vi 编辑界面

    touch /opt/learn

    在指定目录下创建learn文件。touch 仅单纯创建一个空白文件

    cat > /opt/learn.txt << EOF

    在指定目录下创建文件,并在屏幕上输入内容,最后输入EOF表示输入结束。

    如果不使用 << EOF 来结束,也可以在输入结束时直接按Ctrl+D来结束。

    每次重复执行会将原有的内容覆盖掉。

    echo "Hello World" > test.txt        将指定内容输出重定向到文件中,如果文件不存在,则创建一个文件,如果存在,则会把原来的内容覆盖。

     3-2)查看文件

    vi /opt/test.txt

    在vi编辑器中输出文本内容(如果没有就会创建一个)

    cat /opt/test.txt

    在屏幕上输出文本内容

    more /opt/test.txt

    分屏输出文本内容(在无法滚动的情况下比较适用,预先加载完全部内容,按回车键显示下一行

    less /opt/test.txt

    分屏输出文本内容(与more的区别是,看到哪一行,就加载到哪一行,查看大文件适用

    strings /opt/test.txt

    打印文件中可打印的字符

    head -n 11 /opt/test.txt

    查看指定文件的前11行

    head /opt/test.txt

    查看指定文件的前10行(默认10行)

    tail -n 20 /opt/test.txt

    查看指定文件的后20行

    tail /opt/test.txt

    查看指定文件的后10行(默认是10行)

    tail -f /opt/test.txt

    通过流的方式实时查看最新的文件内容(实时监控日志)

    3-3)输出重定向和追加重定向等

            > 为输出重定向(将前面执行的结果输出到指定文本中,会覆盖文本中原有的内容);

            >> 为追加重定向,将前面执行的内容追加到指定文本的末尾;

            1>   和   2>   重定向

    ll /self/testDir/ 1> llout.txt

    执行ll /self/testDir/如果执行正确,则将结果写入到 llout.txt 中(覆盖),屏幕无输出;如果有错误,则将错误输出到屏幕,而将空内容写入到 llout.txt 文件中(覆盖)

    ll /self/testDir/ 2> llerr.txt

    执行ll /self/testDir/,如果执行正确,则将结果在屏幕上输出,将空内容写入到 llerr.txt 文件中;如果执行有误,则屏幕上没有内容输出,而将错误的信息提示输出到 llerr.txt 中。

    ll /self/testaDir/ 1> llout.txt 2> llerr.txt

    执行命令ll /self/testaDir/ ,不管命令执行成功与否都不在屏幕输出任何信息,正确执行时将命令的输出信息输出到 llout.txt 中,执行错误时则将错误的提示信息输出到 llerr.txt 中。执行正确时,llerr.txt 文件中没有内容,执行错误时,llout.txt 文件中没有内容。

    ifconfig > /dev/null

    执行 ifconfig指令,重定向到 /dev/null 后,将不会在屏幕输出任何内容

            && (正确则往后继续执行)  和  || (错误则往后执行)

    ls /opt && echo "前方执行成功"

    && 前的命令执行成功后,会执行 && 后面的命令

    ls /opt || echo "前方执行失败"

    || 前面的命令执行失败时,会执行 || 后面的命令

            | tee

    管道符 | 和 tee 组合也可以将前面命令输出的内容重定向到指定的文件中

    3-4)使用 vi 编辑器编辑文件

    1. # 进入vi编辑器。如果没有这个文本文件,就会自动新建并进入vi编辑器
    2. vi file.txt

             进入vi编辑器后,首先会处于命令模式,即当前情况下所输入的都是命令;可以点击i、a、o等进入编辑模式;在编辑模式下,在按ESC键可以重新进入到命令模式

            以下为在 vi 编辑器命令模式中的一些命令。 

    i 或 a

    从命令模式进入到编辑模式;i为插入文本,a为追加文本;都在光标的位置输入

    ESC

    从编辑模式进入命令模式

    :w

    保存文本但不退出

    :q!

    强制退出,不保存文本

    :wq

    保存文本并退出

    o

    在当前行的后面新增一行

    O

    在当前行的前一行后新增一行

    dd

    删除一行内容

    D

    删除当前光标到行尾的内容

    x

    删除当前光标所在处的一个字符

    s

    删除一个字符并切换回编辑模式

    S

    删除一行并切换回编辑模式

    :n

    移动光标到第n行

    $

    光标移动到当前行文本的行尾

    A

    光标移动到行尾并切换回编辑模式

    ^

    光标移动到文本的行首

    G

    光标移动到文本的末尾

    gg

    光标移动到文本的行首

    ZZ

    存盘退出

    /字符串

    查找某个字符串

    n

    继续查找

    :u

    撤销(相当于Ctrl+Z)

    :redo

    重做(相当于Ctrl+Y)

    4、文件和文件夹的处理

    4-1)对文件的处理 

    cp —— 复制

    cp  hello.txt  /opt/test

    把 hello.txt 文件复制一份到 /opt/test 目录下

    cp  hello.txt  /opt/test/he.txt

    把 hello.txt 文件复制一份到 /opt/test 目录下,并重命名为he.txt

    cp  /opt/hello.txt  ./

    将指定的文件复制到当前文件夹下

    rm —— 删除

    rm hello.txt

    删除指定文件

    rm -f hello.txt

    强制删除,不重复确认

    rm *.txt删除当前目录下的所有 .txt 文件
    mv —— 移动(剪切)

    mv hello.txt  he.txt

    重命名hello.txt 文件为 he.txt

    mv hello.txt  /opt/test

    将文件剪切到指定目录下

    mv hello.txt  /opt/test/he.txt

    将文件剪切到指定目录下并重命名为he.txt

    du  -h hello.txt

    查看 hello.txt 文件的大小

    true > test.txt清空文件内容
    echo "" > test.txt清空文件内容

    4-2)查看目录信息

    ls 或 ls /opt

    查看当前目录(或指定目录)下没有被隐藏的所有文件(列出文件名称)

    ls -l 或 ll

    以列表的形式查看当前目录下各文件的信息

    ls -a

    显示当前目录下的所有文件,包括隐藏文件

    ls *.txt

    显示当前目录下所有以txt为后缀名的文件

    ls /opt/test

    显示指定目录下的内容

    ls -R /opt

    显示指定目录及其子目录的内容

             在linux系统下如果要创建一个隐藏文件,只需要在文件名的最前面加一个点 "." 即可

            ls 直接查询不会查询到隐藏文件。ls -a 查询可以查询到。

    4-3)对目录的操作

    mkdir folder

    创建指定名称的目录

    mkdir  folder1 folder2 folder3

    连续创建若干个目录

    mkdir -p /opt/folder1/folder2/folder3

    连续创建层次目录(folder1/folder2/folder3)

    rmdir /opt/mydir

    删除空的目录(不能删除非空的目录)

    rm -r ./test

    删除目录

    rm -rf /opt/folder

    强制删除文件夹

    cp -r /opt/test1 /opt/test2

    拷贝文件夹(加上参数-r是深度拷贝)

    mv /opt/test  /opt/test2

    重命名文件夹

    5、文件查找

    find ./ -name "hello.txt"

    查找当前目录下名为hello.txt的文件或文件夹

    find /home -name "hello"

    查找/home目录下名字为hello的文件或文件夹

    find ./ -name "*"

    查找当前目录下的所有文件或文件夹

    find ./ -name "[h|f]*"

    查找当前目录下所有以h或f开头的文件或文件夹

    find ./ -name "[a-fA-F]*"

    查找当前目录下所有以小写字母a~f或大写字母A~F开头的文件或文件夹

    find ./ -name "[^a-fA-F]"

    查找当前目录下所有不以a、b、c、d、e、f、A、B、C、D、E、F开头的文件

    find ./ -name "h?llo"

    查找当前目录下满足h?llo条件的文件,其中?的位置代表一位任意字符

    find ./ -perm 741

    查找当前目录下所有权限为741的文件或文件夹

    find ./ -user mary

    查找所有者为mary的文件或文件夹

    find ./ -group dev

    查找所属组为dev的文件或文件夹

    find ./ -mtime -3

    查找3天内更新过的文件或文件夹

    find ./ -mtime +3

    查找3天前更新过的文件或文件夹

    find ./ -newer hello.txt

    查找比hello.txt更新的文件或文件夹

    find ./ ! -newer hello.txt

    查找比hello.txt更旧的文件或文件夹

    find ./ -type d

    查找当前目录下的所有文件夹

    f:普通文件

    d:目录(文件夹)

    l:软链接文件

    c:字符设备,如终端、磁带机等

    b:块设备,如光盘、硬盘

    find ./ -size 602c

    查找当前目录下文件大小为602字节的文件

    c:byte

    k:kilobytes

    M:megabytes

    G:gigabytes

    find ./ -size +600c

    查找当前目录下文件大小大于602字节的文件

    find ./ -name "hello*" -exec ls -l {} \;

    查找当前目录下所有以hello开头的文件,并将其细节显示出来(目录也会)

    find ./ -name "hello*" -exec rm {} \;

    查找当前目录下所有以hello开头的文件并将其删除

    find ./ -name "hello*" | xargs ls -l

    查找当前目录下所有以hello开头的文件并将其细节显示出来

            “|” 是管道符,管道符主要用于多重命令处理,前面命令的打印结果作为后面命令的输入。 

            xargs 的作用是 把前面管道符的输入作为后面指令的参数。 

    6、查找文件中的内容

    grep "root" /etc/passwd

    查找/etc/passwd文件中包含root的行

    grep -n "root" /etc/passwd

    查找/etc/passwd文件中包含root的行,并在每行的前方标注在原文中的行号

    grep "^ma" /etc/passwd

    查找以ma开头的行

    grep "bash$" /etc/passwd

    查找以bash结尾的行

    grep "^[r|d]" /etc/passwd

    查找以r或d开头的行

    grep -v "root"

    排除掉包含root在内的行

    ls | grep test

    从ls的输出中过滤出包含test的行

    grep -r games /etc

    在/etc目录下查找包含games的文件

    find ./ name "*" | xargs grep word

    输出当前目录下文件名或目录名包含word的文件或目录

    wc -l

    统计文件行数或输出的个数。

    -c、--bytes、--chars只显示bytes数。

    -l、--lines显示行数。

    -w、--words只显示字数。

    如不指定参数,则显示所有的统计信息

    7、使用条件测试命令 test 来判断文件的信息

            test 命令执行完成后没有输出,可以紧接着使用 echo $? 来查看结果,如果输出0,则表示真,如果输入1,则表示假(错误)

            [ ******** ] 是test 命令的另一种写法,把test 后面紧跟的内容放到 中括号中即可,两边临近中括号的位置都需要有空格。

           7-1)test 用作文件信息判断

    test -e /etc/passwd

    测试文件是否存在,存在时,使用echo $?将返回0,否则返回1

    [ -e /etc/passwd ]

    test -e /etc/passwd 的功能一致,是 test 命令的另一种写法(临近两个中括号都要空格)

    -d

    如果文件为一个目录,则为真

    -e

    如果文件存在时为真

    -f

    如果文件是一个普通文件时为真

    -r

    如果文件可读时为真

    -w

    如果文件可写时为真

    -x

    如果文件可执行时为真

    -s

    如果文件的内容长度不为零时为真

    -L

    如果文件为符号文件时为真(链接文件)

            7-2)test 的其他使用方法

    逻辑运算

    [ -e /etc/passwd -a -s /etc/shadow ]

    逻辑与运算

    [ -e /etc/passwd -o -e /abc/aaa.txt ]

    逻辑或运算

    [ ! -e /etc/passed ]

    逻辑非运算

     用作字符串测试

    [ "$USER" = "root" ]

    字符串比较,相等时echo $? 将返回0

    [ "$USER" != "123" ]

    不相等判断

    [ -z "$USER" ]

    字符串为空

    [ -n "$USER" ]

    字符串不为空

     数值测试

    [ $$ -eq 12345 ]

    判断当前脚本运行时的进程id是否为12345

    -eq

     判断相等

    -ne 

    判断不等

    -le

    less or equal 第一个数小于或等于第二个数

    -ge

    gread or equal 第一个数大于或等于第二个数

    -gt

    greater then 第一个数大于第二个数

    -lt

    less then第一个数小于第二个数

    使用 [[ ····· ]]

            [[  ]] 相比于 [ ] 支持更多的比较运算符,在处理字符串时更加灵活;

            && 与运算;|| 或运算

            =~ 表示前方的字符串是否匹配后面的正则表达式,^ 表示字符串的开始(如果是在正则表达式的中括号中则表示 非),[0-9a-z] 表示可以去任意数字和任意小写字符,后面的 + 表示至少满足一次,最后的 $ 是结束标志。

    8、用户与用户组权限

            在 linux 中,root 拥有最高的权限,所有文件或文件夹的权限设定对 root 都是无效的。

            在正式的生产和服务器环境中,尽量使用普通的账号+人工权限设定的方式,避免出现漏洞后被人以root权限利用系统。

            在 window 中,administrator 和 Linux 中的 root 等同。

    cat /etc/group

    查看当前系统存在的用户组,<1000的是系统使用的,>1000的是用户创建的

    groupadd test

    创建一个用户组名为test

    groupmod -n test testing

    将用户组test更名为testing

    groupdel test

    删除用户组test

    groups root

    查看用户root所在的所有组

    cat etc/passwd

    查看所有账户

    该文件每行代表一个用户账号,记录了账号的所有信息,包括用户名、密码、用户ID(UID)、组ID(GID)、连接、主目录和默认的shell等。

    useradd -g test jack

    创建一个用户jack,主组归属于test

    useradd -g test jam -G dev

    创建一个用户jam,主组归属于test,附属组dev

    useradd ben

    创建一个用户ben,因为没有设定其归属的主组,默认将新增一个对应名为ben的组

    passwd jack为用户 jack 指定登录密码(提示输入两次)

    usermod -g dev ben

    将用户ben换到dev组中

    usermod -G 505 ben

    将用户ben附加到gid为505的组中

    usermod -d /home/test ben

    将用户ben的登入目录改为/home/test (在修改前需要保证该目录存在)

    userdel ben

    删除用户ben

    userdel -f ben

    强制删除用户ben(即使该用户已经登录)

    userdel -r ben

    删除用户ben并删除其主目录

    9、文件和文件夹权限

    在任意的一个文件夹中,可以用ls -l或ll命令来显示其基本的信息和权限信息:

    每一行中依次代表的内容如下:

    1、文件权限:表示文件的访问权限,如读取、写入和执行权限。

    2、链接数量:表示文件在文件系统中的硬链接数量。

    3、文件所有者:表示文件的所有者用户及用户所属的组。

    4、文件大小:表示文件的大小,以字节为单位。

    5、修改时间:表示文件的最后修改时间。

    6、文件名:表示文件的名称。

    每一个文件都占一行来展示其信息,每一行的前10个字符所表示的意义如下:

    如:drwxr-xr-x

    第1个字母:‘-’代表普通文件,‘d’代表目录,‘l’为链接文件,相当于快捷方式

    第2、3、4个字母代表当前文件或文件夹所属用户(owner)的权限,用u表示

    第5、6、7个字母代表当前文件或文件夹所属的用户组(group)的权限,用g表示

    地8、9、10个字母代表其他用户组和其他用户(other)的权限,用o表示

    权限的表示方式:

    r 读:也可以用数字 来表示

    w 写:也可以用数字 来表示

    x 执行:也可以用数字 来表示

    su jame

    切换到jame用户

    whoami

    查看当前的用户

    chmod u+x test.txt

    为test.txt文件的所有者添加可执行权限

    chmod u-w test.txt

    为文件的所有者去除写权限

    chmod g-r test.txt

    为文件的所在组去除可读权限

    chmod o+w test.txt

    为文件所在组之外的组添加可写权限

    chmod a+w test.txt

    为所有角色添加可写权限

    chmod a+wx test.txt

    为所有角色添加可写和可执行权限

    chmod a-rwx test.txt

    去除所有用户对文件的读写和执行权限,此时只有root用户可以操作

    chmod 777 test.txt

    将文件的权限设置为rwxrwxrwx,等同于chmod a-rwx test.txt   (7就是4+2+1)

    chmod 643 test.txt

    将文件的权限设置为rw-r---wx

    chmod -R 755 /opt/temp

    将/opt/temp即其所有的子文件、子目录的权限改为755(连带)

    chown mary test.txt

    将test.txt文件的所有者改为mary

    chown mary /opt/temp

    将目录的所有者改为mary

    chown -R mary /opt/temp

    将目录及其子目录、子文件的所有者改为mary

    chgrp test hello.txt

    将hello.txt 所在的组该为test组

    chgrp test /opt/temp

    将指定目录的所有组改为test组

    chgrp -R mary /opt/temp

    将指定目录及其下属的目录和文件的所有组改为mary

    10、文件归档和压缩

            在Linux中,文件归档的作用是将多个文件组合成一个单一的文件,这个过程称为归档。

            它通常用于系统备份、将旧数据移至长期存储设备以及方便文件传输等场景。

            tar 命令是用于创建归档文件的常用命令。

            归档文件不是文件夹,虽然它们看起来像是文件夹,但实际上它们是单一的文件。可以在这个“文件夹”中放入任何类型的文件,包括文本文件、图片、视频等。归档文件的好处之一是,它们可以轻松地复制和移动到其他位置,而不需要单独管理每个文件。

            文件归档后并不会被压缩大小;一般是多个文件一起归档后再进行压缩。

            归档后的文件后缀为.tar;归档文件压缩后一般后缀为.tar.gz;

    tar -cvf hello.tar ./*

    将当前目录下的所有文件归档为hello.tar;

    修饰符c:创建一个新归档

    v:详细列出被处理的文件

    f:指定要创建的归档文件的文件名或要解压的归档文件的名字。它必须是tar命令的最后一个参数,后面直接接文件名

    tar -cvf hello.tar /opt/test

    将指定目录下的所有文件归档为hello.tar;

    tar -cf all.tar test1 test2 test3

    选择当前目录下的三个文件进行归档,归档文件命名为all.tar

    tar -tf test.tar

    将归档文件test.tar中的文件显示出来

    tar -xvf test.tar

    将归档文件解压缩到当前目录下,恢复其中的文件和目录结构。

    tar -zcvf hello.tar.gz hello.tar

    将归档文件hello.tar压缩成hello.tar.gz

    tar -zxvf hello.tar.gz

    将压缩文件解压成hello.tar归档文件

    gzip hello.tar

    将归档文件hello.tar压缩成hello.tar.gz

    gzip -d hello.tar.gz

    将压缩文件解压成hello.tar归档文件

    zip hello.zip hello.txt

    将hello.txt压缩并命名为hello.zip

    zip -r test.zip /opt/test

    将指定的目录进行压缩并命名为test.zip

    unzip -v hello.zip

    查看压缩文件hello.zip中的文件信息

    unzip hello.zip

    解压缩hello.zip

  • 相关阅读:
    Spring-IOC配置-bean
    超级工厂里的生意图鉴
    Vue项目实战之电商后台管理系统(二) 主页模块
    开题报告之论文框架
    数据结构分类总结[多达80种,offer收割机]
    【数据结构】栈和队列(概念选择题)
    idea启动之java.net.BindException: Address already in use: bind
    重制版day 10 字符串相关方法
    VFP用上git来管理源代码,备份回滚,开发模式不影响正式版本,猫猫带你来入门
    Grafana dashboards as ConfigMaps
  • 原文地址:https://blog.csdn.net/hao_13/article/details/132675732