Linux学习之文件基础

首次登录与使用帮助

  • Linux的基本原则

  1. 由目的单一的小程序组成;组合小程序完成复杂任务;
  2. 一切皆文件;
  3. 尽量避免捕获用户接口;
  4. 配置文件保存为纯文本格式;
  • x window与命令行

默认情况下提供6个终端来让用户登录,使用ctrl+alt+F(16)来切换即可.分别命名为tty1tty6.
还有一种自然是图形界面,称之为x-window.如果已经安装过x-window系统那么运行stratx命令后使用ctrl+alt+F7即可启动.当然这个在inittab文件里是可以自行修改的.像我的是ctrl+alr+F1才是图形界面,并且是默认的.

  • 登录

输入密码登录后,出现类似root@fredal tmp]#的提示,最左边的代表当前用户是root.@后面的指的是主机名fredal,接着代表当前目录为tmp.#代表当前用户是管理员,而$代表当前用户是普通用户.运行su fredal切换用户到普通用户fredal,那么:[fredal@fredal tmp]$.
使用su命令切换用户,使用exit退出.

  • 命令格式与热键

命令格式如下分为命令,选项与参数.

 [root@fredal ~]$ command  [-options]  parameter1  parameter2 ...

例如ls -l /root,选项分为短选项-与长选项--,不同的选项可以合在一起,例如ls -al /root.参数指的是命令的作用对象,像这儿指的是/root目录下.
如果需要补全可以使用按两次tab键,可以用于命令补全,同样也可用于文件补全.
ctrl-c键用于中止程序.ctrl-d相当于输入结束或者exit.

  • 使用帮助

我们的命令分为内部命令与外部命令.
可以用whatis 参数来区分,例如help是一个内部命令,那么

   [fredal@fredal tmp]$ whatis help
    help (1)  - bash built-in commands, see bash(1)

看到有built-in字样,说明是内部命令,否则是外部命令.
如果是内部命令,可以使用help 参数来获取帮助,没错,可以help help.得到关于help命令自身的使用帮助.
外部命令使用man 参数来获取帮助.
输入man 7 man得到

1_0

这样的帮助是分章节的(上图是第七章),每一章如下

  1. 用户命令(/bin, /usr/bin, /usr/local/bin)
  2. 系统调用
  3. 库用户
  4. 特殊文件(设备文件)
  5. 文件格式(配置文件的语法)
  6. 游戏
  7. 杂项(Miscellaneous)
  8. 管理命令(/sbin, /usr/sbin, /usr/local/sbin)

默认是有哪个章节就显示最前的那章.同样可以用whatis 参数来查看命令有哪些章节的说明.而我们要想显示那一章节就用man 章节数 参数即可
关于man使用帮助的一些说明:
符号:
<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组
关键字:
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外参照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后查找
n: 下一个
N:前一个
?KEYWORD:向前查找
n: 下一个
N:前一个

另外使用q退出.
除了man命令,还可以使用info命令来获得帮助,大概是对man的一个补充吧,就是info 参数,不赘述了.

  • 基础命令

  • type

type 参数查看命令的类型及一些信息.

0

  • date与clock

1

看上去没啥区别,不过前者指的是系统时间,后者指的是硬件时间.他们自身的修改不会影响到对方.
可以用自己喜欢的格式显示,例如date +%Y/+%m/+%d,就显示2016/3/13.同样修改时间例如date 1210161730是修改成2030年12月10日16:17:00.可以看到格式是月日时分年.
clock操作类似.如果想让硬件时间同步到系统时间,使用hwclock -s,反之使用hwclock -w.

  • cal

显示日历的命令,cal显示当前月,cal 年份显示某一年的年历.cal 月份 年份显示某年某月的月历.

1_1

  • bc

一个简单的计算器,值得注意的是除法运算和java一样1/3变成0.如果要保留小数使用scale=小数位.使用quit退出

  • nano

一个简单的文本编辑器,使用nano 文件名即可新建文件,进入到以下界面.使用ctrl+O保存,ctrl+x离开

1_2

  • sync

sync进行数据的写入操作,会使内存中尚未更新的数据写入到硬盘中.

  • 开关机

惯例上使用shutdown即可,同时poweroff关机,reboot重启,比如

    shutdown -h now
    poweroff -f

更多参数参考man page.

  • 切换执行等级

常用的几个等级
1. level 0: 关机
2. level 3: 命令行模式
3. level 5: 图形界面模式
4. level 6: 重启

那么显然`init 0`可以执行关机.  
  • 忘记密码

passwd命令,输入两次新密码即可.

文件与目录配置

  • 文件属性

我们用ls -al命令来查看文件,出现如下格式.

2

从左到右基本上可以划分为七列,意义如下:

  1. 文件的类型吧及权限
  2. 表示有多少文件名链接到此节点
  3. 表示这个文件或目录的"所有者帐号"
  4. 表示这个文件的所属用户组
  5. 文件的容量大小,默认为B
  6. 文件的创建日期或者是最近的修改日期
  7. 文件名

说说第一列,也就是类型权限.共有10个字符,第一个字符代表文件的类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件,可供存储的接口设备 (block)
c: 字符设备文件,串行端口设备 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
后面九位,每三个一组,均为"rwx"的三个参数的组合.[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute),如果都没有权限就是[-].

  1. 第一组为"文件所有者的权限"
  2. 第二组为"同用户组的权限"
  3. 第三组为"其他非本用户组"的权限

说说第六列,也就是时间戳.基本上记录以下三类:
访问时间:access
修改时间:modify,文件内容发生了改变
改变时间:change,metadata,元数据(本身的属性改变)

  • 目录配置标准FHS

文件层次标准(FHS,Filesystem Hierarchy Standard)统一解决碎片化问题.
按照文件系统使用频繁与否可分为四类

3_0

根目录:是整个系统最重要的一个目录,所有的目录都由根目录衍生出来,同时也与开机,还原,系统修复等操作有关.
在根目录查看所有文件可以看到
3_1

FHS定义出根目录/应该有以下子目录才好
/bin:放置的是单用户模式下还能被操作的命令,上图中是一个链接文件.
/boot:放置开机会使用到的文件,包括linux内核文件以及配置文件等
/dev: 任何设备与接口文件都是存在这个目录中
/etc: 系统的主要配置文件都在这,一般普通用户可以查阅但只有root用户才能修改
/home: 这是系统默认的用户主文件夹,比如说我这个里面会有fredal的目录在,但是root用户是不在这儿的.带上~选项,表示当前用户的主文件夹.
/lib:放置开机会用到的函数库,以及/bin与/sbin下命令调用的函数库.
/media:媒体的意思,放置的是可删除的设备,包括软盘,光盘...
/mnt:挂载设备的目录
/opt:给第三方软件放置的目录
/root:系统管理员得到主文件夹,和/home是不同的.
/sbin:管理命令,与/bin用户命令不同,包括开机,修复,还原系统等命令
/srv:"service"的缩写,一些网络服务启动之后,所需要取用的数据目录
/tmp:临时文件
当然还有一些目录也是需要了解的
/lost+found:在文件系统发生错误时,将一些丢失的片段放置到这个目录下
/proc:虚拟文件系统,放置的数据都在内存中,如系统的内核,进程,外部设备的状态,网络状态等.
/sys:也是虚拟文件系统,跟硬件设备相关的属性映射文件
接下来需要了解/usr了,(UNIX SoftWare Resource)缩写,也就是操作系统软件资源,而不是什么用户的目录.所有的系统默认的软件都会放置在这,类似于windows中"C:\windows".与/下很多重复目录的区别在于是否与开机相关
/usr/bin:用户可使用的命令,和/bin区别在于是否与开机相关
/usr/sbin:非系统正常运行所需要的系统命令,如网络服务的服务命令
/usr/lib:各种应用软件的函数库,目标文件
/usr/local:系统管理员在本机自行安装的软件,建议放到此目录.这里面也有/bin,/sbin,/lib
/usr/src:源码
接下来将/var.定义为可变的文件,包括缓存,登录文件以及某些软件运行产生的文件.
/var/cache:缓存文件
/var/lib:程序本身执行的过程中需要使用的库
/var/tmp:也是临时文件
我们的目录树如下:
3_2

  • 路径

文件的路径:就是文件存放的地方,通过它系统就可以找到该文件。
绝对路径:路径的写法一定是由根目录“/”写起的。例如:/usr/local/mysql
相对路径:路径的写法不是由根目录“/”写起的。例如例如 ./home/dmtsai../../home/dmtsai/ 等等
. :代表当前的目录,也可以使用 ./ 來表示;
.. :代表上一层目录,也可以 ../ 來代表。
-:代表前一次目录,按多次相当于来回轮换
~:当前用户的主文件夹

文件与目录管理

  • cd(切换目录)

就是一个切换命令的操作,加上~或者啥都不加表示回到主目录.-表示与前一层来回切换,cd ..表示回到上一层,cd /var/spool这种属于绝对路径写法,cd ../bin属于相对路径写法

4

  • pwd(显示目录)

用于打印当前目录,有参数-P表示显示出真实的路径(而不是链接)

4_1

我们知道/bin是一个链接目录.链接到/usr/bin中,所以加了参数会有区别

  • mkdir(创建新目录)

主要参数
-m:用于指定要创建的目录的权限。(不常用)
-p:创建一大串级联目录,并且当创建一个已经存在的目录时不会报错
如果目录已经存在,报错.创建不存在的级联目录时需要加上参数.另外不指定权限会默认为drwxr-xr-x

4_2

我们在创建目录的时候,可以使用{}进行辅助,例如在创建多个目录的时候,或者交叉目录的时候.
[root@fredal tmp]# mkdir -p hello/black/{one,two/guess}创建了多个目录.
[root@fredal tmp]# mkdir -p hello/test/{a,b}_{c,d}这行命令会创建a_c,a_d,b_c,b_d四个目录

  • install

只说-d参数,同样有创建目录的效果

4_2a

  • rmdir(删除目录)

删除空的目录,-p参数可以删除一连串的单源空目录,自底向上的.

  • 环境变量$PATH

为什么可以在某些地方不加地址就可以直接那个命令呢,就是环境变量的原因,可以查看路径设置的详细

4_3

  • ls(查看文件与目录)

ls可能是最常用的指令之一.
主要参数:
-l:长格式(包含文件的属性与权限等数据)
-h:做单位转换(KB,GB)
-a: 显示以隐藏文件
-A: 显示隐藏文件但不包括.和..
-d: 显示目录自身属性
-i: 列出index node, inode
-r: 逆序显示
-R: 递归(recursive)显示,连同子目录文件
-F: 根据文件目录等信息给与附加数据结构(*代表可执行文件,/代表目录,=代表socket文件,|代表FIFO文件)
--color=never :不要颜色;
--color=always :显示颜色
--color=auto :自动决定颜色显示
--full-time :以完整時間模式 (包含年、月、日、時、分) 輸出

4_4
  • touch

一般来说我们用文本编辑器创建新文件,但这个也可以.描述为若之前对应文件不存在,创建一个新文件;若存在,则修改这个文件的最后修改期限(时间戳)
主要参数
-a:只更改存取时间
-c:不建立任何文件
-d:<时间日期>:使用指定的日期时间
-m:只更改变动时间
-r:<参考文件或目录>:把指定的文件或者目录的日期时间,统统设置成为参考文件或目录的日期时间。:
-t:<时间日期>:使用指定的日期时间

4_5

4_6

  • cp(复制文件或目录)

cp使用形如cp SRC DEST.还是有许多要注意的地方.例如如果目标已经存在且是目录,那么会放到该目录下.如果目标已经存在且是文件,会覆盖.如果复制多个文件那么目标必须为目录,如果目标是目录那么必须是存在的等等,如果源文件是目录必须加上-r等等.
主要参数:
-r:递归处理,将指定目录下的文件和子目录一起复制
-i:覆盖现有的文件之前先询问用户
-f: 强制复制
-p: 连同文件的属性一起复制过去
-a:归档复制,常用于备份
-d: 复制链接文件本身而非源文件

4_7

4_8

另外要注意,复制的文件是谁创建的就是谁的用户组,如果要保留用户组的话需要使用-a.而如果源文件是链接文件的话默认复制源文件的,如果复制链接文件本身需要使用-d

  • rm(删除文件或目录)

主要参数
-f:强制删除文件或目录。
-i:删除既有文件或目录之前先询问用户。
-r:递归处理,将指定目录下的所有文件及子目录一并处理。等同于rmdir。
-v:显示指令的执行过程
注意在root用户中,rm相当于rm-i.使用\rm来使用rm

4_9

  • mv(移动文件与目录,重命名)

同样要考虑目标文件或目录是否存在等等
主要参数
-b:若需覆盖文件,覆盖前先备份。
-f:若目标文件和现有的文件或目录重复,则直接覆盖现有的文件或目录。
-i:覆盖现有的文件之前先询问用户。
-v:显示指令执行的过程
-u: 若目标文件存在,比较哪个更新

4_10

  • stat与file(查看属性,类型)

stat用于查看文件各种属性状态,而file用于查看文件类型(包括目录)

4_11

文件内容查阅

有部分内容涉及到管道命令,但是更多的管道命令之后还会细说.

  • cat(查看文件内容)

cat有连接的意思,除了查看单个文件内容,还可以查看多个文件拼接的内容,用空格隔开即可

5_1

主要参数
-n:由1开始对所有输出的行数进行编号。
-b:和-n相似,但是对于空白的行不进行编号。
-s:当遇到有连续的两行以上的空白行时,代换为一行的空白行。
-E:结尾用断行符号$表示出来
5_2

  • tac(反向显示)

就是cat的倒序显示,先显示最后一行.

5_3

  • more和less(分屏显示)

当显示内容过多时候我们需要分屏显示.
more /etc/man.config可以分屏显示文件,空格键下一屏,b键上一屏,Enter键下一行,q表示离开,/KEY表示向下查询.基本与man使用类似,但是却没有上一行的操作.
相对来说less命令更好用一些,less /etc/man.config就是分屏查看,操作与man操作几乎一致.

  • head(取出前几行)

不加参数的话,默认取出前十行.参数-n 数字表示取出前多少行

5_4

另外head -n -100的话表示,后面一百行不打印,只打印前面的.

  • tail(取出后几行)

不加参数同样默认后十行,-n可以指定取出尾部多少行.

5_5

类似的如果tail -n +100,表示前面一百行不打印,只打印后面的,相当于取多少行后的所有.
参数-f非常有用,相当于持续检测后面的内容.比如tail -f test.txt后,在另一个终端尾部添加test.txt的内容,当前终端会实时显示.

  • cut(选取)

这个与之后几个也是涉及到管道命令,这里先有个基础的认识.
选取命令就是将一段数据进行分析,然后选出我们想要的,当然这个过程是不会改变数据的内容的,只是显示内容改变
主要参数:
-d:后面接分割字符,与-f一起使用
-f:表示取出第几段的意思
-c:以字符的固定单位取出固定字符

5_6

看到passwd文件都是以:为分隔符的一串,那么如果要取出每行的第一段就应该使用cut -d: -f1 /etc/passwd.
5_7

如果要去出第一段到第三段就使用cut -d: -f1-3 /etc/passwd
5_8

那如果没有分隔符,而只想根据第几个字符来分割,比如只想取出前面三个字符,或者12个字符以后的所有字符怎么办?
可以使用cut -c -3 /etc/passwd,cut -c 12- /etc/passwd
5-9

  • sort(排序显示)

排序是默认根据ASCII表顺序的
主要参数:
-f:忽略大小写的差异,Aa认为一样.
-b:忽略最前面的空格符部分
-n:使用数字的排序方式
-r:反向排序
-u:表示重复的行仅出现一行
-t:分隔符
-k:表示以哪个区间的字段进行排序

5_10

接下来我们对passwd的第三个字段进行排序
5_11

  • uniq(去除重复显示)

要注意的是和sort -u不同,这儿只有相邻并且重复才会被认为是重复
主要参数:
-d:显示重复的行
-D:显示所有重复的行
-c:进行重复的计数

5_12

  • wc(计数)

想要知道有多少行,多少字,多少字符.可以使用这个命令
主要参数:
-l:仅输出多少行
-w:仅输出多少字
-m:仅输出多少字符

5_13

  • tr(操作字符)

tr可以删除一段信息当中的文字,或者进行替换.当然这个只是在显示上做得改动,不会真的删除或替换.
主要参数:
-d:删除这个字符串
-s:替换掉重复字符

5_14

  • join(合并文件操作)

处理两个文件间的数据,把相同数据的一行加在一起.
主要参数:
-t::分隔符
-i:忽略大小写的差别
-1:表示第一个文件要用哪个字段来分析
-2:表示第二个文件用哪个字段分析
我们建立两个文件,第一个以姓名,性别,年份,班级来建立字段.第二个以姓名,年份,身高体重来建立字段.
那么如果是默认的,就是会以空格符分割数据,并且对比第一个字段的数.这里join -t: a.txt b.txt就会对比两个文件的名字字段并合并显示.我们看到年份字段也是两个文件共有的,第一个文件中第三段和第二个文件中第二段是年份,那么join -t: -1 3 a.txt -2 2 b.txt可以按年份进行合并,但是注意到我们文件中有两个相同年份2015,所以会出现交叉

5_15

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容