linux的学习系列 2--文件系统
Linux中的所有数据都被保存在文件中,所有的文件被分配到不同的目录。目录是一种类似于树的结构,称为文件系统。
当你使用Linux时,大部分时间都会和文件打交道,通过本节可以了解基本的文件操作,如创建文件、删除文件、复制文件、重命名文件以及为文件创建链接等。
在Linux中,有三种基本的文件类型:
1) 普通文件
普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。
2) 目录
目录可以包含普通文件和特殊文件,目录相当于Windows和Mac OS中的文件夹。
3) 设备文件
有些教程中称特殊文件,是一个含义。Linux 与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux 和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。
例如,每一个终端都有自己的设备文件来供 Linux 写数据(出现在终端屏幕上)和读取数据(用户通过键盘输入)。
设备文件和普通文件不一样,设备文件中并不包含任何数据。
设备文件有两种类型:字符设备文件和块设备文件。
- 字符设备文件以字母"c"开头。字符设备文件向设备传送数据时,一次传送一个字符。典型的通过字符传送数据的设备有终端、打印机、绘图仪、modern等。字符设备文件有时也被称为"raw"设备文件。
- 块设备文件以字母"b"开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。
查看文件
查看当前目录下的文件和目录可以使用 ls 命令,例如:
$ls bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
通过 ls 命令的 -l 选项,你可以获取更多文件信息,例如:
$ls -l
total 1962188 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
每一列的含义如下:
- 第一列:文件类型。
- 第二列:表示文件个数。如果是文件,那么就是1;如果是目录,那么就是该目录中文件的数目。
- 第三列:文件的所有者,即文件的创建者。
- 第四列:文件所有者所在的用户组。在Linux中,每个用户都隶属于一个用户组。
- 第五列:文件大小(以字节计)。
- 第六列:文件被创建或上次被修改的时间。
- 第七列:文件名或目录名。
注意:每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"..",所以对于一个空目录,第二列应该为 2。
通过 ls -l 列出的文件,每一行都是以 a、d、- 或 l 开头,这些字符表示文件类型:
前缀 | 描述 |
---|---|
- | 普通文件。如文本文件、二进制可执行文件、源代码等。 |
b | 块设备文件。硬盘可以使用块设备文件。 |
c | 字符设备文件。硬盘也可以使用字符设备文件。 |
d | 目录文件。目录可以包含文件和其他目录。 |
l | 符号链接(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。 |
p | 具名管道。管道是进程间的一种通信机制。 |
s | 用于进程间通信的套接字。 |
提示:通俗的讲软连接就是windows的快捷方式,原来文件删了,快捷方式虽然在但是不起作用了。
元字符
元字符是具有特殊含义的字符。* 和 ? 都是元字符:
- * 可以匹配 0 个或多个任意字符;
- ? 匹配一个字符。
例如
$ls ch*.doc
可以显示所有以 ch 开头,以 .doc 结尾的文件:
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
这里,* 匹配任意一个字符。如果你希望显示所有以 .doc 结尾的文件,可以使用
$ls *.doc。
隐藏文件
隐藏文件的第一个字符为英文句号或点号(.),Linux程序(包括Shell)通常使用隐藏文件来保存配置信息。
下面是一些常见的隐藏文件:
.profile:Bourne shell (sh) 初始化脚本
.kshrc:Korn shell (ksh) 初始化脚本
.cshrc:C shell (csh) 初始化脚本
.rhosts:Remote shell (rsh) 配置文件
查看隐藏文件需要使用 ls 命令的 -a 选项:
$ ls -a . .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
一个点号(.)表示当前目录,两个点号(..)表示上级目录
注意:输入密码时,星号(*)作为占位符,代表你输入的字符个数。
创建文件
在Linux中,可以使用 vi 编辑器创建一个文本文件,例如:
$ vi filename
上面的命令会创建文件 filename 并打开,按下 i 键即可进入编辑模式,你可以向文件中写入内容。例如:
This is Linux file....I created it for the first time.....
I'm going to save this content in this file.
完成编辑后,可以按 esc 键退出编辑模式,也可以按组合键 Shift + ZZ 完全退出文件。这样,就完成了文件的创建。
$ vi filename
$
编辑文件
vi 编辑器可以用来编辑文件。由于篇幅限制,这里仅作简单介绍,将在后面章节进行详细讲解。
如下可以打开一个名为 filename 的文件:
$ vi filename
当文件被打开后,可以按 i 键进入编辑模式,按照自己的方式编辑文件。如果想移动光标,必须先按 esc 键退出编辑模式,然后使用下面的按键在文件内移动光标:
- l 键向右移动
- h 键向左移动
- k 键向上移动
- j 键向下移动
使用上面的按键,可以将光标快速定位到你想编辑的地方。定位好光标后,按 i 键再次进入编辑模式。编辑完成后按 esc 键退出编辑模式或者按组合键 Shift+ZZ 退出当前文件。
查看文件内容
可以使用 cat 命令来查看文件内容,下面是一个简单的例子:
$ cat filename
This is Linux file....I created it for the first time.....
I'm going to save this content in this file.
$
可以通过 cat 命令的 -b 选项来显示行号,例如:
$ cat -b filename
1 This is Linux file....I created it for the first time.....
2 I'm going to save this content in this file.
$
统计单词数目
可以使用 wc 命令来统计当前文件的行数、单词数和字符数,下面是一个简单的例子:
$ wc filename
2 19 103 filename
$
每一列的含义如下:
- 第一列:文件的总行数
- 第二列:单词数目
- 第三列:文件的字节数,即文件的大小
- 第四列:文件名
也可以一次查看多个文件的内容,例如:
$ wc filename1 filename2 filename3
复制文件
可以使用 cp 命令来复制文件。cp 命令的基本语法如下:
$ cp source_file destination_file
下面的例子将会复制 filename 文件:
$ cp filename copyfile
$
现在在当前目录中会多出一个和 filename 一模一样的 copyfile 文件。
重命名文件
重命名文件可以使用 mv 命令,语法为:
$ mv old_file new_file
下面的例子将会把 filename 文件重命名为 newfile:
$ mv filename newfile
$
现在在当前目录下,只有一个 newfile 文件。
mv 命令其实是一个移动文件的命令,不但可以更改文件的路径,也可以更改文件名。
删除文件
rm命令可以删除文件,语法为:
$ rm filename
注意:删除文件是一种危险的行为,因为文件内可能包含有用信息,建议结合 -i 选项来使用 rm 命令。
下面的例子会彻底删除一个文件:
$ rm filename
$
你也可以一次删除多个文件:
$ rm filename1 filename2 filename3
$
标准的Linux流
一般情况下,每个Linux程序运行时都会创建三个文件流(三个文件):
- 标准输入流(stdin):stdin的文件描述符为0,Linux程序默认从stdin读取数据。
- 标准输出流(stdout):stdout 的文件描述符为1,Linux程序默认向stdout输出数据。
- 标准错误流(stderr):stderr的文件描述符为2,Linux程序会向stderr流中写入错误信息。
linux的学习系列 2--文件系统的更多相关文章
- Linux基础学习系列目录导航
Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...
- Linux 系统化学习系列文章总目录(持续更新中)
本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...
- Linux基础学习系列(一)
Linux是一种类似于UNIX的操作系统,由Linus Torvalds于1991年在minix操作系统的基础创建.Linux凭借其优良特性已经成为目前发展潜力最大的操作系统. Linux的版本有内核 ...
- Linux快速学习系列
这篇文章会随着学习的进行,不断的更新!!! 总结 操作系统引入的抽象概念 进程(process) 地址空间(address space) 虚拟内存(virtual memory) 操作系统引入的cah ...
- linux的学习系列 10---vi
Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能. ...
- linux的学习系列 6---打印文件和发送邮件
文件打印 如果你希望打印文本文件,最好预先处理一下,包括调整边距.设置行高.设置标题等,这样打印出来的文件更加美观,易于阅读.当然,不处理也可以打印,但是可能会比较丑陋. 大部分的Linux自带了 n ...
- linux的学习系列 1---简介
Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Linu ...
- Linux基础学习-NFS网络文件系统实时文件共享
NFS网络文件系统 如果大家觉得Samba服务程序的配置太麻烦了,那么你共享文件的主机都是Linux系统,那么推荐大家在客户端部署nfs服务来共享文件.nfs(网络文件系统)服务可以将远程Linux系 ...
- linux&shell学习系列
1.VMware安装Centos7虚拟机 2.Linux之vim详解 3.linux后台运行的几种方式 4.linux权限管理 5.linux之用户和用户组管理详解 6.grep文本搜索工具详解 7. ...
随机推荐
- POJ 1704 Georgia and Bob(阶梯博弈+证明)
POJ 1704 题目链接 关于阶梯博弈有如下定理: 将所有奇数阶梯看作n堆石头,做Nim,将石头从奇数堆移动到偶数堆看作取走石头,同样地,异或值不为0(利己态)时,先手必胜. 定理证明看此博:htt ...
- hdu_2296_Ring(AC自动机+DP)
题目链接:hdu_2296_Ring 题意: 有m个字符串,每个字符串有一个价值,现在让你组成一个不超过n长度的字符串,使得价值最大 题解: 很明显是在AC自动机上的DP,设dp[i][j]表示当前长 ...
- 理解 Storm 拓扑的并行度(parallelism)概念
组成:一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks)! 在一个 Storm 集群中,Storm 主要通过以下三个部件来运 ...
- LeetCode OJ Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- Java 容器一些知识
一.Collection 1.static 方法: Collections.sort(List<T>):实现List排序功能 Collections.fill(List<T> ...
- 获取android源码中遇到的问题
最近项目相当紧张,回家之后还需要继续研究android源码. 从网上找了一些资料,下载过程中还是遇到了很多问题.这里罗列一下: 1. 下载Repo过程中提示证书问题: curl https://dl- ...
- android资源文件的选取
Android app项目中,res是用来存放资源文件的,来看看这些文件的创建和选取规则: 系统启动一个apk后,生成UI的过程中,会根据不同的系统配置来匹配.选择相应的资源文件. You shoul ...
- php 好用的函数
extract — 从数组中将变量导入到当前的符号表,数组的键将作为新的变量,数组的值将最为新变量的值
- MFC下MCI的使用播放音乐
最近研究了一下MFC下的音乐的播放,主要使用了MCI 1.需要包含的库文件 在链接资源里(link)添加库文件VFW32.lib winmm.lib 2.包含的头文件 #include <mms ...
- Qt主窗体显示最前
在delphi中使用Application.BringToFront;可以保证当前程序显示在最前. 然而今天在Qt中,没有类似函数供调用. 尝试了activeWindow,show,showNorma ...