Contents

Linux 笔记整理

1. Linux 常见目录

目录 用途
/ 根目录,通常不储存文件
/bin 二进制目录,存放用户级 GNU 工具
/boot 启动目录,存放启动文件
/dev 设备目录
/etc 系统配置文件目录
/home 主目录,Linux 在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂在目录,另一个常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/root root 用户的主目录
/sbin 系统二进制目录,存放 GNU 管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/proc 进程目录,存放现有硬件和当前进程的相关信息
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建删除临时工作文件
/usr 用户二进制目录
/var 可变目录

2. 常用命令

  • pwd:显示 shell 会话当前目录。. 表示当前目录,.. 表示当前文件目录的父目录。
  • man:查看手册。
  • cd destination:切换目录。
  • ls:显示当前目录下的文件和目录。
    • -F:区分文件和目录,目录文件名后会添加/
    • -a:将隐藏文件和普通文件及目录一起显示出来。
    • -R:递归选项。列出当前目录下包含的子目录中的文件。
    • -l:产生长列表格式的输出,包含了目录中每个文件的相关信息:文件类型,权限,硬链接总数,属主的用户名,组名,大小,上次修改时间,文件名或目录名。
    • -i:查看文件或目录的 inode 编号。
    • --time=atime:显示访问时间。
  • 文件扩展匹配:使用通配符。
    • ?:代表一个字符。
    • *:代表零个或多个字符。
    • []:表示一个字符位置并给出多个可能的选择,也可以指定范围。
    • !:将不需要的内容排除。
  • touch:创建空文件,或改变文件修改时间。
    • -a:改变访问时间。
  • cp source destination:复制文件。
    • -i:强制 shell 询问是否需要覆盖已有文件。
    • -R:递归地复制整个目录的内容。
  • ln -s:创建符号链接。
    • ln:创建硬链接。
    • 符号链接是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
    • 硬链接会创建独立的虚拟文件,其中包含了原始文件的信息和位置。但是它们从根本上而言是同一个文件。引用硬链接等同于引用了源文件。
  • mv:移动或重命名文件和目录。重命名、移动不改变 inode 编号和时间戳。
    • -i:命令试图覆盖已有文件时得到提示。
  • rm:删除。
    • -i:确认提示。
    • -f:强制删除。
    • -r:向下进入目录。
  • mkdir:创建目录。
    • -p:同时创建多个目录和子目录。
    • rmdir:只删除空目录。
  • file:查看目录、文件类型和字符编码。
  • cat:显示文本文件中所有数据。
    • -n:给所有行加上行号。
    • -b:给有文本的行加上行号。
    • -T:用 ^I 替换文中制表符。
  • more:显示文本文件中的内容,但会在显示每页数据之后停下来。
    • lessmore 的升级。
  • tail:显示文件最后几行内容。默认显示文件的末尾 10 行。
    • -n:修改所显示的行数。
    • -f:在其他进程使用该文件时查看文件的内容,这是实时监测系统日志的绝妙方式。
  • head:显示文件开头内容,默认显示前 10 行。
    • -n:修改所显示的行数。
  • ps:默认显示运行在当前控制台下的属于当前用户的进程。
  • top:实时显示进程信息。
  • kill PID:结束进程,必须为进程的属主或为 root 用户,只支持 PID。
    • killall:支持进程名。
  • mount -t type device directory:挂载媒体设备。
    • 默认输出当前系统上挂在的设备列表。
    • umount:卸载设备。
  • df:查看所有挂载磁盘使用情况。
    • -h:按用户易读的形式显示。
  • du:显示某个特定目录(默认情况是当前目录)的磁盘使用情况。
    • -c:显示所有已列出文件总的大小。
    • -h:按用户易读的形式显示。
  • sort:按会话指定的默认语言的排序规则对文本文件中的数据进行排序。
    • -n:把数字识别成数字而不是字符,并且按值排序。
    • -M:按月排序。
    • -t:指定字段分隔符。
    • -k:指定排序的字段。
    • -r:将结构按降序输出。
  • grep [options] pattern [file]:搜索数据。
    • -v:反向搜索,输出不匹配该模式的行。
    • -n:显示匹配模式的行所在的行号。
    • -c:显示有多少行含有匹配的模式。
    • -e:指定多个匹配模式。
  • gzip:压缩文件
    • gzcat:查看压缩过的文本文件的内容。
    • gunzip:解压文件。
  • tar function [option] object:归档数据。
    • -cvf:创建一个归档文件。
    • -tf:列出内容。
    • -xvf:提取内容。
    • tar -zxvf filename.tgz:解压 .tgz
  • jobs:显示出当前运行在后台模式中的所有用户的进程。
    • -l:显示命令的 PID。
  • history:查看最近使用过的命令列表。
    • -a:将命令历史记录强制写入 .bash_history 文件。
  • alias -p:查看一些常用命令的别名。
  • env / printenv 查看全局变量,printenv 也可以查看个别环境变量。
  • useradd:添加新用户
    • -D:查看默认值。
    • -m:创建 HOME目录。
  • userdel:删除用户信息,不删除文件。
    • -r:删除用户的 HOME目录以及邮件目录。
  • usermod:修改用户帐户的字段。
    • -l:修改用户账户的登录名。
    • -L:锁定账户。
    • -p:修改账户的密码。
    • -U:解除锁定。
  • passwd:修改密码。
    • -e:强制用户下次登录时修改密码。

3. 文件权限

3.1. 文件权限符

举例说明:

1-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
2
3# 登录名为 rich 的用户可以读取、写入以及执行这个文件。
4# rich 组的成员也可以读取、写入和执行这个文件。
5# 不属于 rich 组的其他用户只能读取和执行这个文件。

输出的第一个字段是描述文件和目录权限的编码。第一个字符代表对象的类型:

  • - 代表文件
  • d 代表目录
  • l 代表链接
  • c 代表字符型设备
  • b 代表块设备
  • n 代表网络设备

之后有 3 组三字符的编码,每组定义了 3 种访问权限:

  • r 代表对象是可读的。
  • w 代表对象是可写的。
  • x 代表对象是可执行的。

若没有某种权限,则该权限位会出现破折线。

3 组权限对应对象的 3 个安全级别:

  • 对象的属主
  • 对象的属组
  • 系统的其他用户

3.2. Linux 文件权限码

权限 二进制值 八进制值 描述
000 0 没有任何权限
–x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 有写入和执行权限
r– 100 4 只有读取权限
r-x 101 5 有读取和执行权限
rw- 110 6 有读取和写入权限
rwx 111 7 有全部权限

3.3. 默认文件权限

umask:设置所创建文件和目录的默认权限。系统默认的八进制的 umask 值是 0022。

1$ umask
20022

第一位代表了一项特别的安全特性。叫做粘着位。

要把 umask 值从对象的全权限值中减掉。对文件来说,全权限值是 666(所有用户都有读和写的权限),而对目录来说,则是 777(所有用户都有读、写、执行权限)。

3.4. 改变权限

  • chmod options mode file:改变文件和目录的安全性设置,可以使用八进制模式或符号模式进行设置。
    • -R:让权限的改变递归地作用到文件和子目录。

3.4.1. 八进制模式

1$ chmod 760 newfile
2$ ls -l newfile
3-rwxrw---- 1 rich   rich   0  Sep 20 19:16 newfile

3.4.2. 符号模式

[ugoa...][+-=][rwxXstugo...]

[ugoa...]

  • u 代表用户
  • g 代表组
  • o 代表其他
  • a 代表上述所有

[+-=]

  • +:在现有权限基础上增加权限
  • -:在现有权限基础上移除权限
  • =:将权限设置成后面的值

[rwxXstugo...]

  • X:如果对象是目录或者它已有执行权限,赋予执行权限
  • s:运行时重新设置 UID 或GID。
  • t:保留文件或目录。
  • u:将权限设置为跟属主一样。
  • g:将权限设置为跟属组一样。
  • o:将权限设置为跟其他用户一样。
1# 移除属主已有的执行权限
2$ chmod u-x newfile
3$ ls -l newfile
4-rw-rw-r--   1 rich   rich   0  Sep 20 19:16 newfile

3.5. 改变所属关系

  • chown options owner[.group] file:改变文件的属主,也支持同时改变文件的属主和属组。
    • -R:递归地改变子目录和文件的所属关系。
    • -h:改变该文件的所有符号链接文件的所属关系。
  • chgrp:更改文件或目录的默认属组。

4. Vim 编辑器

  • vim <file_name>:启动 vim 编辑器。
  • vim + <file_name> : 打开文件并把光标移动到最后一行行首。
  • vim +<num> file_name : 打开文件并把光标移动到第 num 行的行首。
  • vim +<word> file_name : 打开文件并把光标移动到 word 第一次出现的位置行的行首,按 n 移动。

4.1. 普通模式

  • h:左移一个字符。
  • j:下移一行(文本中的下一行)。
  • k:上移一行(文本中的上一行)。
  • l:右移一个字符。
  • PageDownCtrl + F):下翻一屏。
  • PageUpCtrl + B):上翻一屏。
  • G:移到缓冲区的最后一行。
  • num G:移动到缓冲区中的第 num 行。
  • gg:移到缓冲区的第一行。

4.1.1. vim 编辑命令

命令 描述
x 删除当前光标所在位置的字符
dd 删除当前光标所在行
dw 删除当前光标所在位置的单词
d$ 删除当前光标所在位置至行尾的内容
J 删除当前光标所在行行尾的换行符(拼接行)
u 撤销前一编辑命令
a 在当前光标后追加数据
A 在当前光标所在行行尾追加数据
r char 用 char 替换当前光标所在位置的单个字符
R text 用 text 覆盖当前光标所在位置的数据。直到按下 ESC 键

vim 在删除数据时,实际上会将数据保存在单独的一个寄存器中。可以用 p 命令取回数据。

vim 中复制命令是 y ,可以在 y 后面使用和 d 命令相同的第二字符(yw 表示复制一个单词,y$ 表示复制到行尾。)。在复制文本后,把光标移动刀你想放置文本的地方,输入 p 命令,复制的文本就会出现在该位置。

要输入一个查找字符串,按下斜线(/)键。

4.2. 命令行模式

  • q:如果未修改缓冲区数据,推出。
  • q!:取消所有对缓冲区数据的修改并退出。
  • w filename:将文件保存到另一个文件中。
  • wq:将缓冲区数据保存到文件中并退出。
  • 替换命令::s/old/new/
    • :s/old/new/g:一行命令替换所有 old。
    • :n,ms/old/new/g:替换行号 n 和 m 之间所有 old。
    • :%s/old/new/g:替换整个文件中的所有 old。
    • :%s/old/new/gc:替换整个文件中的所有 old,但在每次出现时提示。

5. 杂项

  • 访问 Linux 虚拟控制台:Ctrl + Alt + F1 ~ F7
  • tty : 电传打字机( teletypewriter )
  • /etc/passwd:所有系统用户账户列表以及每个用户的基本配置信息。
  • 只能对处于同一存储媒体的文件创建硬链接。不同储存媒体的文件之间创建链接,只能使用符号链接。
  • 在一行中指定要依次运行一系列命令,只要在命令间加入  号,即通过命令列表实现。
  • 将命令置入后台模式,可以在命令行末尾加上字符 &
  • /etc/profile 是系统默认的 bash shell 的主启动文件。
  • etc/passwd 文件的字段包含如下信息:登陆用户名,用户密码,用户账户的 UID ,用户账户的组 ID 。用户账户的文本描述,用户 HOME 目录的位置,用户的默认 shell。
  • 本地连接虚拟机中的 Ubuntu 时,若出现 ssh: connect to host localhost port 22: Connection refused ,原因是 Ubuntu 没有默认提供 ssh 服务,首先安装 ssh apt-get install openssh-server ,如果安装完后该服务没有自动启动,则手工启动 sudo /etc/init.d/ssh start 。

6. 附

6.1. CentOS 7 使用 yum 更换 epel 仓库

6.1.1. 常规

  • 安装:yum -y install epel-release
  • 卸载:yum -y remove epel-release
  • 查看:yum repolist

6.1.2. 手动安装

针对系统架构选择相应的类型,选择相应的包

1rpm -vih https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-11.noarch.rpm

1cd ~ && wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-11.noarch.rpm  <br>rpm -vih epel-release-7-6.noarch.rpm

6.1.3. 查看并更新源

  • 查看:ls -l /etc/yum.repos.d/
  • 两个 epel 的 repo 文件:epel.repo 和 epel-testing.repo
  • 更新:yum clean all && yum makecache

6.2. FirewallD 常用命令

6.2.1. 基本使用

  • 启动: systemctl start firewalld
  • 查看状态: systemctl status firewalld
  • 停止: systemctl disable firewalld
  • 禁用: systemctl stop firewalld

6.2.2. 配置

  • 查看版本: firewall-cmd --version
  • 查看帮助: firewall-cmd --help
  • 显示状态: firewall-cmd --state
  • 查看所有打开的端口: firewall-cmd --zone=public --list-ports
  • 更新防火墙规则: firewall-cmd --reload
  • 查看区域信息: firewall-cmd --get-active-zones
  • 查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
  • 拒绝所有包:firewall-cmd --panic-on
  • 取消拒绝状态: firewall-cmd --panic-off
  • 查看是否拒绝: firewall-cmd --query-panic
  • 禁止被 ping:firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'

6.2.3. 添加删除端口

  • 添加:firewall-cmd --zone=public --add-port=80/tcp --permanent--permanent 永久生效,没有此参数重启后失效)
  • 重新载入:firewall-cmd --reload
  • 查看:firewall-cmd --zone= public --query-port=80/tcp
  • 删除:firewall-cmd --zone= public --remove-port=80/tcp —permanent