1:文件与目录

文件与目录


目录

  • CD 切换当前工作目录
  • mkdir 创建目录
  • re -dir 删除目录
  • pwd 打印当前工作目录
  • 绝对路径和相对路径
  • 硬链接 和软链接
  • CP拷贝
  • MV 移动
  • dirname 和 basenam
  • 文件内容的查阅
  • 修改时间文件于新建文件
  • 命令与文件的查询

正文

CD 切换当前工作目录

cd /etc #直接切换到/etc目录
cd .. #切换到上层目录
cd . #切换到当前目录
cd #回到自己的家目录
cd ~ #回到自己的家目录
cd - #回到上次工作目录

PWD 打印当前工作目录

pwd [-LP]
• L 显示逻辑工作目录
• P 显示物理工作目录

mkdir 创建目录

• mkdir [pm] <dir> • -p 自动创建⽗目录
• -m 设置权限

结果

[root@iZbp16r4d86u2hs6405o6mZ ~]# mkdir -p python/code/
[root@iZbp16r4d86u2hs6405o6mZ ~]# ls -al
total 128
dr-xr-x---. 14 root root  4096 May 24 13:20 .
dr-xr-xr-x. 18 root root  4096 May 21 12:02 ..
-rw-r--r--   1 root root    61 May 23 08:44 1.c
-rw-------   1 root root  4288 May 24 13:14 .bash_history
-rw-r--r--.  1 root root    18 Dec 29  2013 .bash_logout
-rw-r--r--.  1 root root   176 Dec 29  2013 .bash_profile
-rw-r--r--.  1 root root   176 Dec 29  2013 .bashrc
drwxr-xr-x   3 root root  4096 Jul 11  2019 .cache
drwxr-xr-x   2 root root  4096 May 24 11:02 Ccode
-rw-r--r--.  1 root root   100 Dec 29  2013 .cshrc
drwxr-xr-x   2 root root  4096 May 21 13:07 .LfCache
drwxr-xr-x   3 root root  4096 May 21 12:26 .local
drwxr-xr-x   2 root root  4096 Jul 11  2019 .pip
drwxr-----   3 root root  4096 May 21 12:19 .pki
-rw-r--r--   1 root root   205 May 21 11:59 .pydistutils.cfg
drwxr-xr-x   3 root root  4096 May 24 13:20 python

re -dir 删除目录

rm dir [r] <dir>

• r 递归删除目录及其内容 对话框 强制删除

• f — force 递归删除

/* 目录下所有

remark:—→ rm -rf /* 意义递归删除所有


绝对路径和相对路径

相对路径 指令

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# gcc 1.c
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ls

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ./a.out

结果

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# gcc 1.c
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ls
1.c  2.c  3.c  a.c  a.out  b.c
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ./a.out
Hello World[root@iZbp16r4d86u2hs6405o6mZ Ccode]#

PATH="$PATH":/Ccode/a.out —?硬转义 当前代码代表什么意思。


硬链接 和软链接

[root@iZbp16r4d86u2hs6405o6mZ ln]# touch f12
[root@iZbp16r4d86u2hs6405o6mZ ln]# ln f12 f11
[root@iZbp16r4d86u2hs6405o6mZ ln]# ln -s f12 f13
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -li
total 0
1063645 -rw-r--r-- 2 root root 0 May 24 14:15 f11
1063645 -rw-r--r-- 2 root root 0 May 24 14:15 f12
1063646 lrwxrwxrwx 1 root root 3 May 24 14:16 f13 -> f12

试验一下...

当前目录下的id F11硬链接和F12 相同 但是F13的软链接指向F12 ID却是有差异的

ln -s 软连接 实际上→在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

ln dir ln dir 硬链接 →硬连接指通过索引节点来进行连接

提示:硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。 在Linux中,多个文件名指向同一索引节点是存在的。 —>一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。 —>硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

CP拷贝

cp [irapdslu] <sour> <des>

选项

Ø -i:若⽂件存在,询问用户

Ø -r:递归复制

Ø -a: pdr的集合

Ø -p: 连同⽂件属性⼀起拷贝

Ø -d: 若源⽂件为连接⽂件的属性,则复制连接⽂件的属性

Ø -s:拷贝为软连接

Ø -l:拷贝为硬连接

Ø -u:源⽂件比目的⽂件新才拷贝

Ø 尝试:cp file1 file2 … dir

[root@iZbp16r4d86u2hs6405o6mZ ln]# touch a.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -i
1063645 a.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ln a.c b.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -i
1063645 a.c  1063645 b.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ln -s a.c c.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -i
1063645 a.c  1063645 b.c  1063646 c.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -il
total 0
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 a.c
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 b.c
1063646 lrwxrwxrwx 1 root root 3 May 24 15:17 c.c -> a.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -il
total 0
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 a.c
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 b.c
1063646 lrwxrwxrwx 1 root root 3 May 24 15:17 c.c -> a.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# cp c.c d.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -il
total 0
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 a.c
1063645 -rw-r--r-- 2 root root 0 May 24 15:14 b.c
1063646 lrwxrwxrwx 1 root root 3 May 24 15:17 c.c -> a.c
1063649 -rw-r--r-- 1 root root 0 May 24 15:30 d.c
[root@iZbp16r4d86u2hs6405o6mZ ln]#

remark :

        在当前拷贝的c.c 到d.c (c.c 来自于a.c→实际也是a.c)     最终cp(拷贝的指令最终文件id 也于a.c的id不同)

CP-d 连同 : 连同⽂件属性⼀起拷贝

[root@iZbp16r4d86u2hs6405o6mZ ln]# cp -d c.c e.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls i
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -il
1063646 lrwxrwxrwx 1 root root 3 May 24 15:17 c.c -> a.c
1063649 -rw-r--r-- 1 root root 0 May 24 15:30 d.c
1063650 lrwxrwxrwx 1 root root 3 May 24 15:37 e.c -> a.c
[root@iZbp16r4d86u2hs6405o6mZ ln]#

remark :-d 由此 返回看出(e.c -> a.c) 这里是链接的属性

-s:拷贝为软连接

-l:拷贝为硬连接

-u:源⽂件比目的⽂件新才拷贝

[root@iZbp16r4d86u2hs6405o6mZ ln]# vim c.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# cp c.c d.c
cp: overwrite ‘d.c’? y
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls -il
total 12
1063645 -rw-r--r-- 2 root root 72 May 24 15:56 a.c
1063645 -rw-r--r-- 2 root root 72 May 24 15:56 b.c
1063646 lrwxrwxrwx 1 root root  3 May 24 15:17 c.c -> a.c
1063651 -rw-r--r-- 1 root root 72 May 24 15:57 d.c
1063650 lrwxrwxrwx 1 root root  3 May 24 15:37 e.c -> a.c

从c.c 覆盖到d.c 必须是源文件比目标文件新

MV 移动

mv [ifu] <source…> <dest>

mv source1 source2 source3 dir

Ø-i:互动模式

Ø-f:force

Ø-u:源⽂件(更新)才会移动

[root@iZbp16r4d86u2hs6405o6mZ ln]# mv d.c Ccode
[root@iZbp16r4d86u2hs6405o6mZ ln]# ls
a.c  b.c  c.c  Ccode  e.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# cd
[root@iZbp16r4d86u2hs6405o6mZ ~]# cd Ccode
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ls
1.c  2.c  3.c  a.c  a.out  b.c
[root@iZbp16r4d86u2hs6405o6mZ Ccode]#

dirname 和 basenam

dirname

1:获取目录部分,剥掉文件名。

[root@iZbp16r4d86u2hs6405o6mZ ~]# dirname /Ccode/a.c
output   -->/Ccode

如果不存在就在. 一般在脚本取路径

basenam

2:获取末尾的文件名或者路径名

[root@iZbp16r4d86u2hs6405o6mZ ~]# basename /Ccode/1.c
-->1.c

文件内容的查阅

cat 正向连续读

  1. Øcat [-AbEnTv] <file>
  2. Ø选项:
  3. Ø -A:相当于-vET
  4. Ø -v:列出看不出的字符
  5. Ø -E:显示断⾏符为$
  6. Ø -T: 显示TAB为^I
  7. Ø -b:列出⾏号
  8. Ø -n:列出⾏号,连同空⾏也编号

参数 cat [-b] file 显示行号

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# cat -b 1.c
    out put 
     1  #include<stdio.h>
     2  #include<stdlib.h>
     3  #include<unistd.h>
     4  #include<fcntl.h>
     5  #include<string.h>
     6  #include<pthread.h>

     7  int main()
     8  {
     9      /*在双引号中间输入Hello World*/
    10      printf("Hello World");
    11      return 0;
    12  }

tac 反向连续读

与cat 同理不多做赘述

nl 显示行号显示

Ø nl [-bnw] <file>

Ø选项

Ø -b: ⾏号指定的⽅式

Ø -b a:相当于cat –n

Ø -b t:相当于cat -b

Ø -n:列出⾏号的表示⽅法

Ø -n ln:⾏号在屏幕最左边显示

Ø -n rn:⾏号在自⼰字段的最右边显示

Ø -n rz:⾏号在自⼰字段的最右边显示,前面自动补全0

Ø -w <num>:⾏号所占位数

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# nl -b a 1.c

  1  #include<stdio.h>

  2  #include<stdlib.h>

  3  #include<unistd.h>

  4  #include<fcntl.h>

  5  #include<string.h>

  6  #include<pthread.h>

  7

  8  int main()

  9  {

  10      /*在双引号中间输入Hello World*/

  11      printf("Hello World");

  12      return 0;

  13  }

MORE 按页查看

复习一下 | 管道符<—将前面参数的标准输出到后面参数文件的标准输入

 cat 1.c | mor
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# cat 1.c | more
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<pthread.h>

int main()
{
    /*在双引号中间输入Hello World*/
    printf("Hello World");
    return 0;
}

讲输出的文件让more 显示 不允回翻,没有高亮

LESS 按页查看

less file

Ø/string 向下查找

n: 继续向下查找

Ø/?string 反向查找 N:继续反向查询

同理 按键 n 往下找, 大写的N往上找

HEAD 查看头几行

head [-n num] <file>

Ø-n num:显示前num⾏

Ø-n -num:除了后num⾏外,其他的都显示

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# cat 1.c | head -2
#include<stdio.h>
#include<stdlib.h>

查看前几行

TAIL 查看末尾几行

Øtail [-n num] <file>

Ø-n num:显示⽂件后num⾏

Ø-n +num:除了前num⾏,其他的都显示

如何查看⼀个⽂件的第101⾏到120⾏?

提示 : |

先取头的120行 在用管道取后19行

head 120 1.c | tail -19

修改时间文件于新建文件

文件的三个时间

mtime:内容数据改动时才更新这个时间

ls -al total 128 dr-xr-x---. 14 root root 4096 May 24 17:04 . dr-xr-xr-x. 18 root root 4096 May 21 12:02 .. -rw-r--r-- 1 root root 61 May 23 08:44 1.c -rw------- 1 root root 5272 May 24 16:27 .bash_history

ctime:⽂件的权限,属性改动时更新这个时间

当修改了数据,同时也会改变属性 而ls 的文档中也提到了Time的时间也同时发生了变化 。

使用-l,将时间显示为WORD,而不是默认的修改时间:atime或access或use(-u)ctime或status(-c);如果--sort=时间,也使用指定的时间作为排序键

atime:⽂件的内容被取用access时,更新这个时间

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# echo  xxxc >b.c

-rw-r--r--   1 root root    4 May 24 17:43 b.c
如下 echo axc >xx.c

表示将符号左侧的内容,以覆盖的方式输入到右侧文件中

ls -al --time=atime xx.c  //返回的是atime
-rw-r--r-- 1 root root 4 May 24 17:51 xx.c

修改文件时间与新建文件

touch [-acdmt] <file>

Ø-a:仅修改访问时间

Ø-c:仅修改⽂件的时间,若⽂件不存在,不新建

Ø-d:修改⽂件日期

Ø-m:仅修改mtime

Ø-t:修改⽂件时间[yymmddhhmm]

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# touch d.c  --可以修改时间
[root@iZbp16r4d86u2hs6405o6mZ Ccode]# ls -al --time=atime d.c
-rw-r--r-- 1 root root 0 May 24 18:38 d.c

文件隐藏属性

chattr [+-=][ASacdistu] <file_or_dir>

ØA:不修改atime

ØS:同步写⼊

Øa:只能增加数据

Øc:自动压缩,解压

Ød:不会被dump程序备份

Øi:不能删除,修改,建立连接

Øs:⽂件删除时,直接从磁盘删除

Øu:⽂件删除时,数据内容存在磁盘中

查看 文件隐藏属性: → lsattr

a:只能增加数据

[root@iZbp16r4d86u2hs6405o6mZ ln]# touch f.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# chattr +a f.c
o -----a-------e-- ./f.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# echo abc1 >f.c
-bash: f.c: Operation not permitted --不允许操作

remark : 当前的操作是重写,赋予的属性为只允许增加数据

echo abc1>>f.c 

符号(追加内容) 往后写入就不会报权限erro了

覆盖写入

—赋予权限不允许被删除,即使是超级管理员

[root@iZbp16r4d86u2hs6405o6mZ ln]# rm .fc
rm: cannot remove ‘.fc’: No such file or directory

i:不能删除,修改,建立连接

chattr +i f.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# lsattr
output : ----ia-------e-- ./f.c
[root@iZbp16r4d86u2hs6405o6mZ ln]# echo abc >>f.c
-bash: f.c: Permission denied

赋予了i的权限 即使给是追加内容也是不允许插入的

文件的特殊权限

权限 作用的对象 效果 set_uid s | 二进制程序文件,非脚本 | 用户在执行改程序时获取程序所有者权限 set_gid s | 目录和二进制程序文 |用户在该目录里,有效组变为目录所属组 sticky bit t | 目录 |在该目录下,用户只能删除自己创建的内容

拷贝上传文件

scp .\plugged.zip root@url:~/

命令与文件的查询

一:which 寻找可执行的文件

只能查找path下面的所有可执行的文件

1:用 which [command]

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

alias —>alias [指令的别名] 意思是输入 which 会等于后面接的那串命令!

example :→

--color[=WHEN] 来自于ls 的指令 ,=auto 为ls 在执行的时候虚拟终端的配色来显示

2: 查找文件显示命令路径

ps: lsmod是一个命令行实用程序,用于显示有关已加载的Linux内核模块的信息。

[root@iZbp16r4d86u2hs6405o6mZ ~]# which lsmod
/usr/sbin/lsmod

remark : which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!

二:whereis 寻找特定文件

whereis [-bmsu] <file_or_dir>

Ø-b:只查找⼆进制⽂件

Ø-m:只查找manual路径下的⽂件

Ø-s:只查找source源⽂件

Ø-u:查找其他⽂件

[root@iZbp16r4d86u2hs6405o6mZ ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

ps 实际为两个路径 一个是bin 下面的ls可执行程序 || /usr/share/man/man1/ls.1.gz ls 的帮组手册

[root@iZbp16r4d86u2hs6405o6mZ ~]# whereis stdio.h
stdio: /usr/include/stdio.h

三: locate 模糊定位

locate [-ir] keyword

-i:忽略⼤小写

-r:后面可接正则表达式

ps: centos 没有这个指令,需要安装

yum install mlocate
updatedb

搜索代码文件

[root@iZbp16r4d86u2hs6405o6mZ ~]# locate stdio.h
/usr/include/stdio.h
/usr/include/bits/stdio.h
/usr/include/c++/4.8.2/tr1/stdio.h
/usr/lib64/perl5/CORE/nostdio.h

本质上依据的是一种索引的计数的 由这个updatedb 指令可以看出 存在了文件的index 存储在了这个db中。

四:FIND 高级查找

find [PATH] [option] [action]

Ø与用户或用户组相关的参数:

Ø -uid n:用户UID为n

Ø -gid n:群组Gid为n

Ø -user name:用户名为name

Ø -group name:群组名为name

Ø nouser:⽂件所有者不存在

Ø nogroup:⽂件所在组不存在

id 查看自己的i
[root@iZbp16r4d86u2hs6405o6mZ ~]# find / -amin -1 -uid 0

find [PATH] [option] [action]

Ø与⽂件权限及名称有关的参数:

Ø -name filename:⽂件名为filename

Ø -size [+-] SIZE:查找比SIZE⼤或小的

Ø -type TYPE: f b c d l s p

Ø -perm mode:mode 刚好等于的⽂件

Ø -perm –mode:全部包含mode的⽂件

Ø find

-exec ls –l {} ;

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# find . -mtime 1
./1.c
./a.out
./a.c

ps1天前修改过的的文件

[root@iZbp16r4d86u2hs6405o6mZ Ccode]# find . -mtime -1
./1.c
./a.out
./a.c

ps :一天内修改的文件

demo

find / -mtime -1 -uid 0 -name ".c" -size -1k

find / -mtime -1 -uid 0 -name "*.c";   
find / -mtime -1 -uid 0 -name "*.c" -exec ls -al {} \;
find / -mtime -1 -uid 0 -name "*.c" -exec rm -rf {} \;


 find / \(-name "*.c" \)
 
 find . -name \*.c -o  -name \*.h -o -name \*.py  \用了反斜杠转义
 find . -name \*.c -o  -name \*.h -o -name \*.py -exec cat {} \; | wc -l
 
posted @ 2022-06-29 14:06  Aquiet  阅读(95)  评论(0编辑  收藏  举报