• Linux 常用命令


    linux目录结构

    windows以磁盘分区来访问文件系统,而linux以树状结构来管理文件,具体说来,liunx的目录结构是以根目录/开始的,从根目录往下延伸到子目录

    在这里插入图片描述

    • bin存储可执行的二进制文件,一般都具有执行的权限
    • sbin存储可执行的二进制文件,但是只给root用户使用
    • dev存储设备文件,包括显示器、硬盘、鼠标、键盘等
    • home存储普通用户+普通用户的目录
    [cch@aubin ~]$ cd /home
    [cch@aubin home]$ ls
    cch
    # 这里说明系统只有一个普通用户,叫做cch
    
    • 1
    • 2
    • 3
    • 4
    • lib64存储操作系统在运行过程中需要加载的动态库和静态库
    • lib和lib64一样,可以存储操作系统在运行过程中需要加载的动态库和静态库
    • mnt用来挂载外设,比如U盘,光驱,可用于临时挂载
    • media和mnt一样,也是用来挂载外设的,可用于永久挂载
    • temp临时目录,存放临时文件,当操作系统重启后目录下内容会被清空
    • usrunix system resource,是unix的资源文件
      • bin:存储二进制文件
      • games:存储自带的游戏文件
      • lib和lib64:存储动态库和静态库
      • local:存储安装的第三方软件包
      • sbin:root用户用到的二进制文件
      • src存储源文件

    ls命令

    ls 命令,用来列举目录内的文件。

    ls -l 详细的列举目录内的文件,返回示例如下:

    在这里插入图片描述

    • 总用量 0:表示后面所有文件的总的大小,以k为单位(后面所有文件的大小相加得到的值÷1024)。
    • drwxr-xr-x.:表示文件的类型和文件的权限。
    • 2:表示文件的链接数量(也就是目录下一层的文件的数量(包括.)和..)。
    • cch:表示文件的拥有者。
    • cch:表示文件的组用户。
    • 6:表示文件的大小(字节数)。
    • 月 20 2022:文件最后一次修改的时间。
    • Desktop:文件名。

    drwxr-xr-x

    • 第一个字母为‘d’,表示的是目录文件(文件夹);是‘-’表示是普通可编辑文件;‘c’表示字符设备文件;‘b’表示块设备文件;‘l’表示链接文件;‘p’表示管道文件;
    • 其他字母组合表示文件的访问权限,一共九位,分为三组;第一组(前面三个字母)表示文件的拥有者(在这里是cch)的访问权限;第二组(中间三个字母)表示组用户(cch)的访问权限;第三组(最后三个字母)表示其他用户(other)的访问权限。权限分为四种,‘r’表示读;‘w’表示写;‘x’表示可以执行;‘-’表示没有权限。
    • 对以上命令的解读就是:这是一个目录文件,对于文件拥有者来说可读可写可执行;对于组用户来说,可读不可写可执行;对于其他用户来说,可读不可写可执行。

    修改文件的权限chmod

    chmod ‘o-w’ filename

    • 上面的命令表示对other用户修改文件filename的权限,把其w(write)权限去掉。

    权限位

    • 常用权限位来对应权限,1表示开权限,0表示无权限,比如rwxr-xr-x的权限位是111101101,再简化就是755,如果想要修改对应的权限,比如给所有用户开全部的权限,可以使用命令:chmod 777 filename
    • 修改文件权限,一般需要文件的拥有者和root用户才可以进行修改。

    文件目录与链接

    • 当文件的类型为‘d’时,文件权限后面的的第一个数字表示目录下一级的文件的数量,包括....表示当前目录,..表示上一级目录。
    • 当文件的类型为‘-’即普通文件时,表示文件的链接数量。在linux中文件的链接包括硬链接与软链接两种。

    硬链接

    • 在linux文件系统中,保存在磁盘上的文件不管是什么类型都会有一个inode值(索引结点编号),硬链接允许多个文件共用inode值,一个文件可以拥有多个有效的路径名(也就是说不是产生了新的文件,而是一个文件使用多个别名),这样用户可以建立硬链接到重要的文件,以防止“误删”。因为有多个文件指向同一个文件,只删除一个链接不会影响索引结点本身和其他的链接,只有当最后的一个链接被删除,硬链接才会彻底删除。
    • 当移动或者删除原始文件的时候,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在结构中给的位置。
    • 创建硬链接:ln 原文件 目标文件
    • 使用参数i可以显示inode值,比如ls -li
    • 硬链接有许多局限性,包括硬链接只能用于常规文件;不能创建目录或者特殊文件的硬链接;硬链接不能跨文件系统等
    #硬链接实验:
    [root@servera]# touch a1.txt #创建一个测试文件
    [root@servera]# ln a1.txt hard.txt #创建a1的一个硬链接文件hard.txt
    [root@servera]# ls-li #-i参数显示文件的inode值
    total 24
    4318232 -rw-------. 1 root root 6947 Apr  4  2019 anaconda-ks.cfg
    4318268 -rw-r--r--. 2 root root    7 Jun 26 20:06 a1.txt
    4318268 -rw-r--r--. 2 root root    7 Jun 26 20:06 hard.txt
    4318231 -rw-------. 1 root root 6750 Apr  4  2019 original-ks.cfg
    #从上面的结果可以看出,硬链接文件hard与原文件a1的inode值相等,均为4318268
    
    [root@servera]# echo "sannet" > a1.txt #向a1写入内容为sannet
    [root@servera ~]# cat a1.txt #查看a1文件的内容
    sannet
    [root@servera ~]# cat hard.txt #查看硬链接hard文件的内容发现是一样的
    sannet
    [root@servera ~]# rm -f a1.txt #将原文件删除
    [root@servera ~]# cat hard.txt #查看硬链接文件内容是否存在-->发现存在
    sannet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    软链接

    • 也叫符号链接,类似于windows的快捷键;软链接实际上是一个包含另一个文件的位置信息的特殊文件。
    • 软链接可以使用命令ln -s 原文件 目标文件建立。
    • 软链接有许多优点,可以指向目录或者特殊文件,不局限于常规文件;可以跨越文件系统等;
    • 软链接会有“断链”问题(inode值不同)
    [root@servera ~]# touch soft.txt #创建原文件
    [root@servera ~]# vim soft.txt
    [root@servera ~]# ln -s soft.txt abc.txt #创建软链接
    [root@servera ~]# ll -li #查看inode值
    total 24
    4427926 lrwxrwxrwx. 1 root root    8 Jun 27 00:46 abc.txt -> soft.txt
    4318232 -rw-------. 1 root root 6947 Apr  4  2019 anaconda-ks.cfg
    4318268 -rw-r--r--. 1 root root    7 Jun 26 12:06 hard.txt
    4318231 -rw-------. 1 root root 6750 Apr  4  2019 original-ks.cfg
    4195052 -rw-r--r--. 1 root root    7 Jun 27 00:45 soft.txt
    #从上面的结果可以看出,软链接文件abc.txt与原文件soft.txt的inode值不相等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    chown&chgrp

    修改文件拥有者和所属组chown

    修改文件的拥有者和所属组可以使用chown

    # 修改文件的拥有者
    chown 所有者 文件或目录
    
    • 1
    • 2
    # 修改文件的所属组
    chown :所属组 文件或目录
    
    • 1
    • 2
    # 修改文件所属组和拥有者
    chown 拥有者:所属组 文件或目录
    
    • 1
    • 2
    • 有的时候,对应的命令中会有[-R]选项,表示连通子目录中的所有文件,都更改所有者。
    • 使用chown命令修改文件或者目录的所有者或者所属组,要保证使用者用户(组)存在,否则命令无法正常执行,会提示“invalid user”或者“invaild group”

    使用chgrp修改文件或者目录的用户组

    使用chgrp可以修改文件或者目录的用户组,一般只有超级用户或者拥有权限的用户才可以使用该命令。

    chgrp 用户组名 文件名
    
    • 1

    文件的基本操作

    复制&移动文件

    cp命令用于复制,它可以将单个文件复制成一个指定的文件名的文件或者将单个文件复制给一个存在的目录。

    cp 源文件或者目录 目标文件或者目录
    
    • 1
    # a是普通文件,b是存在的目录,下面指令把a复制到b的目录下
    cp a b
    
    • 1
    • 2
    # a∈b,c是存在的目录,下面指令把b以及其下的所有子文件一起复制到c
    cp -r b c
    
    • 1
    • 2

    mv命令可用于将文件或者目录移动到另一个目录

    mv 源文件或目录 目标文件或目录
    
    • 1

    mv命令还可以用于文件改名

    mv 改名前的文件名字 改名后的文件名字
    
    • 1

    显示文件

    显示文件使用的命令是cat;但是cat命令不支持搜索、滚动、翻页等操作,如果文件的篇幅比较长会出现一部分内容看不到的情况。cat -n可以显示行号。

    cat filename
    
    • 1

    可以使用more命令实现文件的逐屏显示,more命令会显示文件的阅读的进度,在文件中敲回车可以阅读整个文件;一般来说more只能向下翻屏。

    more filename
    
    • 1

    还可以使用less命令显示文件,less命令不仅可以实现向下翻屏(PgDn),还可以实现向上翻屏(PgUp)。

    less filename
    
    • 1

    head可以实现只显示文件头的内容;tail可以实现只显示文件尾的内容

    head filename
    tail filename
    
    • 1
    • 2

    删除文件或目录

    使用rm命令删除文件;使用rmdir删除空目录;使用rm -r 删除一个目录及其下所有子文件

    rm filename
    rmdir emptyFile
    rm -r File
    
    • 1
    • 2
    • 3

    文件压缩与打包

    linux上的压缩工具分为两种:

    • 一种是gzip,执行命令后压缩为.gz的文件,解压缩可以使用gzip -d命令或者gunzip命令;
    • 一种是bzip2命令,执行命令后压缩为.bz2的文件,解压缩可以使用bzip2 -d命令。
    # 压缩文件
    gzip filename
    # 压缩目录
    gzip -r filename
    gzip -d filename
    gunzip filename
    
    bzip2 filename
    bzip2 -d filename
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    linux使用tar命令对目录以及目录下的文件进行打包,打包与压缩的概念不同,打包是把所有的文件装到一起变成一个文件,压缩是把一个文件合理摆放腾出更多的空间。

    tar有许多的参数,包括:
    -c:创建压缩
    -f:指定压缩包的名称
    -z:使用gzip压缩工具进行压缩
    -j:使用bzip2压缩工具进行压缩
    -J:使用xz压缩工具进行压缩
    -t:显示压缩包内容,不解压
    -v:显示压缩过程
    -p:允许使用绝对路口进行压缩
    -x:解压
    -C:指定解压路径
    -h:打包软链接
    --exclude:排除某一些文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    # 把a压缩成asd文件,并且显示压缩的过程(v)
    tar cvf asd a
    
    • 1
    • 2
    # 不解压,显示压缩包内容
    tar vtf asd
    
    • 1
    • 2
    # 压缩
    gzip asd
    
    • 1
    • 2
    # 解压缩并且解开打包
    tar xvzf asd.gz
    
    • 1
    • 2

    文件系统使用

    使用mount可以显示当前整个系统的文件系统,如下所示

    对于这条命令sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)

    • sysfs:系统名字;
    • on /sys:表示该文件系统所在的路径/sys为根目录下的sys目录下;
    • type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel):表示文件系统的类型,以及信息。
    手动挂载U盘

    需要超级用户才可以使用该命令

    mount 需要挂载的文件 挂载到的文件路径
    mount /dev/sdb /home/stu # 把/dev下的sdb文件挂载到/home目录下的stu文件中去
    
    • 1
    • 2

    挂载成功后原来home上stu上的内容会被遮盖掉,但是原来的内容还在,只是被盖住了而已

    # 可以使用umount把挂载的文件卸载下来
    umount /dev/sdb
    
    • 1
    • 2
    共享文件夹的挂载

    在虚拟机上使用windows上的文件,可以有三种方式,一种是使用u盘,直接把windows的内容存在u盘上,一般u盘插入时会被centos自动挂载,不然可以使用上面的命令进行挂载;第二种是使用软件,在windows上下载flashFxp软件,详情看这里;第三种方式就是设置共享文件夹的方式,但是设置完后目录不显示,首先需要检查驱动有没有安装,没有安装输入命令yum -y install open-vm-tools进行安装,如果还没有显示,这个时候可以使用以下命令手动挂载共享文件夹,详情看这里(注意重启后要重新挂载文件夹)

    # 最后加上这一挂载命令
    sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
    
    • 1
    • 2

    /mnt/hgfs/ 是挂载点,我们也可以修改为其它挂载点
    -o allow_other 表示普通用户也能访问共享目录。

    文件查找与匹配

    常用find命令在指定目录下查找文件,其语法如下:

    find 目录名 选项 匹配模式
    
    • 1

    常用的选项和匹配模式有:

    • -name 文件名:按照文件名去匹配文件,可以使用通配符,如“-name ‘*.txt’ ”。
    • -type 文件类型:按照文件类型匹配文件,常用的文件类型包括f(普通文件)、d(目录文件)、l(符号链接文件)等。
    • -mtime 时间:按照文件的修改时间来匹配文件,时间可以是一个数组,表示多少天内修改过文件,也可以使用+或者-符号表示在多少天之前或者之后修改过的文件。
    • -user 用户名:按照文件的拥有者来匹配文件。
    • -size 大小:按照文件的大小匹配文件,大小可以是一个数字,表示文件大小(单位为字节),也可以使用+或者-表示比多少字节大或者小的文件。

    以下是一些示例的命令:

    # 在当前目录及其子目录中查找所有扩展名为.txt的文件
    find . -name '*.txt'
     
    # 在根目录中查找所有类型为目录的文件
    find / -type d
     
    # 在当前目录中查找所有大小为0的文件
    find . -size 0
     
    # 在当前目录中查找所有拥有者为root的文件
    find . -user root
     
    # 在当前目录中查找所有修改时间在7天以内的文件,并且把对应得路径打印出来
    find . -mtime -7 -print
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    grep命令可以在文件中搜索指定的文本,其语法如下:

    grep 选项 匹配内容 文件
    
    • 1

    常用的选项包括:

    • -n:显示匹配行的行号。
    • -r:递归搜索子目录。
    • -w:只匹配整个单词。
    • -e 正则表达式:按照正则表达式进行匹配。

    以下是一些示例命令:

    # 在文件中查找"hello"关键词
    grep 'hello' file.txt
     
    # 在文件中查找"hello"关键词,并忽略大小写
    grep -i 'hello' file.txt
     
    # 在文件中查找"hello"关键词,并显示匹配行的行号
    grep -n 'hello' file.txt
     
    # 递归搜索子目录,查找所有扩展名为.c的文件,并在其中查找"main"关键词
    grep -r 'main' --include='*.c' .
     
    # 使用正则表达式进行匹配,查找所有以数字开头的行
    grep -e '^[0-9]' file.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    组合命令:find . -name p*.c -print|xargs grep include

    组合命令中的|表示将该符号前面的执行结果,作为输入的参数传递给该符号后面的命令(管道),该命令的意思是,在当前目录中寻找所有的p开头的.c文件,并给把这些文件中的include都找到。

    显示进程

    linux有ps命令,用于显示当前活动进程的快照。

    # 显示所有用户的所有进程
    ps aux
    # 显示所有进程的完整信息
    ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 10:40 ?        00:00:01 /usr/lib/systemd/systemd --swi
    root          2      0  0 10:40 ?        00:00:00 [kthreadd]
    ...
    cch        2500      1  0 10:42 ?        00:00:00 /usr/libexec/gnome-terminal-se
    ...
    cch        2507   2500  0 10:42 pts/0    00:00:00 bash
    cch        2565   2500  0 10:42 pts/1    00:00:00 bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 第一列UID表示userID,用户的名字;
    • 第二列PID表示进程的ID;
    • 第三列PPID表示当前进程的父进程的ID;
    • 第四列C表示CPU的占用率;
    • 第五列STIME表示进程的启动时间;
    • 第六列TTY表示进程运行的终端号,如果是表示该进程是一个系统进程,不与任意终端进行关联;
    • 第七列TIME表示进程的直接运行时间;
    • 最后一列CMD表示进程的命令。

    当运行的进程状态不对时,可以使用ps查看进程的运行情况,使用kill来杀死进程(终止进程)

    # 语法
    kill -信号 PID
    # 强制杀死进程
    kill -9 PID
    
    • 1
    • 2
    • 3
    • 4
    进程中一共有64种信号,实际上常用的有9种,更加常用的只有两种,分别为信号9和信号15:
    9 表示强制终止
    15 表示终止(可以使进程在退出之前清理并且释放资源)
    1 终端断线
    2 中断(相当于ctrl+c)
    3 退出(相当于ctrl+\)
    18 继续(与19相反)
    19 暂停(相当于ctrl+Z)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    联机帮助

    记不住命令,可以使用联机帮助

    # 查看ls命令的参数手册
    man ls
    # 查c语言常用函数fgets
    man fgets
    
    • 1
    • 2
    • 3
    • 4

    讨论

    常规文件的权限是什么?如何分配或修改这些权限?文件夹(目录)的权限是什么?显示常规文件和文件夹的区别

    讨论:①常规的文件权限有四种,r可读、w可写、x可执行、-没有权限;②可以使用chmod命令来分配或者修改文件的权限,其语法是 chomd 权限 filename ;③linux是一个多用户多任务的操作系统,可以通过用户好用户组来更好的控制目录文件的权限,具体说来就是:每一个文件都有一个拥有者,该拥有则属于某一个用户组,每一个文件的权限可以细分为三组(拥有者权限、用户组其他用户的权限、其他用户权限),可以使用 chmod 拥有者:所属组 目录 来修改文件的权限,可以使用ls -la来查看文件的权限;④显示常规文件其第一列的第一个字母为-,而目录文件的第一列的第一个字母为d,常规来讲,一个文件的默认访问权限是 -rw-rw-rw-,一个目录的默认访问权限是drwxrwxrwx。⑤对于目录来讲,r表示对其下文件可读,w表示对文件夹可添加可删除,x表示可以进入到该目录。

    当无法执行命令“chown、chgrp、chmod”等,请给出可能的原因,如何保证成功执行。

    讨论:linux对于文件的管理最常用的命令有“chown、chgrp和chmod”,chown用来改变文件的所有权,这个命令只有root用户可以使用;chgrp也是只有root用户可以使用;chmod对于文件的所有者和root用户都可以使用;如果无法执行以上的命令,可以切换到root用户再来执行。

    怎么新建一个目录?如何复制或者删除一个非空的目录。

    讨论:①可以使用mkdir新建一个空的目录;②可以使用cp -r old new 对非空目录进行复制,rm -r old 对非空目录进行删除。

    当用户使用“mv a b”,请表示出b如果是一个文件、目录或者不存在时的可能性。

    讨论:mv命令可以将文件或者目录移动到另一个目录,或者对文件进行改名。如果b是一个文件,系统会把a改名为b,原来的b会被覆盖;如果b是一个目录,系统会把文件a移动到b的目录下,作为b的子文件(如果b本身也有名为a的文件,原来b下的a会被覆盖);如果b不存在,系统会把a改名成b。

    什么是文件系统?请举个例子。(也许你可以使用U盘)

    讨论:操作系统中用于负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。在linux中,文件系统必须先被挂载才能使用可以使用mount和umount去挂载或者卸载一个文件,被挂载的文件会被暂时覆盖,一般只有使用超级用户才可以实现该权限。
    sda1表示第一块硬盘的第一个分区;
    sdb表示第二块硬盘。
    比如mount /dev/sdb /home/aa:这个命令表示把sdb的文件挂在到aa目录下。
    可以使用df来显示文件的的挂载情况。

    什么是管道,怎么去使用管道去创建一个组合命令,请给出一个例子。

    讨论:①管道是linux的一种通信机制,管道可以实现把一个程序的输出直接连接到另一个程序的输入,从本质上讲,管道是一种特殊的文件;②可以使用管道符 | 来建立管道,格式命令为 a | b,表示a的输出作为b的输入,比如可以使用组合命令 find . -name . p*.c -print|xargs grep include ,这条命令的意思是把所有名字以p开头,以.c结尾的文件找到,并且把这些文件的 include 字符都找到。
    使用 ls -l | more,这也是常用的管道命令。
    管道符可以一直连续的使用,换句话说一条组合命令可以使用多个管道符。

    假设一个人正在读取一个大型的程序的源代码,他想要检查一个函数的定义,这个函数不在当前的读取文件中,你对他有什么建议。

    讨论:可以使用查找定位的方式,在linux中可以使用find进行查找文件,使用grep对文件内容进行匹配。一般来说一个函数的定义存在于头文件中,可以使用 find -e filename.h,查找文件,使用grep functionName filename.h 来查找文件内容。
    组合起来可以使用以下组合命令: find -e *.h | xargs grep functionName。

    如果一个人想要在网上发送一个大型的程序的所有文件给他的舍友,你可以给他一些建议吗。

    讨论:可以使用打包压缩的方式对文件进行处理,方便网络上的传输。在linux上,可以使用tar对文件进行打包成一个文件,使用gzip和bzip2对文件进行压缩,可以大大节省内存。例如可以使用 tar cvf asd a把打包成asd文件,使用 gzip把asd压缩成压缩文件,再传输。
    可以使用tar vtf filename 查看filename文件的打包的情况,但是并不解开打包

    假设网下登录TTY1,但是由于某一种原因停止了,你能给出一个解决的方案吗?

    讨论:可以使用ps -t tty1 查看其中的命令,然后可以使用kill -9 PID 来杀死进程。杀死进程后,可以使用密码重新登录,继续其他的内容。

    假设四个人(李、张、王、赵)在一个小组中开发一个系统。如何为其文件分配权限通常情况下,640是合理的。但是,如果只能使用“chmod”来修改权限,那就太天真了。您需要修改每个用户的默认设置,以确保在创建文件时拥有正确的权限。(也许你需要在互联网上搜索学习命令umask、useradd、groupadd等。)

    讨论:若用户创建一个文件,则文件的默认访问权限为 -rw-rw-rw- ,创建目录的默认权限drwxrwxrwx ,而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值,umask 026 表示后续添加的文件的权限均为640(两个值相加为666),但是添加命令断电后命令就会失效;useradd用来添加用户;groupadd用来添加用户组。
    详情可以查看:https://blog.csdn.net/yspg_217/article/details/121900800

  • 相关阅读:
    js正则匹配获取分组和正向反向的区别
    linux系统sh脚本后台执行
    低代码如何改变IT行业小作坊生产模式
    第11章 项目人力资源管理
    支付宝支付项目
    基于LSTM时间序列预测(简单又好用)无脑代码
    2022年12月编程语言排行榜,数据来了!
    Postman入门基础 —— 接口测试流程!
    [Typescript]基础篇之 String 对象
    架构师教你来学大型网站架构的技术细节:前端架构的工作原理
  • 原文地址:https://blog.csdn.net/CodePlayMe/article/details/133297927