美文网首页程序员
Linux学习之文件基础

Linux学习之文件基础

作者: fredal | 来源:发表于2016-03-14 18:11 被阅读179次

    首次登录与使用帮助

    • 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

    相关文章

      网友评论

        本文标题:Linux学习之文件基础

        本文链接:https://www.haomeiwen.com/subject/hmvflttx.html