Linux基础知识和命令,Linux学习记录一

注:本文当前linux系统发行版为Red hat系的Centos7
本文结构

Linux命令基础

如何查找命令和命令的历史记录

文件和目录组织命令

Linux中一切都是文件
目录
对文件的操作
浏览和创建文件
文件的复制移动删除和链接

Linux命令基础

切换为root 用户
sudo su
退出root用户:exit或者ctrl+D
获取当前用户名:whoami
获取当前主机名:hostname
命令行提示符可自行配置,以后再提
列出当前目录下的文件和目录:ls ls是list的缩写

  • 命令参数:参数是写在命令之后的一些补充选项,命令和参数之间有空格隔开
    参数里可与包含多个参数,由空格隔开
    参数也可以包含数字,字母等
    参数没有固定的格式,但是一般来说还是会遵循一定的规范

    短参数(一个字母)
    最常用的参数形式是一个短横线后接一个字母:
    举个伪命令例子 command -p
    一次加好几个段参数,可以用空格隔开:
    command -p -a -T -c
    多个段参数可以合并在一起:command -paTc
    区别字母大下写 例如 command -T 和command -t是不同的
    ls -a获取当前目录下所有文件

    长参数(多个字母)
    多个长参数不能像多个短参数那样合并,而是只能以空格隔开:
    command --parameter1 --parameter2
    短参数和长参数可以组合使用
    有时候,同一意义的参数有短参数和长参数两种形式
    效果相同:例如ls-als-all

    参数的值
    有一些参数需要赋值,短参数和长参数的赋值方式不同
    短参数赋值,通常是这样的:command -p 10
    长参数赋值,通常是这样的:command --parameter=10

如何查找命令和命令的历史记录

  • 如何找到一个命令
    用Tab键补全命令,也可以补全文件名、路径名:按两次Tab键
    当按Tab键补全后结果太多,一页显示不完时,space(空格键)表示跳到下一页,enter(回车)键可以跳到下一行
    按下Q键退出列表

  • 命令的历史记录
    向上键:按时间顺序向前查找使用过的命令,每按一次就前进一个命令
    向下键:按时间顺序向后查找使用过的命令,没按一次就前进一个命令

    Ctrl+R:用于查找使用过的命令

    history命令:列出之前使用过的所有命令
    history还可以用**!编号**这样的格式重新运行history输出中对应编号的命令

  • 一些实用的快捷键
    Ctrl+L 用于清理终端的内容,就是清屏的作用,与命令clear作用相同。其实就是把之前终端的内容清理到了上面,用鼠标滚轮还是可以上翻

    Ctrl+D 给终端传递EOF(End of File,文件结束符)
    shift+PgUp用于向上滚屏,与鼠标的滚轮向上滚屏效果相同
    shift+PgDn用于向下滚屏…

    Ctrl+A光标跳到一行命令的开头,Home键效果相同
    Ctrl+E光标跳到一行命令的结尾,End键效果相同

    Ctrl+U删除所有在光标左侧的命令字符
    Ctrl+K删除所有在光标右侧的命令字符

    Ctrl+W删除所有在光标左侧的一个“单词”(这里的“单词”是指用空格隔开的一个字符串。例如 “ -a ”)

    Ctrl+W粘贴用Ctrl +U,Ctrl+K 或Ctrl+W“删除 ”的字符串,有点像“剪切-粘贴”

文件和目录组织命令

Linux中一切都是文件

  • linux系统中的文件可以简单的分为两类
    普通文件
    特殊文件

  • 普通文件
    文本类型的文件(.txt, .doc, .odt,等等)
    声音文件(.wav, .mp3,.ogg),还有程序,等
    这样的的文件windows中也有

  • 特殊的文件
    其他的一些文件是特殊的,因为它们表示一些东西
    例如光盘 驱动器就是这样的文件

  • 根目录
    linux有且只有一个根目录 / ,根目录是Linux中最顶层的目录

  • 目录的结构
    Linux用斜杠 / 来标明目录的层级与包含关系
    Linux的目录形式是这样的 /user/bin
    Linux目录名一般规范:
    一般Linux下目录尽量不要使用空格或者其他特殊符号
    尽量用小写英文字母,以省去一些不必要的麻烦

  • 根目录的直属子目录
    bin:是英语binary的缩写,表示“二进制文件”bin目录包含了会被所有用户使用的可执行程序

    boot:英语boot表示启动,包含于Linux启动密切相关的文件

    dev:英语device的缩写,表示“设备“,包含外设,它里面的子目录,每一个对应一个外设

    etc:etc是法语 et cetera 的缩写,翻译成英语即为 and so on ,表示“…等等”etc包含系统的配置文件

    home:即“家”目录,用户的私人目录,Linux中每个用户都在home目录下有一个私人目录(除了root用户)root用户拥有所有权限,与普通用户不在一起

    lib:英语library的缩写,表示“库”lib目录包含被程序调用的库文件,后缀名 .so (windows下的库文件以 .dll 结尾)

    media:"媒体”可移动外设(USB,SD卡,DVD,光盘等等)插入电脑时,Linux可以让我们通过media的子目录来访问这些外设中的内容

    mnt:英语 mount 的缩写,表示“挂载”有点类似media,但是一般用于临时挂载一些装置

    opt:英语 optional application software package 的缩写,表示“可选的应用软件包”,用于安装多数的第三方软件和插件

    root:“根“”目录,root用户的“家”目录

    sbin:英语system binary 的缩写,表示“系统二进制文件”sbin目录包含系统级的重要可执行程序
    srv:service的缩写,表示“服务”包含一些网络服务启动后所需取用的数据
    tmp:temporary 表示“临时的”,普通用户和程序存放临时文件的地方

    usr: unix software resource的缩写,表示“Unix操作系统资源软件”usr是最庞大的目录之一,有点类似于windows中的C:\Windows和C:\Program Files 的集合
    usr 目录里安装了大部分用户要调用的程序

    var:variable,表示“动态的,可变的”var通常包含程序的数据,比如log(日志)文件,log文件记录了电脑中发生了什么事

    linux文件系统结构图参考:Linux基础知识和命令,Linux学习记录一图片来源:https://linuxtoy.org/archives/linux-file-structure.html

  • pwd命令和which命令
    pwd命令:print working directory 显示当前工作目录的路径
    刚打开一个终端(Terminal),你将位于你的用户家目录~中
    例如用户是xiaoming,那么~这个目录就是/home/xiaoming这个目录
    通常命令行提示符会显示当前你所在的目录。

    which命令:获取命令的可执行文件的位置
    which 命令不是一个必不可少的命令,平时用到的不多
    which 命令用于显示一个命令对应的可执行程序的位置
    window的可执行程序是以 .exe结尾,Linux中一般是没有后缀名的

目录

目录相关的命令 ls ,cd, du

  1. ls 列出文件和目录
    CentOS的终端默认是有颜色标注的,一般来说
    蓝色 -->目录
    绿色 -->可执行文件
    红色 -->压缩文件
    浅蓝色 -->链接文件
    灰色 -->其他文件
    可以通过命令 ls --color=auto来开启颜色标注,通过ls --colour=none来关闭
    为避免每次都输入额外参数,可以在配合文件中修改
    ls 常用参数
    -a:显示所有文件和目录,包括隐藏文件
    Linux中以( . )开头的文件是隐藏文件,但不包括开头的两个 . 和 … ,这两个的含义如下 一个 . 表示当前目录,两个 … 表示上一级目录

    大写的参数 -A ,他的作和小写的 -a 几乎一样,唯一的不同是 -A不列出 . 和 … 这两个文件

    -l:详细列表
    -l这个参数几乎算是老师命令中最常用的命令了
    -l 参数使ls命令列出一个显示文件和目录的详细信息的列表
    例如:Linux基础知识和命令,Linux学习记录一
    drwxr -xr -x 表示文件权限
    链接的数目:2 之类的,第三列表示用户的名称,第四列表示文件所在的群组,第五列是文件大小,单位是octet,也就是byte,即字节 后面一列是文件和目录最后一次修改的时间

    -h :以Ko ,Mo, Go 的形式显示文件大小
    仅使用ls -l ,列出的文件详细信息中,文件大小是以字节为单位的
    参数 -h,h是human readable 的缩写

    -t:按照最近一次修改时间顺序排序
    ls 的参数合并在一起使用,效果是叠加的:例如 ls -lath

  2. cd 命令:切换目录
    cd 是 change directory 的缩写,表示“切换目录”
    cd命令后面接的参数为 :你要去的那个目录的路径
    回到上一级目录(父目录),用 cd ..后退两个层级 cd ../..
    相对路径:相对于当前目录的一个路径表示法
    绝对路径:不管当前位于那个位置,绝对路径都是保持不变的

    切换到家目录的三种方法
    1.cd /home/xxx(xxx当前用户名)
    2.cd ~
    3.直接 cd 不加任何参数
    可以使用Tab键路径自动补全

  3. du命令:显示目录包含的文件大小
    du 可以让我们知道文件和目录所占空间大小
    与ls -l 相比,du 命令统计的才是真实的文件大小
    du 命令会深入遍历每个目录的子目录,统计所有文件的大小
    du 是 disk usage 的缩写,表示“磁盘占用/已用”

    du 命令的参数:
    -h :以Ko ,Mo, Go 的形式显示文件大小与历史命令中 -h 参数类似
    -a: 显示文件和目录的大小
    默认情况下,du 只显示目录的大小
    -s:只显示总计大小 例如 du -sh

对文件的操作

浏览和创建文件
  • cat和less命令:显示文件内容(只能显示文件内容,不能修改)

  • cat 是 concatenate 的缩写,“级联/串联”
    cat可以一次性在终端显示文件的所有内容(比较适合小的文件)
    用法:只需要在命令后加上想要显示的文件路径即可
    cat -n显示行号
    cat 还可以连接两个文件一并输出,如: cat -n Xorg.9.log Xorg.0.log

  • less 命令:分页显示文件内容
    如果文件比较大,cat命令显示所有内容就不太合适了,与 cat 不同, less 命令会分一页一页显示
    此外还有个命令 more ,more 和 less 命令功能类似,但 more 命令只能往后翻页,不能往前,more 没有 less 强大

  • less命令中最常用的快捷键
    空格键 :文件内容读取下一个终端屏幕的行数,与PgDn效果相同
    回车键:文件读取下一行,与向下键效果相同
    d键:前进半个屏幕
    b键:后退一页 (PgUp)
    y键:后退一行,与向上键效果相同
    u键:后退半页(半个屏幕)
    q键:停止读取文件,中止less命令(quit)
    区分大小写

    = 号:显示当前在文件中的位置
    显示当前页面的内容是文件中的第几行到第几行
    h 键:显示帮助文档。q键退出帮助文档
    / :进入搜索模式(n键在搜索所得结果中跳转,n下一个,shift+n上一个)
    正则表达式也可以用在搜索内容中

  • head命令和tail命令:显示文件的开头和结尾
    head显示文件开头几行,tail显示文件结尾几行
    head:默认显示开头10行
    用-n 参数指定显示的行数,例如 head -n 5显示前5行

    tail:默认显示尾10行
    用-n 参数指定显示的行数,例如 head -n 5显示尾5行
    tail命令可以配合 -f 参数实时追踪文件的更新,用 Ctrl+c终止 tail -f
    Ctrl+c组合可以终止大部分终端命令
    默认情况下 tail -f 每隔1秒检查一下文件是否有新内容
    可以指定间隔检查的秒数,用 -s 参数 :tail -f -s 4 xxxxxx为追踪的文件名, 上述命令表示每隔 4 秒检查xxx文件的更新

  • touch命令:创建一个空白文件
    touch 命令设计初衷其实是修改文件的时间戳 ,但是如果touch命令后面跟着的文件名不存在,它会新建一个
    touch + 文件名 可以创建新文件,touch可以同时创建多个文件,如 touch new_file new_file_2

  • mkdir 命令:创建一个目录
    mkdir即 make directory
    mkdir + 需要创建目录的路径,mkdir也可以同时创建多个目录,如 mkdir new_folder new_folder_2
    -p 参数:递归的创建目录结构 如 mkdir -p one/two/three

文件的复制移动删除和链接
  • cp命令:拷贝文件或目录

  • 拷贝文件
    cp 可以拷贝单个/多个文件,也可以拷贝目录
    例如拷贝 new_file 文件 :cp new_file new_file_copy我们就创建了new_file 的拷贝 new_file_copy
    第一个文件 new_file 是已经存在的文件,即被拷贝文件
    第二个 new_file_copy 文件是需要创建的文件,是 new_file 文件的副本
    复制到另一个目录
    只需把 cp 命令的第二个参数换成目录名:例如 cp new_file one其中one为一个目录
    如果想拷贝文件的同时,不要具有相同名字
    那么可以 cp new_file one/new_file_copy其中 one 为一个目录

  • 拷贝目录
    拷贝目录只需要在cp 命令之后加上 -r 或者 -R 参数
    这里 r 大小写作用相同,表示 recursive ,即“递归的”
    拷贝的时候,目录中所有内容(子目录和文件)都会被拷贝
    例如 cp -r one one_copy即拷贝 one 目录为 one_copy

  • 使用通配符 *
    *是(星号)正则表达式中的通配符,可替代任意字符串
    cp *.txt folder: 把当前目录下所有txt文件拷贝到 folder 目录下
    cp ha*folder :把当前目录以ha开头的文件都拷贝到folder目录中

  • mv 命令:移动文件
    mv 即 move

  • 移动文件(或目录)
    与 cp 命令用法类似,但是不会复制当前文件
    mv new_file_2 one : 将 new_file_2 这个文件移动到 one 目录
    用 mv 命令移动目录很简单,不需要额外参数,和移动文件一样
    例如: mv new_folder one
    mv 也可以配合通配符 ( * )使用 例如:mv *.txt one

  • 重命名文件(或目录)
    实际上Linux没有命令用来重名,但是文件(目录)经过mv 移动后,可以将原始文件变成新名字的文件,相当于重命名
    例如:mv new_file renamed_file

  • rm 命令:删除文件和目录
    rm 即remove 删除
    终端中没有回收站或者垃圾箱,用rm删除后,一般恢复难度比较大,或者恢复起来比较麻烦
    rm 可以删除单个/多个文件 例如 rm file1 file2 file3
    -i 参数:向用户确认是否删除 (i即 inform)
    保险起见,用rm 命令删除文件时,可以加上 -i 参数
    这样对于每一个要删除的文件,终端都会询问我们是否删除

-f 参数 :慎用,不会询问是否删除,强制删除 (f 即 force)
在 rm 命令后加上 -f 参数,终端不会询问用户是否确定删除文件,文件会被强制删除
例如 rm -f file

-r 参数:递归的删除 (r即 recoursive)
使用 -r 参数,可以使 rm 命令删除目录
并且递归的删除其包含的子目录和文件

也存在一个命令 rmdir 但是这个命令只能删除空的目录

**

rm 命令加 -r 和 -f 参数:极为危险!rm -rf/ 或者 rm-rf/ 千万不要在 root 身份下尝试这个命令,将会删掉整个Linux系统*

**
Linux基础知识和命令,Linux学习记录一
一般系统会加入保护机制,如果无视提示,运行sudo rm -rf --no-preserve-root /系统将被删除,在PC上,如果使用双系统,而windows挂载在Linux上的话,windows系统也将被删除。
Centos 系统对如下命令是没有防护措施的
cd / 然后 sudo rm -rf *总之rm -rf很危险,用之前先搞清自己所在目录以及后面所加路径。

  • ln 命令:创建链接

  • physical link:物理链接或硬链接

  • symbolic link:符号链接或软链接
    在硬盘上存储时,大致来说
    每个文件分为两部分:
    文件名文件内容
    文件名的列表储存在硬盘的其他地方
    和文件内容分开存放,这样方便Linux管理
    其实文件可分为三部分:文件名权限文件内容,这里做了简化。
    因此每个文件名都绑定到它的文件内容(用inode标识)
    如图:Linux基础知识和命令,Linux学习记录一

  • ** 创建硬链接**
    硬链接原理:使链接的两个文件分享同样的文件内容,就是同样的inode
    ,一旦文件和文件2之间有了硬链接,那么修改文件1或者文件2,修改的是同一块的内容
    硬链接的缺陷:只能创建指向文件的硬链接,不能创建指向目录的
    通过一些参数的修改,也可以创建指向目录的硬链接,但是比较复杂
    软链接可以指向文件或目录,对于目录,一般都是用软链接
    创建file1和file2文件,使file2成为file1的硬链接
    要创建硬链接,直接是由ln命令,不加任何参数:ln file1 file2
    这样就创建了file1的链接file2:原理图如下
    Linux基础知识和命令,Linux学习记录一
    可以用 ls -i命令查看两个文件的链接(-i 参数可以显示文件的inode)
    对于硬链接,删除任意一方的文件对另一方是没有影响的,只有既删除file1又删除file2,它们共同指向的文件内容才会消失,也就是那个inode才会被删除

  • 创建软链接
    软链接才真正像我们在windows下的快捷方式,原理很相似
    创建硬链接时 ln 不带任何参数,创建软链接需要加上 -s 参数
    s 是symbolic (符号的)的缩写

ln -s file1 file2 :创建file1 和file2 的软链接,原理如图:
Linux基础知识和命令,Linux学习记录一
使用ls -l查看 file1 和 file2 ,file2的信息是这样的:file2->file1,表示file2 指向 file1,file2前面权限那里有一个字母变成了l,表示link(链接)硬链接是没有此标识的。
file2这个软链接其实只是file1的快捷方式
(硬链接:硬链接文件的作用之一是允许一个文件拥有多个有效的路径名,这样就可以建立硬链接到重要的文件,以防止误删重要源数据。很多硬件存储,如 netapp 存储中的快照功能就是应用了这个原理。
软链接:类似Windows中的“快捷方式”,一般用得比硬链接多。)
软链接的特点
如果我们删除file2 ,file1不会受到影响
如果我们删除file1,file2会变成“死链接”,因为指向的文件不见了
软链接可以指向目录,硬链接不行