iMisty的技术栈

iMisty的技术栈

Linux命令基本格式以及文件处理命令

940
2019-06-16

Linux命令基本格式以及文件处理命令

命令提示符的含义

[root@localhost ~]

  • 其中root代表当前用户

  • localhost 主机名

  • ~ 当前所在的目录(家目录)

  • 家目录就是用户登陆的初始目录 ,超级管理员家目录为 /root 其他用户目录是 /home/user1(在创建用户的时候自动生成)

  • # 超级用户提示符,普通用户提示符是 $

命令格式

  • 命令 [选项] [格式]

注意:个别命令使用不遵循此格式,当有多个选项时可以写在一起;简化选项与完整选项 -a == --all

查看目录中的内容 :ls

  • 选项 :

    • -a 显示所有文件,包括隐藏文件
    • -l 显示详细信息;
    • -d 查看目录属性
    • -h 人性化显示文件大小
    • -i 显示 inode

ls -l 相当于 ll

  • 文件属性 -rw-r--r--. 1 root root 20 Dec 5 14:03 ntuser.ini

    • - 文件类型(-文件 d目录 l软连接文件)
    • rw-u 所有者 r-- 所属组 r-- 其他用户
    • rwx分别对应文件的读写可执行权限
    • . 代表ACL权限
    • 1 代表引用计数
    • 时间是文件的最后修改时间

Linux 的文件类型只有7种

  • 文件
  • 文件夹
  • 软连接(快捷方式)
  • 块设备文件
  • 字符设备文件
  • 套接字文件
  • 管道文件

linux文件处理命令

  • 查看当前所在的目录路径 pwd 英文原意 print working directory;

  • 建立目录 mkdir -p [目录名] -p 递归创建(英文原意 make directories)

  • 切换所在目录 cd [目录名] ,英文原意切换所在目录 change directory

  • 简化操作

    • 进入当前用户的家目录 cd ~
    • 进入上次所在的目录 cd -
    • 进入上一级目录 cd ..
    • 进入当前目录 cd .
  • 删除空目录 rmdir [目录名]

  • 删除文件或者目录 rm -rf [文件或者目录] 英文原意 remove

    • 选项

    • 不带参数的就是删除文件会有交互提示

    • -r 删除目录(也可以删除文件,递归删除的意思),会有交互提示

    • -f 强制删除

注意:字符界面没有回收站选项,且linux识别 rm -rf / 命令

  • 创建空文件 touch [文件名]

  • 复制命令 cp [选项] [原文件] [目标目录] 英文原意 copy

选项

  • -r 复制目录

  • -p 连带文件属性复制 ,(让目标文件和源文件的属性保持一致,时间权限等)

  • -d 若源文件是链接文件,则复制链接的属性

  • -a 相当于 -prd

  • 剪切或者改名命令 mv [源文件] [目标目录] 英文原意move

    • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

绝对路径和相对路径

  • 相对路径 :参考当前所在的目录进行查找 cd ../home/misty :进入当前目录的上一级目录下的home/misty文件夹下
  • 绝对路径 :从根目录开始指定,一级一级递归查找,在任何目录下,都能进入指定的位置 cd /root/java 进入根目录下的root目录

常用目录的作用

img

  • /根目录

  • /bin命令保存目录(普通用户就可以读取的命令);sbin存放超级管理员可以读取的命令;

  • /boot启动目录,启动相关文件

  • /dev设备文件保存目录

  • /etc配置文件保存目录

  • /home 普通用户的家目录,root超级管理员的家目录

  • /lib系统库保存目录

  • /mnt系统挂载目录

  • /media挂载目录

  • /misc

media, misc ,mnt空目录用于挂载外接设备(因为linux的外接设备需要挂载才能使用)

  • tmp 临时文件目录
  • proc直接写入内存的
  • sys> proc 和sys 目录不能直接操作,这两个目录是保存内存的挂载点,该目录的内容直接写入内存
  • /usr系统软件资源目录
    /usr/bin/系统命令(普通用户)
    /usr/sbin/系统命令(超级用户)
  • /var 系统相关文档目录

链接命令

  • ln -s [原文件] [目标文件] 英文原意link

  • 功能描述: 生成链接文件,选项-s创建软链接

  • 硬链接特征:
    1.拥有相同的i节点和储存block块,可以看做是同一个文件,删除其中一个另一个可以照常使用,除非全部删除
    2.可以通过i节点识别 , ls -i(ll -i) 查看文件的i节点
    3.不能跨分区
    4.不能针对目录使用

  • 软连接特征

  1. 类似windows的快捷方式

  2. 软链接拥有自己的I节点和block块,但是数据块中只保存源文件的文件名和I节点号,并没有实际的文件数据

  3. lrwxrwxrwx l软链接 ,软链接的文件权限都是lrwxrwxrwx,实际权限和源文件权限一致

  4. 修改任意文件另一个都会改变

  5. 删除源文件,软链接不能使用

注意:软链接源文件一定要写绝对路径

软链接和硬链接的区别,终端实操
  • 软链接的i节点和源文件不一致,软链接权限777lrwxrwxrwx但是实际的权限就是源文件权限,且标识为 l软链接

img

查看硬链接的i节点 ,确定是硬链接,相同的文件相同的存储block块
  • 硬链接比较隐蔽,除了i节点,不容易区分硬链接
  • 硬链接的限制比较多,并且不能跨分区,不能针对目录使用

img

终端操作小技巧

  • Ctrl +L 清屏
  • Tab 自动补全

其他的有用的命令

  • echo 666 >> niuniu.log 将666 写入到文件末尾

文件搜索命令

文件搜索命令locate

  • 语法 locate 文件名,搜索文件名;

  • 在后台数据库中按文件名搜索,搜索速度更快,占用系统资源少,但是功能单一只能搜索文件名

  • /var/lib/mlocate locate所搜索的后台数据库

  • updatedb 更新数据库

    注意:这个数据库不是实时更新的,更新频率大概每天一次 ; 可以手动强制更新数据库 ;在不同的版本数据库名字可能有点区别

locate three
locate: can not stat () '/var/lib/mlocate/mlocate.db': No such file or directory
//执行一下 updatedb 即可加载相关库,就可以使用该命令了
/etc/updatedb.conf 配置搜索的筛选规则 ,配置文件含义
  • 该配置不仅仅对locate命令生效而且对whereis与which也生效
    PRUNE_BIND_MOUNTS="yes" //配置文件生效(开启搜索限制)
    PRUNENAMES=".git .bzr .hg .svn" //不搜索的文件类型
    PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot" //不搜索的路径
    PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
    //不搜索的文件系统
#### 命令搜索命令whereis与which
  • whereis [命令名] 搜索命令所在的路径以及帮助文档所在的位置

    • -b 只查找可执行文件
    • -m 只查找帮助文件
  • which [命令] 查看命令所在位置,如果命令有别名显示别名

    其他相关命令 :whoami 查看当前用户 whatis [命令关键字]查看命令的作用

    Path环境变量:定义的是系统搜索命令的路径;

  • 命令搜索的命令依赖path所定义的环境变量

    //打印Path环境变量
    root@DESKTOP-2IM4LQA:/mnt/f/test/one/three# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    root@DESKTOP-2IM4LQA:/mnt/f/test/one/three#
    

### 文件搜索命令find

*   `find [搜索范围] [搜索条件]`  搜索文件

*   `find / -name install.log` 在根目录下根据名字搜索 install.log文件(名字需要完全一样才行)

    *  避免大范围搜索,会非常耗费系统资源;
    *   `find`是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配 通配符是完全匹配
*   `find /root -iname install.log` 查找文件不区分大小写

*   `find /root -user root` 按照所有者搜索 ,在root目录下搜索用户root的文件

*   `find /root -nouser` 查找指定目录中没有所有者的文件

*   `find /var/log -mtime +10` 查找 十天前 修改的文件

    *   `-10` 十天内
    *   `10`  十天当天
    *   `+10` 十天前

        *   `atime` 文件访问时间 英文原意 `access`

        *   `ctime` 改变文件属性 英文原意 `change`
    *   `mtime` 修改文件内容 英文原意 `modify`

> 可以用于日志文件查询;可以支持按照分钟查找

*   `find . -size 25k` 在当前文件夹下查找文件大小是25kb的文件

    *  `-25k` 小于25kb的文件
    *   `25k` 等于25kb的文件
    *   `+25k` 大于25kb的文件
>注意:这里的大小需要是整数;这里的表示`kb`单位用 `k` 如:25k,表示`MB`单位用 大写 `M`;不带单位的话默认参数是block扇区单位(block *512 才是实际字节数)
![img](https://gitee.com/iMist/Linux/raw/master/images/image7.png)
*   `find . -inum 242422` 查找i节点是242422的文件

    > 配套命令 `ls -i`查看文件的i节点
*   复杂的命令
![img](https://gitee.com/iMist/Linux/raw/master/images/image8.png)

    *  `find /etc -size +20k -a -size -50k` 查找`/etc`目录下 大于20kb并且小于50kb的文件
    *   `find /etc -size +5k -a -size -50k -exec ls -lh {} \;`  查找`/etc`目录下 大于20kb并且小于50kb的文件,并显示详细信息;

    *   `-exec/-ok 命令 {} \ ;` 对搜索结果执行操作 `{} \` 表示搜索结果
>注意 : `{}` 和 `\`的符号之间需要空格  ;并且一定要以分号结尾而且分号需要紧紧挨着 `\`
![img](https://gitee.com/iMist/Linux/raw/master/images/image9.png)

##### Linux 中的通配符

*   `*`    匹配任意内容

    *   `find /mnt/f/MyRepository/ -name "*"` 查找当前目录下的所有内容
    *   `find /mnt/f/MyRepository/ -name "read*"`或者 `find /mnt/f/MyRepository/ -name readme*` 查找文件名匹配的项,这里感觉打不打`""` 没有影响
*   `?`    匹配任意一个字符

*   `find /mnt/f/test/one/find -name xix?.log`
*   `[]`   匹配任意一个中括号内的内容

*   `find /mnt/f/test/one/find -name *[s][h]`  查找以`sh`结尾的文件

> 注意:在实际操作过程中,可以不用带引号(环境是win10的linux子系统),另外通配符合一结合使用

### `grep` 搜索字符转的命令

*   `grep [选项] 字符串 文件名` 在当前文件中匹配符合条件的字符串

    *   -i 忽略大小写
    *   -v 排除指定的字符串

### find命令与grep命令的区别

*   `find命令`:在系统当中搜索符合条件的文件名,如果需要匹配则使用`通配符`进行匹配,通配符是`完全匹配`

*   `grep命令` : 在文件当中搜索符合条件的字符串,如果需要匹配,则使用`正则表达式`进行匹配,正则表达式是`包含匹配`

> 查找文件使用完全匹配,查找文件内容使用包含匹配