《调教命令行04》触碰Linux的每个角落(长文)
原创:小姐姐味道(微信公众号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-zsh
和oh-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的每个角落(长文)相关推荐
- 《调教命令行01》选Linux发行版,就像挑女朋友
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. 手机屏幕灭了,一片漆黑.小王的面孔逐渐出现在变成了镜子的屏幕上.他拿出一根牙签,张大了嘴巴 ...
- 《调教命令行02》准备一个冰清玉洁的Linux系统
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. <调教命令行01>选Linux发行版,就像挑女朋友 接上文. "你是 ...
- 《调教命令行09》磁盘很廉价,放小电影最合适了
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处.任何不保留此声明的转载都是抄袭. <调教命令行01>选Linux发行版,就像挑女朋友 <调教命令行02&g ...
- windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡
微软官方人员承认微软正在对Windows命令行环境或是Windows终端进行全方位的改进,目的是能和Linux命令行相竞争.随着Linux云服务器的大量被采用,很多Linux云服务器都没有安装图形界面 ...
- linux命令行怎么播放,在linux命令行里能听歌看电影吗
zmj27404 于 2012-06-11 18:23:48发表: 怎么弄!! 10# dert 陈超 于 2012-05-20 19:44:22发表: 我试过在fedora命令行里面用mplayer ...
- linux命令行参数含空格,Linux的命令行参数风格
在Linux中,几乎所有程序都会提供几个命令行选项,有些程序提供的命令行参数多到咂舌!这样做使得程序的运行非常灵活,而且程序的配置信息可以由脚本指定,这对于作为管道或过滤器的程序尤其重要.有三种约定可 ...
- 命令行收集(DOS/Linux/nc/xscan/xsniffer)
#1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" ...
- java 执行linux命令行_10个高效Linux技巧及Vim命令对比
专注于Java领域优质技术,欢迎关注 作者:vimtutor 来自:Vim教程网 Vim的很多命令和功能与Linux系统的命令和功能及其相似,可以说是一脉相承.Vim教程网(https://vimjc ...
- linux命令行下载github文件,Linux命令行下使用GitHub
Linux命令行下使用GitHub 1.注册github账号 2.创建ssh密钥 cd ~ ssh-keygen -t rsa -C your_email@example.com 1 2 cd~ ss ...
- linux下java命令行参数_Java调用Linux命令行
Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...
最新文章
- php可以打印一个页面,利用html实现分页打印功能的实例详解
- java selenium iframe_如何使用java在Selenium WebDriver中处理iframe
- linux基础概念和个人笔记总结(6)
- HDU1040-As Easy As A+B
- ERP笔记2-善用SVN对系统环境进行配置和组织
- 【数理知识】拉格朗日乘数 Lagrange multipliers
- 自动滚放的html,HTML5实现视频播放器随页面滚动固定页面右下角效果详解
- 图片处理 javax.imageio.IIOException: Unsupported Image Type
- g开头的C语言编程软件,C语言函数大全(g开头)
- webservice的原理及概念
- linux mount 默认读写,Linux mount 修改文件系统的读写属性
- 虎牙联合河北省反诈中心推出“青少年反诈教育公开课”
- Redis的哨兵(sentinel)模式
- ARM开发7.5.2 基础实训( 6 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 2 )--LPC21XX
- 《尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)》视频1
- 微信商户转账到银行卡-java_微信商户平台的钱如何转到个人账户中
- 计算机科学与技术高校毕业生要求,计算机科学与技术专业 毕业要求(2016)
- Gluster升级遇到的问题
- 安卓手机如何打开.crx文件_如何在安卓手机上使用Chrome插件
- Unity遮罩 反向遮罩实现
热门文章
- PAT乙级真题1093 || 字符串A+B(详解,C/C++示例,测试点分析)
- 商场百货数字化会员系统引流方式 购物中心线上会员拉新
- Nginx不停机升级
- 深入解析Javascript异步编程
- Android源码编译:openjdk安装
- 申宝优配-指数缩量大跌
- 亲自用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
- ASP连接Oracle数据库简易DEMO完全案例
- python画结构图_【实战案例】五分钟!用python绘制系统架构图
- 如何区分虚拟网卡和物理网卡