Linux命令行与shell脚本编程

Linux的文件操作

2018-08-05  本文已影响0人  想去山上定居
图书馆文件操作

地点定桩

  1. 玻璃窗 cd pwd
  2. 双书架位子 ls
  3. 三书架位子 touch ln
  4. 沙发 cp mv
  5. 电脑 rm
  6. 前台 mkdir rmdir
  7. 书架 file
  8. 前进的路 cat
  9. 桌椅(看书的)more less
  10. 玻璃墙 tail head

玻璃窗 cd + pwd

cd:change directory 跳转路径

pwd:Print Working Directory 输出当前工作路径

从左边窗户最顶玻璃开始跳,每跳一次需要cd 时间为1s,第一跳一个点,跳到当前目录,第二跳两个点,跳到上级目录,第三跳上坡的反斜杠,跳到根目录。

  1. 绝对路径:使用根目录/ 开头
  2. 相对路径:使用.当前目录,..上级目录开头

跳到右边中间的玻璃就完成任务,完成任务可以得到一个王冠w,带上王冠w 后右边其他两个玻璃就会升起国旗p d,等到pwd。最后就会得到当前坐标位置。

→ pwd # 输出当前的工作路径
/Users/vector.huang

→ cd ./nice # 进入当前目录下的nice 目录
→ pwd
/Users/vector.huang/nice # 已经成功进入nice 目录

→ cd ../nice2 # 进入上一级目录的nice2 目录
→ pwd
/Users/vector.huang/nice2 # 已经成功进入nice2 目录

双书架位子 ls

ls:list directory contents 路径内容列表

讲解

把指定的路径下的文件目录信息写到标准输出上,默认的路径是当前路径

ls [-选项] [file]

  1. file 是一个文件,那么直接输出
  2. file 是一个目录,那么输出该目录下的文件目录名
  3. file 是文件扩展匹配
    • 配置单个显示的结构和两项一样
    • 匹配多个,那么就输出多个

参数

→ ls
text.txt

→ ls -a # 隐藏文件也显示出来了
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .ssh  text.txt

→ ls -l # 按列表显示
总用量 0
-rw-rw-r-- 1 vector vector 0 7月  28 20:10 text.txt

→  ls -F # 名字后面多了标识
testdir/  text.txt

→ ls -RF
.: # 当前目录的内容
testdir/  text.txt

./testdir: # 子目录的内容
1

→ ls -d  # 打印file 参数,与文件扩展匹配结合使用
. # file 参数默认就是当前目录.

→ ls -d */ # 打印当前目录下的目录
testdir/

→ ls -i # 显示inode
655371 testdir  655370 text.txt

→ ls -lh # 显示文件大小
总用量 4.0K
drwxrwxr-x 2 vector vector 4.0K 8月   5 15:14 testdir
-rw-rw-r-- 1 vector vector    0 7月  28 20:10 text.txt

→ ls -lhS # 排序
总用量 4.0K
drwxrwxr-x 2 vector vector 4.0K 8月   5 15:14 testdir
-rw-rw-r-- 1 vector vector    0 7月  28 20:10 text.txt

记忆

双书架的位置是孙悟空s拿着金箍棒l => ls。

-al
靠近玻璃窗的书架里面放着都是苹果a,因为隐形了所以看不见。只要用棍子l 扫过去,那么苹果就会在书架旁排成列表。

-FR
排好苹果之后,可以用大斧头F 砍,砍出不同的样子,就能区分出目录、文件、可执行文件、链接文件等,但躲在很高的草里面的苹果不被砍,只能砍掉草的叶子(叶子=子目录)。

说大、高等字的代表大写,默认小写

-di

远离玻璃窗的书架有一只狗d 看守,谁过来就咬谁,直接赶出去(直接输出file),狗前面会有一根蜡烛i,蜡烛上面刻着一个数据,用来做唯一标识inode。

-hS

远离玻璃窗的书架上面有一张椅子h,孙悟空很喜欢坐上去称一下自己有多重(大小),大孙悟空S 可以优先坐上去(排序)。

三书架位子 touch ln

讲解

touch : 新建文件

ln :link创建链接文件

  1. 符号链接:产品一个文件(符号文件)指向其他文件,两文件的inode 不一样
  2. 硬链接:直接链接到硬盘上面的文件,两文件的inode 一样
  3. 创建符号链接需要添加 -s 参数
  4. 删除本体文件符号链接会失效,硬链接不会失效,可以理解为硬链接文件就是为硬盘文件的另一个引用。
//理解符号链接和硬链接
Object a = new Object();
Object b = a; // 创建硬链接
Object c = new Object(a); //创建软链接

...回收引用a 之后 //删除本体文件

对象b 还是可用
对象c 还是在,但是里面的a 已经没有了,相当于作废了

→ touch text.txt
→ ls
text.txt

→ ln -s text.txt text2.txt #创建符号链接
→ ls -lF # -F 参数查看链接文件多一个@
total 0
-rw-r--r--  1 vector.huang  staff  0  8  5 19:55 text.txt
lrwxr-xr-x  1 vector.huang  staff  8  8  5 19:57 text2.txt@ -> text.txt

→ ln text.txt text3.txt #创建硬链接
→ ls -lF
total 0
-rw-r--r--  2 vector.huang  staff  0  8  5 19:55 text.txt
lrwxr-xr-x  1 vector.huang  staff  8  8  5 19:57 text2.txt@ -> text.txt
-rw-r--r--  2 vector.huang  staff  0  8  5 19:55 text3.txt

→ ls -i # 查看inode
8596244097 text.txt  8596243518 text2.txt 8596244097 text3.txt

记忆

中间书架没有书,只要人触摸touch 一下就会产生一本书,右边书架比较硬,是和中间书架直接链接ln 起来的,完成一样。左边的书架很小,像个美女s。

沙发 cp mv

讲解

讲解

cp :cope,复制多一个一样的文件或目录

cp [-选项] source_file target_file

运行逻辑

  1. 判断目标路径是否是已经存在的目录
    • 如果存在,就在该目录下追加源路径名称
    • 如果不存在,进入下一步
  2. 把源路径和目标路径一一对应开始复制
→ ls -FR #查看当前目录结构
a/

./a:
a.txt

→ cp -r a b # 复制a 为b,这个时候b 不是已存在的目录,直接复制为b
→ ls -FR
a/ b/

./a:
a.txt

./b:    # 可以看到 a->b | a/a.txt->b/a.txt
a.txt

-> cp -r a b 
# 在次运行同样的复制名字,但是这个时候b 已经是存在的目录了
# 需要在b 的基础上添加a,变为 b/a,所以命令相当于
# cp -r a b/a
# (如果b/a已经存在就不做再次添加了,只会做一次的判断)
→ ls -FR
a/ b/

./a:
a.txt

./b:  # b 目录下面已经存在了a 目录
a/     a.txt

./b/a:
a.txt

→ tree  # 或许这样看的比较清晰
.
├── a
│   └── a.txt
└── b
    ├── a
    │   └── a.txt
    └── a.txt

明白了上面的案例,估计cp 就学会了,下面来学习部分参数

mv:move file,移动文件,和cp 的原理一样,可以理解为mv 把源文件删除了(当然实现逻辑不是这样的)

# b 目录不存在,直接移动为b
→ tree
.
└── a
    └── a.txt
→ mv a b 
→ tree
.
└── b
    └── a.txt
    
# b 目录存在,会移动到b目录下面
→ tree
.
├── a
│   └── a.txt
└── b
    └── a.txt
→ mv a b
→ tree
.
└── b
    ├── a
    │   └── a.txt
    └── a.txt

记忆

  1. -rfuiv
  2. -ls
  3. -dp
  4. -Sb

1号沙发和2号沙发是cp,但是2号沙发喜欢移动mv 到了3号沙发,三角恋很可悲。
最可悲的是一号沙发,他是做ui 的,有一次不小心运行了 rm -rf /*,啰啰嗦嗦(verbose)地赔了10万。现在还要被2号沙发甩。

2号沙发变成孙悟空(ls)直接链接(硬链接和符号链接)到3好沙发。

3号沙发开心的两边都插上了狗旗dp,很开心接受了2号沙发的链接,之后把自己也变成链接(符号链接),还把属性都设置为一样的。

在我这一个外人看来,三个都是大傻逼Sb,都可以拿去备份了。

电脑 rm

用法

rm:remove 移除文件,默认时,rm 不会删除目录。使用--recursive(-r 或-R)选项可删除每个给定的目录,以及其下所有的内容。

拿着斧头f 直接把第一台电脑的键盘砍了,砍到显示器的时候,看到显示器显示一支蜡烛,就询问一下,还有什么遗言不,问完还是砍一斧头。整部电脑就这样没有了。

第二台电脑旁边长满了草r高高低低的都有R,就算再深入,还是一斧头砍掉键盘,这个时候显示器显示了一只狗d,什么都没有(空目录),这个就简单了轻轻斧头就能砍掉。

第三第四台电脑这个时候就不退缩了,直接站出来,说:#&@&&……¥#%&……#@&(%&……&*@……¥
哆哆嗦嗦,唠唠叨叨的,最后烦的要死就走了。不砍第三第四台电脑了

  1. 键盘1:-f 直接删除
  2. 显示屏1:-i 询问一下,有没有什么遗言呀!
  3. 键盘2:-rR 递归,躲进草里面
  4. 显示屏2:-d 就一只狗,什么都没有
  5. 电脑34:-v 显示当前操作,哆哆嗦嗦唠唠叨叨

前台 mkdir rmdir

用法

mkdir - make directories
mkdir 创建目录,默认不创建父级目录,可以加入-p,--parents 创建父级目录

rmdir - remove empty directories
rmdir 在本身已经有了rm 命令的前提下,该命令显得很多余,那么功能就定位只能删除空目录,也给一个-p,--parents 参数来删除父级空目录

高高的前台是父亲p 创造mk 的,空空的前台(代表操作的是空目录)是时候换掉了。

  1. 高高的前台:创建目录 mkdir -p,父亲创建的前台
  2. 空空的前台:移除空目录 rmdir,空空的

书架 file

用法
  1. 查看文件类型 file filename
→ file tt
tt: ASCII text

→ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped

记忆

书架上我以为是书,拿起来看的时候都是文件呀

  1. 书架:查看文件类型 file,书架放的不是书,而是文件

前进的路 cat

前进的路,无法停下来,查看整个文件的内容

看书的桌椅 more less

less is more,看书看的少,就是多,所以慢慢看,不要急。

玻璃墙 tail head

玻璃墙变成了一个怪人,有头head有尾tail,-n 可以显示行数

上一篇下一篇

猜你喜欢

热点阅读