Linux 笔记整理
Contents
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:显示文本文件中的内容,但会在显示每页数据之后停下来。less:more的升级。
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:右移一个字符。PageDown(Ctrl + F):下翻一屏。PageUp(Ctrl + 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