Linux学习笔记(第一部分:系统操作篇)

Linux(CentOS7)

我构建项目服务的时候,每次都在Linux上栽跟头。终于在昨天,我的Linux由于消息服务存放的消息太多,硬盘容量不够,导致系统崩溃,所有服务和Docker镜像容器全部GG(这些构建起来可真能花我不少时间)。我不得不停一停项目,从头开始搞Linux。

我对于Linux上的概念只是一知半解。出了问题只能去百度上查找问题然后复制粘贴命令运行,甚至都不能理解这条命令是做什么用的。半年前我就已经有系统学习Linux的想法。想法是美好的,实践起来可真不容易。

我觉得村上春树的一句话很不错:今天不想跑,所以才去跑,这是长跑者的思维方式。

1.系统操作篇

Linux学习笔记(第一部分:系统操作篇)

1.1.帮助命令:man help info

1.1.1.man

  • man 是 manual的缩写。
  • man帮助用法演示
    • man ls 当然我们也可以写成man 1 ls意思是获取 ls 的第一章的帮助信息,当章节为1的时候,1是可以省略的。
  • man也是一条命令,分为9章,可以使用man命令获得man的帮助。
    • man 7 man 获得man的第七章的描述。
    • man man
    • man -a passwd当我们不知道passwd是一条命令还是什么,我们就可以直接使用该命令,退出之后使用回车键查看下一章的 passwd
      Linux学习笔记(第一部分:系统操作篇)
  • man命令用来执行man cd通过man命令来查看命令的时候发现:cd 命令是内置命令,它是命令解释器shell的内置命令,用man只能查看出bash,所以这种命令只能通过help来进行查看。
    Linux学习笔记(第一部分:系统操作篇)
  • 通过man mkdir命令我们可以得知mkdir后面可以跟多个OPTION参数,也可以跟着多个DIRECTORY(因为后面有省略号)。
    Linux学习笔记(第一部分:系统操作篇)

1.1.2.help

  • help
    • 内部命令使用help帮助:help cd
    • 外部命令使用help帮助:ls --help
    • shell(命令解释器)自带的命令称为内部命令,其他的是外部命令。
    • 我们可以使用type cd(从下图我们可以看出 cd 是内部命令,ls 是外部命令)
      Linux学习笔记(第一部分:系统操作篇)

1.1.3.info

  • Info帮助比help更详细,作为help的补充。info ls

1.2.文件管理命令:pwd ls cd

Linux:一切皆文件。

1.2.1.pwd

pwd就是显示当前目录的名称:Print working directory。

1.2.2.ls

  • ls -l是长格式显示

    • 如图中 lrwxrwxrwx 第一个l就表示是一个link,如果是d表示是一个directory,如果是-表示是一个普通文件;
    • 后面的rwxrwxrwx表示的是文件的权限;
    • 仅仅接的是1表示的是该文件或文件夹内的文件个数;
    • 第一个root表示是谁创建了该文件,第二个root表示该用户是属于哪一个用户组的;
      Linux学习笔记(第一部分:系统操作篇)
  • ls -a表示的是显示所有文件包括隐藏文件

  • ls -l -r以文件名逆序显示

  • ls -l -r -t表示以文件的修改时间排序显示,同样我们也可以使用ls -lrt

  • ls -R递归显示

1.2.3.cd

cd 是表示的更改当前的操作目录。change directory

  • cd /path/to/...绝对路径
  • cd ./path/to/...相对路径
  • cd ../path/to/...相对路径
  • cd -回到之前的所在目录

1.3.文件管理命令:mkdir rmdir

  • mkdir (文件目录) make directory。
    • mkdir -p /a/b/c/d/e/f这里 -p的意思是parents,no error if existing,make parent directories as needed
  • rmdir (文件目录) remove enpty directory
    • 只能删除空目录
  • rm -r (文件目录) remove directories and their contents recursively(递归)
  • rm -rf (文件目录)force(强制)删除文件目录和内容

1.4.复制和移动命令:cp mv

  • cp (文件) (目标文件夹)
    • cp -r (源文件夹) (目标文件夹)递归复制,这种复制方法可以直接将文件夹复制过去;
    • cp -p (源文件) (目标文件夹)与–preserve是一样的,复制的时候维持一些原有的属性。如:mode,ownership,timestamps。
    • cp -a (源文件) (目标文件夹)与–preserve是一样的
    • cp -v (源文件) (目标文件夹)verbose(冗长的) explain what is being down
  • mv (文件) (文件)
    • mv /tmp/filea /fileb可以既移动文件的位置,也修改了文件的名称。
  • 通配符* ?
    • *表示的是一个字符或者多个字符
    • ?表示的是单个字符

1.5.文本查看命令:cat head tail wc more less

  • cat 查看内容显示到终端
  • head 查看文件开头
  • tail 查看文件结尾
    • 常用参数-f follow文件内容更新后,显示信息同步更新。
  • wc 统计文件内容信息
    • print newline, word, and byte counts for each file;
    • wc -l (文件)line 显示文件的行数;
  • more
  • less:less is more

1.6.压缩和解压缩命令: tar

  • tar -cf /tmp/etc-backup.tar /etc(打包示例)
    • 表示的是对 /etc目录进行打包,将该目录下的所有文件打包成.tar放在/tmp目录下。
    • -c:create a new archive(档案)
    • -f:use archive file or device ARCHIVE
  • 压缩的话目前有两条命令gzip bzip2,但实际上tar已经帮我们对gzip,bzip2进行了集成
    • tar -zcf /tmp/etc-backup.tar.gz /etc打包的时候就已经实现了压缩,并且是以gzip的格式进行压缩;
    • tar -jcf /tmp/etc-backup.tar.bz2 /etc以bzip2的格式进行压缩;
  • 解包 tar xf /tmp/etc-backup.tar -C /root
  • 解压缩包 extract(提取)
    • tar -zxf /tmp/etc-backup.tar.gz -C /root将gzip的格式文件进行解压缩
    • tar -zxf /tmp/etc-backup.tar.bz2 -C /root将bzip2格式文件进行解压缩
  • .tbz2实际上就是tar.gz的缩写,.tgz实际上就是tar.bz2的缩写

1.7.文本编辑器 vim

文本编辑器vim一共有四种模式

  • 正常模式(Normal-mode)
    • 进入插入模式i,I,o,O,a,A;
    • 在正常模式下我们可以使用h,j,k,l进行左,下,上,右的操作;
    • 复制整行yy,粘贴p,我们可以使用3yy来复制3行文本内容。复制光标位置到该行结尾的内容用y$;
    • 剪切整行dd,同样我们可以使用3dd来剪切3行文本内容,剪切光标位置到该行结尾的内容用d$;
    • 撤销u;
    • 重做ctrl+r:to newer change;
    • 快速移动到某行:例如:先输入11然后按shift+g。小写的g可以定位到文本的首行,大写的G可以定位到文本的末行;
    • 快速移动到该行的位置:^移动到该行的开头,$移动到该行的结尾。
  • 插入模式(Insert-mode)
  • 命令模式(Command-mode)
    • :set nu:显示行数,:set nonu:不显示行数;
    • :w /root/a.txt将文件保存到…;
    • :/(content) 查找文本中内容的位置,之后我们可以使用n键来查找下一个匹配的字符;
    • :!(shell):我们可以使用!`+其他的操作命令来打开其他的相应内容,方便我们查看复制到文本中;
    • 替换文本内容:
      • :s/(old)/(new):将该行旧的内容替换为新的内容;
      • :%s/(old)/(new):对全文内容进行替换;
      • :(firstLine),(lastLine)s/(old)/(new):将firstLine到lastLine的旧的内容替换成新的内容。
  • 可视模式(Visual-mode)
    • 我们可以在正常模式中使用v(字符可视模式),shift+v(可视行模式)ctrl+v(可视块模式) 进入
    • 我们在选中之后可以使用I进行插入,然后连续2次使用ESC
    • 我们也可以在选中之后使用d键进行删除;

我们修改/etc/vimrc文件,就可以修改vim的配置,我们在该配置文件的最后一行加入set nu,就可以每次打开vim的时候显示行号;

1.8.用户和用户组管理及密码管理

1.8.1.用户管理命令

  • useradd (用户名):新建用户;
    • useradd -g (组名) (用户名):新建的时候就直接将用户放到指定的组下
  • userdel (用户名):删除用户;这个时候用户虽然被删除了,但是该用户的home目录被保留了下来,我们可以使用userdel -r (用户名)同时也删除掉用户的home目录;
  • passwd (用户名):修改用户密码;我们也可以直接使用passwd修改当前登录的密码
  • usermod (option) (用户名):修改用户属性;
    • usermod -g (组名) (用户名):将用户放到指定的用户组下
  • chage (option) (用户名):修改用户属性;

/etc/passwd,/etc/shadow这两个目录下都保留了用户的信息;

我们可以通过id (用户名)来查看用户的相关信息;

1.8.2.用户组命令

  • groupadd (用户组):新建用户组;
  • groupdel (用户组):删除用户组;

1.9.用户切换

  • su - (用户名):切换用户
  • sudo (用户名):以其他用户身份执行命令
    • visudo:设置需要使用sudo的用户(组);
      Linux学习笔记(第一部分:系统操作篇)
      在我们设置命令的时候有可能不知道该命令所在位置;我们可以在vim的命令模式下使用:which (命令)来找到该命令在哪个目录。
      Linux学习笔记(第一部分:系统操作篇)
      我们在文件的最后一行添加相关内容。修改之后,我们使用sudo /sbin/shutdown命令就可以。

1.10.用户和用户组的配置文件

1.10.1./etc/passwd

Linux学习笔记(第一部分:系统操作篇)
以第一行的root用户为例;

  • root:该用户为root
  • x:有x表示需要密码,如不需要密码,那么就没有x,该行就显示为:root::0:0:root(等等);
  • 第二个root:用户的uid
  • 第三个root:用户的gid
  • 第五个字段:注释
  • /root :家目录所在位置
  • /bin/bash:用户登录的命令解释器,如果是/sbin/nologin表示的是该账号不能够被登录

1.10.2./etc/shadow

Linux学习笔记(第一部分:系统操作篇)
以第一行的root用户为例:

  • root:该用户为root
  • $6…:加密后的密码

1.10.3. /etc/group

Linux学习笔记(第一部分:系统操作篇)
Linux学习笔记(第一部分:系统操作篇)
以第一行的root组为例:

  • root:该组为root
  • x:该组是否需要密码
  • 0:该组的gid
  • postfix:该组还属于postfix组

1.11.文件与目录权限

Linux学习笔记(第一部分:系统操作篇)
下图是普通文件的权限说明:
Linux学习笔记(第一部分:系统操作篇)
注意1:我们使用vim对文件进行写的时候并不是真正意义上的对文件进行写操作,而是新建一个隐藏文件,用户所有编写的内容全部保存在该隐藏文件中,当用户保存文件并退出的时候,vim把之前的隐藏文件对之前的文件进行替换。

注意2:权限限制是针对非root用户的,root用户拥有一切权限。

下图是目录文件的权限说明:
Linux学习笔记(第一部分:系统操作篇)

1.11.1.文件类型

  • - 普通文件
  • d 目录文件
  • b 块特殊文件(列入外接硬盘)
  • c 字符特殊文件 (终端)
  • l 符号链接
  • f 命名管道
  • s 套接字文件

1.11.2.文件权限

  • r 可读(4)
  • w 可写(2)
  • x 可执行(1)

1.11.3.权限修改命令

  • chmod 修改文件,目录权限
    • chmod u+x g-x o+w (文件名)这里的u表示的属主,g表示的属组,o表示的其他用户,a表示所有
    • +,-,=加代表加什么权限,减代表减什么权限,等于代表直接设置什么权限。
    • chmod 777 (文件名)用数字修改权限
  • chown 修改属主,属组。
    • chown (属主) (文件)修改文件的属主
    • chown :(属组) (文件)修改文件的属组
    • chown (属主)|(属组) (文件)修改文件的属主和属组
  • chgrp 单独更改属组,不常用
    • chgrp (属组) (文件)修改文件的属组