原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。

《调教命令行01》选Linux发行版,就像挑女朋友
《调教命令行02》准备一个冰清玉洁的Linux系统
《调教命令行03》认识一下,感觉不是说来就来的

接上文。

想要了解一个人,就先要了解他的灵魂。可是别说是灵魂了,就连一个真心的笑容,你在生活中也很难见到。更多的是菩萨手段,修罗心肠。很多人喜欢孩子的原因,就是因为他们悲喜表于面,空白藏与心,与你进行的是灵魂的交流。

所以妹子抽出手的时候,小王虽然略感失望,但还没有到影响心情的地步。这个可能是真的拒绝,也可能是欲说还休,处在朦胧状态,也别有一番滋味。妹子已经不是孩子了,不可能直达灵魂,他也只能按部就班,先了解一下对方基本喜好,行为举止。

至于接下来,管它呢。有的人心扉一戳就开,有的却把真实的一面直接带进坟墓。到底碰见的是哪一种,全凭运气。

小王就是这么认为。

幸运的是,要想了解Linux的文件操作,可以直接了解它的灵魂。

想要了解linux的基本使用方法,就要了解一个基本的事实—linux系统中,一切皆文件。

不管是命令,还是文档,甚至设备,目录,套接字,在linux上对它们的操作都是一致对待的。许多开发驱动程序的小伙伴,会发现使用的一些函数,和读写文件的没什么两样(open、close、read、write、ioctl)。今天我们所说的基本操作,针对的就是普通文件和目录,本小节将详细解释相关命令。

1、当前路径

到现在为止,我们还不知道自己在系统的什么地方。在浏览器上,我们能够通过导航栏上的url,了解到自己在互联网上的具体坐标。相似的功能,是由pwd命令提供的,它能够输出当前的工作目录。

pwd命令是非常非常常用的命令,尤其是在一些命令提示符设置不太友好的机器上。另外,它也经常用在shell脚本中,用来判断当前的运行目录是否符合需求。

有很多线上事故,都是由于没有确认当前目录所引起的。比如rm -rf *这种危险的命令。在执行一些高危命令时,随时确认当前目录,是个好的习惯。

[root@localhost ~]# pwd
/root

我们使用root用户默认登陆后,就停留在/root目录中。Linux中的目录层次,是通过/进行划分的。

2、文件系统用户标准

Linux的文件系统,从一开始就有一个规范标准。它还有一个专有缩写名词,叫做FHS (Filesystem Hierarchy Standard)。FHS经过多年的演进,目录结构也越来越清晰。除了一些标准的要求,还有一些使用者之间的约定。

接下来,我们大体看一下linux上的默认目录,对其有一个基本的感觉。

第1层 第二层 介绍
/bin 目录/usr/bin的软链接
/sbin 目录/usr/sbin的软链接
/lib 目录/usr/lib的软链接
/usr /bin 存放一些常用的命令
/usr /sbin 存放一些管理员常用的命令
/usr /lib 用来存放动态库和一些模块文件
/sys 内核中的数据结构的可视化接口
/proc 内存映像
/run 内存映像
/boot 存放引导程序,内核相关文件
/dev 存放一些设备文件,比如光盘
/etc 用于存储一些全局的、应用的配置文件
/var 与/var/run一样,存放的是系统运行时需要的文件,比如mysql的pid等
/tmp 非常特殊的临时文件夹,断电丢失
/home /** 用户目录,比如我的目录是/home/xjjdog
/root root用户的home目录
  • home 平常,我们打交道最多的目录,就集中在自己的用户目录,我们可以在里面做任何操作,比如我们现在root用户的/root目录。一些自己的资料,比如视频、音频、下载的文件,或者做测试用的一些数据资料,就可以自行在这些目录下规划。root用户比较特殊,普通用户的私人目录都是在/home下的。

  • /etc etc目录是经常要打交道的目录,存放了一些全局的系统配置文件和应用配置文件。比如你安装了php,或者nginx,它们的配置文件就躺在/etc目录下的某个文件夹里。

  • /var var目录存放一些运行中的数据,有必须的,也有非必须的。一些黑客入侵之后,会在这里面的某些文件中留下痕迹,他们会着重进行清理。var目录还是一些应用程序的默认数据存放之地,比如mysql的数据文件。

  • /tmp 目录是一个特殊的临时目录,文件在断电以后就消失了。但这个目录,所有的用户,都有写入权限,通常用来做文件交换用。

  • /proc/sys目录,是两个神奇的目录。它们两个是一种伪文件系统,可以通过修改其中一些文件的状态和内容,来控制程序的行为(修改后会直接刷到内存上,太酷了)。刚开始的时候,只有proc目录,由于里面内容有多又乱,后面又规划出sys目录,用来控制内核的一些行为。如果你在调优一些系统参数,和这些文件打交道的时间比较多。

  • 还有几个空的目录,我们没有列在上面的表格上。比如/srv目录,通常会把一些web服务的资料,比如nginx的,放在这里面。但是,这并不是强制要求的,所以我见过的/srv目录,通常会一直是空的。同样的,/opt目录也是这样一个存在,你就当它不存在就行。这都属于使用者规划的范畴,自定义性非常强。

  • 在使用Linux系统的时候,也可以创建自己的目录。比如,我就喜欢自己创建一个叫做/data的目录,用来存放一些数据库相关的内容。举个例子,/data/mysql存放mariadb的数据,而/data/es/存放elasticsearch的索引内容。

linux上的文件类型有很多,它们大部分都分门别类的存放在相应的目录中,比如/dev目录下,就是一些设备文件;/bin文件下,是一些可以执行命令。通常都好记的很。

3、查看文件列表

所以,上面的表格内容,我是怎么看到的呢,靠记忆么?ls命令,能够列出相关目录的文件信息。可以被评为linux下最勤劳的命令标兵。

现在的终端,都能够输出彩色的信息,非常的直观。oh-my-zshoh-my-bash等项目,可以让你的终端更加的漂亮。把它加入到你的研究清单里吧。

[root@localhost /]# ls /# 注意:ls可以接受路径参数,你不用先跳转,就可以输出相关信息bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# ls -l /# 带上 -l参数,可以查看一些更加详细的信息。total 20lrwxrwxrwx.   1 root root    7 Nov  3 20:24 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Nov  3 20:34 boot
drwxr-xr-x.  19 root root 3080 Nov  3 21:19 dev
drwxr-xr-x.  74 root root 8192 Nov  3 20:34 etc
drwxr-xr-x.   2 root root    6 Apr 11  2018 home
lrwxrwxrwx.   1 root root    7 Nov  3 20:24 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Nov  3 20:24 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root    6 Apr 11  2018 opt
dr-xr-xr-x. 108 root root    0 Nov  3 21:19 proc
dr-xr-x---.   2 root root  135 Nov  4 07:53 root
drwxr-xr-x.  24 root root  740 Nov  3 21:20 run
lrwxrwxrwx.   1 root root    8 Nov  3 20:24 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root    0 Nov  3 21:19 sys
drwxrwxrwt.   9 root root 4096 Nov  4 03:40 tmp
drwxr-xr-x.  13 root root  155 Nov  3 20:24 usr
drwxr-xr-x.  19 root root  267 Nov  3 20:34 var

ls最常用的,就是加参数l或者参数a

3.1、详细信息

加上参数l,能够看到文件的一些权限信息已经更新日期等。但我们还看到了一些更有意思的东西。比如:

lib -> usr/lib

上面表示的,是软链接信息。

就如同我们上面表格所展示的一样,lib目录,是/usr/lib的快捷方式,它们之中的内容,没有什么两样。

关于ls -l展示的更加详细的内容,可以参照我下面的这张图。我们将在了解后面小节的内容后,再次对这张图进行回顾。

3.2 隐藏文件

直接在你的/root目录里,执行ls -al,你会看到更多东西。这些额外的隐藏文件,都是以.开头,以配置文件居多。这就是参数a的作用。

[root@localhost ~]# ls -al
total 28
dr-xr-x---.  2 root root  135 Nov  4 07:53 .
dr-xr-xr-x. 17 root root  224 Nov  3 20:28 ..
-rw-------.  1 root root 1273 Nov  3 20:28 anaconda-ks.cfg
-rw-------.  1 root root  246 Nov  4 11:41 .bash_history
-rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
-rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
-rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc

细心的同学,应该会注意到两个特殊的目录。...。前者表示的是当前目录,而后者表示的是上层目录。

使用cd命令,将在这些目录中,自由穿梭。

小技巧:如果你对英文日期阅读困难,可以使用ls -al --full-time查看可读的日期。

4、切换目录

执行cd命令,可以将工作目录切换到目标文件夹。为了展示cd命令的效果。请在root用户下,执行下面的命令,这将创建一个7层的目录。

cd
mkdir -p a1/b2/c3/d4/e5/f6/{g7,g8,g9,g10}

我们使用cd命令,切换到最后一层。然后,我们使用..切换到上层目录。

[root@localhost ~]# cd a1/b2/c3/d4/e5/f6/g7
[root@localhost g7]# pwd
/root/a1/b2/c3/d4/e5/f6/g7[root@localhost g7]# cd ..
[root@localhost f6]# pwd
/root/a1/b2/c3/d4/e5/f6

所以,切换到上面n层目录,只需使用多层级的../即可。有几个特殊的变量,需要说明一下。

  • ../ 指的是上层目录

  • ../../ 指的是上两层目录

  • ./ 指的是当前目录

  • ~ 指的是当前的用户目录,这是一个缩写符号

  • - 使用它,可以在最近两次的目录中来回切换

我们来使用命令把上面这些特殊变量验证一下。

# 跳转到用户根目录
[root@localhost tmp]# cd ~
[root@localhost ~]# pwd
/root# 进入到第三层目录
[root@localhost ~]# cd a1/b2/c3/
[root@localhost c3]# pwd
/root/a1/b2/c3# 跳回到前三层目录
[root@localhost c3]# cd ../../..
[root@localhost ~]# pwd
/root# 跳到上次访问的目录
[root@localhost ~]# cd -
/root/a1/b2/c3
[root@localhost c3]# pwd
/root/a1/b2/c3# 进入当前目录:等于什么都没干
[root@localhost c3]# cd ./
[root@localhost c3]# pwd
/root/a1/b2/c3

以上就是cd命令的常用用法。现在,我们返回头来看一下mkdir。顾名思义,就是创建目录的意思,但一般在工作中,都会加上-p参数,这样就可以一次性创建多层目录。注意mkdir后面的大括号{},可以一次性的指定多个目录进行创建,这通常能节省很多时间。

5、文件操作

使用命令行操作文件,是非常方便的。

  • touch 新建文件

  • cp 复制文件

  • mv 移动文件

  • rm 删除文件

这四个风骚的命令,主宰着文件资料的去向。我们依然使用上面创建的目录,进行接下来的操作。

# 创建三个文件
[root@localhost ~]# touch long-long-long.txt
[root@localhost ~]# touch 996.txt
[root@localhost ~]# touch icu.txt
[root@localhost ~]# ls
996.txt  a1  anaconda-ks.cfg  icu.txt  long-long-long.txt# 复制一个文件
[root@localhost ~]# cp 996.txt 007.txt
[root@localhost ~]# mv long-long-long.txt short.txt
[root@localhost ~]# ls
007.txt  996.txt  a1  anaconda-ks.cfg  icu.txt  short.txt# 移动996.txt到a1目录,icu.txt到a1/b2目录
# 删除short.txt
[root@localhost ~]# mv 996.txt a1/
[root@localhost ~]# mv icu.txt a1/b2/
[root@localhost ~]# rm short.txt
rm: remove regular empty file ‘short.txt’? y# 递归删除a1目录
[root@localhost ~]# rm -rvf a1/
removed directory: ‘a1/b2/c3/d4/e5/f6/g7’
removed directory: ‘a1/b2/c3/d4/e5/f6/g8’
removed directory: ‘a1/b2/c3/d4/e5/f6/g9’
removed directory: ‘a1/b2/c3/d4/e5/f6/g10’
removed directory: ‘a1/b2/c3/d4/e5/f6’
removed directory: ‘a1/b2/c3/d4/e5’
removed directory: ‘a1/b2/c3/d4’
removed directory: ‘a1/b2/c3’
removed ‘a1/b2/icu.txt’
removed directory: ‘a1/b2’
removed ‘a1/996.txt’
removed directory: ‘a1/’[root@localhost ~]# ls
007.txt   anaconda-ks.cfg

经过一番操作以后,只剩下了007了。除了上面基本的操作,接下来我要介绍一些更加重要的功能。

可以看到在使用rm删除文件的时候,进行了一次提示。这是为了避免误删除一些东西,但有时候,你需要不显示这种提示,就可以加-f参数。f参数对于cp、mv等命令来说,同样适用,它是force的意思。

rm -f file
cp -f file1 file2
mv -f file1 file2

另外,还有一个参数-r,这是递归的意思。我们的目录和文件,通常有多个层次,递归可以把操作全部作用于上面,比如上面的递归删除a1目录。

# 警告:以下命令会造成严重后果
rm -rf /

上面的这个命令,你一定经常看到。这不是笑话,已经有很多用户因此丢失了数据,这就是传说中的删根,最终你将一无所有。那参数v又是干什么用的呢?加上它之后,可以看到命令详细的执行过程。在平常的操作中,我一般都加上。

6、小结

本文介绍了linux上的一些基本操作,能够让我们在系统中任意漫游。这一小节比较啰嗦,主要是照顾新接触的同学,后面的命令,我们会慢慢简化。让我们再回顾一下这些命令。

# 创建目录和父目录a,b,c,d
mkdir -p a/b/c/d# 拷贝文件夹a到/tmp目录
cp -rvf a/ /tmp/# 移动文件a到/tmp目录,并重命名为b
mv -vf a /tmp/b# 删除tmp目录的所有文件
rm -rvf /tmp/*# 创建目录hi,并立即删除它。注意中间的&&
mkdir hi && rmdir hi

7、思考&扩展

1、我能够把cd ../../../../.. 这种繁琐的命令缩写么?(提示:alias命令)

2、Linux上文件类型都有哪些?

END

计算机系统,比人拥有更少的隐藏。它的强逻辑性,使得一切都变的透明。但配合使用人员的千八百种操作,它又赋予了不同的意义。

对Linux来说,

有的人,把它当成吃饭的家伙,多学一点都感觉浪费生命。
有的人,把它当成一种兴趣,狂热的想要了解它的方方面面。
有的人,把它当成一个玩具,只有在无聊寂寞的时候才想到它。
有的人,把它包装成神一般的存在,疯狂的收割韭菜。
有的人,把它用在项目中,让效率如虎添翼。
而有的人,用它埋下一个炸弹,让它和老板原地爆裂…

对于小王来说,挑战性不仅仅是妹子是什么样的人,更重要的是他想变成什么样的人。

以铜为鉴,可以正衣冠;以人为鉴,可以明得失;以史为鉴,可以知兴替。可爱情是个啥,却无以为鉴。

作者简介:小姐姐味道  (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

点在看,你就是我哥
Linux文章推荐

Linux上,最常用的一批命令解析

最常用的一套“Vim“技巧
最常用的一套“Sed“技巧
最常用的一套“AWK“技巧

Linux之《荒岛余生》(一)准备篇
Linux之《荒岛余生》(二)CPU篇
Linux之《荒岛余生》(三)内存篇
Linux之《荒岛余生》(四)I/O篇
Linux之《荒岛余生》(五)网络篇
Java堆外内存排查小结 
"Sed" 高级功能:我这小脑瓜都快绕晕了
将java进程转移到“解剖台”之前,法医都干了什么?
LWP进程资源耗尽,Resource temporarily unavailable
命令行版星球大战 # 挖坟会不会被打?
在终端画画、炒股、玩游戏
这是一张top命令的动动图
Vim漫游键,为什么不设定左手?介绍一种5x倍速漫游方式
作为高级Java,你应该了解的Linux知识

《调教命令行04》触碰Linux的每个角落(长文)相关推荐

  1. 《调教命令行01》选Linux发行版,就像挑女朋友

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. 手机屏幕灭了,一片漆黑.小王的面孔逐渐出现在变成了镜子的屏幕上.他拿出一根牙签,张大了嘴巴 ...

  2. 《调教命令行02》准备一个冰清玉洁的Linux系统

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. <调教命令行01>选Linux发行版,就像挑女朋友 接上文. "你是 ...

  3. 《调教命令行09》磁盘很廉价,放小电影最合适了

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. <调教命令行01>选Linux发行版,就像挑女朋友 <调教命令行02&g ...

  4. windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡

    微软官方人员承认微软正在对Windows命令行环境或是Windows终端进行全方位的改进,目的是能和Linux命令行相竞争.随着Linux云服务器的大量被采用,很多Linux云服务器都没有安装图形界面 ...

  5. linux命令行怎么播放,在linux命令行里能听歌看电影吗

    zmj27404 于 2012-06-11 18:23:48发表: 怎么弄!! 10# dert 陈超 于 2012-05-20 19:44:22发表: 我试过在fedora命令行里面用mplayer ...

  6. linux命令行参数含空格,Linux的命令行参数风格

    在Linux中,几乎所有程序都会提供几个命令行选项,有些程序提供的命令行参数多到咂舌!这样做使得程序的运行非常灵活,而且程序的配置信息可以由脚本指定,这对于作为管道或过滤器的程序尤其重要.有三种约定可 ...

  7. 命令行收集(DOS/Linux/nc/xscan/xsniffer)

    #1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" ...

  8. java 执行linux命令行_10个高效Linux技巧及Vim命令对比

    专注于Java领域优质技术,欢迎关注 作者:vimtutor 来自:Vim教程网 Vim的很多命令和功能与Linux系统的命令和功能及其相似,可以说是一脉相承.Vim教程网(https://vimjc ...

  9. linux命令行下载github文件,Linux命令行下使用GitHub

    Linux命令行下使用GitHub 1.注册github账号 2.创建ssh密钥 cd ~ ssh-keygen -t rsa -C your_email@example.com 1 2 cd~ ss ...

  10. linux下java命令行参数_Java调用Linux命令行

    Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...

最新文章

  1. php可以打印一个页面,利用html实现分页打印功能的实例详解
  2. java selenium iframe_如何使用java在Selenium WebDriver中处理iframe
  3. linux基础概念和个人笔记总结(6)
  4. HDU1040-As Easy As A+B
  5. ERP笔记2-善用SVN对系统环境进行配置和组织
  6. 【数理知识】拉格朗日乘数 Lagrange multipliers
  7. 自动滚放的html,HTML5实现视频播放器随页面滚动固定页面右下角效果详解
  8. 图片处理 javax.imageio.IIOException: Unsupported Image Type
  9. g开头的C语言编程软件,C语言函数大全(g开头)
  10. webservice的原理及概念
  11. linux mount 默认读写,Linux mount 修改文件系统的读写属性
  12. 虎牙联合河北省反诈中心推出“青少年反诈教育公开课”
  13. Redis的哨兵(sentinel)模式
  14. ARM开发7.5.2 基础实训( 6 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 2 )--LPC21XX
  15. 《尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)》视频1
  16. 微信商户转账到银行卡-java_微信商户平台的钱如何转到个人账户中
  17. 计算机科学与技术高校毕业生要求,计算机科学与技术专业 毕业要求(2016)
  18. Gluster升级遇到的问题
  19. 安卓手机如何打开.crx文件_如何在安卓手机上使用Chrome插件
  20. Unity遮罩 反向遮罩实现

热门文章

  1. PAT乙级真题1093 || 字符串A+B(详解,C/C++示例,测试点分析)
  2. 商场百货数字化会员系统引流方式 购物中心线上会员拉新
  3. Nginx不停机升级
  4. 深入解析Javascript异步编程
  5. Android源码编译:openjdk安装
  6. 申宝优配-指数缩量大跌
  7. 亲自用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
  8. ASP连接Oracle数据库简易DEMO完全案例
  9. python画结构图_【实战案例】五分钟!用python绘制系统架构图
  10. 如何区分虚拟网卡和物理网卡