Linux 哲学宗旨:
一切皆文件: 把几乎所有的资源, 包括硬件设备都组织为文件
有众多单一的小程序组成, 一个程序制实现一个功能, 组成小程序完成复杂操作
尽量避免和用户交互: 实现脚本编程, 以自动完成某些功能
使用纯文本文件保存配置信息
终端: 用户和主机交互时用到的设备
物理终端: 直接接入的设备也叫控制台 / dev/console
虚拟终端: 附加在物理终端上虚拟出的, 默认启动六个, Ctrl+Alt(F1~F6), 系统启动时, 默认启动虚拟终端 1, 启动终端时会自动启动交互接口 /dev/tty#
图形终端: 附加在物理终端上虚拟出的, 额外附加图形界面
伪终端: 图形界面下打开的命令行接口, 或者基于 SSH,Telnet 协议打开的远程命令行 /dev/pts/#
tty 命令: 查看自己所使用的终端
交互式接口: 在启动终端后, 再终端设备附加一个交互式应用程序
GUI:X 协议, 窗口管理器和桌面 (GNOME,KDE,XFCE 轻量级)
CLI:shell 程序 bash,bsh,csh,ksh
分类: sh,bash,csh,tcsh,ksh,zsh 等
显示当前使用的 shell:
- [[email protected] ~]# echo $SHELL
- /bin/bash
显示系统支持的所有 shell:
- [[email protected] ~]# cat /etc/shells
- /bin/sh
- /bin/bash
- /sbin/nologin
- /usr/bin/sh
- /usr/bin/bash
- /usr/sbin/nologin
- /bin/tcsh
- /bin/csh
绝对路径: 从根目录起始的路径
相对路径: 从当前位置开始的路径
命令格式:
COMMAND [选项...] [参数...]
输入命令 + 回车: 提请 shell 程序找到键入的命令所可执行程序或代码, 并由其分析后提交给
内核分配资源运行起来, 表现为一个或多个进程
Shell 中可执行的命令
选项: 用于启用或关闭命令的某个或某些功能
短选项:-c 例如:-l, -h
长选项:--Word 例如:--all, --human-readable
参数: 命令的作用对象, 比如文件名, 用户名等
注意:
多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行: Ctrl+c,Ctrl+d
多个命令可以用; 符号分开
一个命令可以用 \ 分成多行
命令提示符
$: 表示普通用户
#: 表示管理员用户
修改命令提示符的格式:(永久生效写到 / etc/profile.d/###.sh 配置文件中)
- PS1="\[\e[1;5;41;33m\][\[email protected]\h \W]\\$\[\e[0m\]"
- PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
\e 控制符 \ 033 \u 当前用户
\h 主机名简称 \H 主机名
\w 当前工作目录 \W 当前工作目录基名
\t 24 小时时间格式 \T 12 小时时间格式
\! 命令历史数 \# 开机后命令历史数
例如:
PS1="[\[email protected]\H \W]\$"
命令分类
内部命令: 由 shell 自带的, 而且通过某命令形式提供
enable: 查看所有的内部命令
enable cmd 启用内部命令
enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令
外部命令: 在文件系统路径下有对应的可执行程序文件, 可以通过 which 和 whereis 查看
which: 显示命令对应的程序文件路径
--skip-alias: 禁止显示别名
whereis: 用于显示二进制文件, 手册页等
whatis: 使用 makewhatis(RHEL7 为 mandb) 命令可将当前系统上所有的帮助手册与之相对应的关键字创建为一个数据库
type COMMAND: 判断命令是内建命令还是外部命令
- [[email protected] ~]# type cd
- cd is a shell builtin (内部命令)
- [[email protected] ~]# type top
- top is /usr/bin/top (外部命令)
Linux 命令获取帮助:
內键命令: help + 命令
外部命令: 命令 --help 或者 -h
使用帮助手册 (manual): 存放在 / uer/share/man/(man1~man9)
用法: man + 命令 (whatis + 命令 查看命令手册的分布)
man1: 用户命令 man2: 系统调用 man3: 标准库调用 man4: 设备文件及特殊文件 man5: 配置文件格式 man6: 游戏 man7: 杂项 man8: 管理类命令 man9:Linux 内核 API
man -M PATH COMMAND: 到指定位置搜索指定命令的帮助手册
帮助页的使用方法:
man 的操作方法: 实际上是调用 Less
space ^V,^F,^f: 向文件尾部翻屏
b,^B: 向文件首部翻屏
d,^D: 向文件尾部翻半屏
u,^U: 向文件首部翻半屏
enter: 向文件尾部翻一行
k: 向文件首部翻一行
q: 退出
#: 跳转至第 #行
1G: 跳转至文件首部
G: 跳转至文件尾部
文本搜索:
/keyword: 以指定关键词, 从当前位置向文件尾部搜索, 不区分大小写
n: 下一个 (方向同搜索方向) N: 上一个
?keyword: 以指定关键词, 从当前位置向文件首部搜索, 不区分大小写
n: 下一个 (方向同搜索方向) N: 上一个
info + 命令
程序自身的帮助文档:/usr/share/doc/COMMAND-VERSION / 下
README,INSTALL,ChangeLog
Shell 搜索到的外部命令的路径会缓存在 kv(key-value) 中:
hash 命令: 参看 kv 中的命令: 格式 hits(次数) COMMAND(命令)
-r: 清空全部缓存区
-d COMMAND: 清空指定命令的缓存
查看主机名: hostname
修改主机名:
修改 / etc/hostname
hostnamectl set-hostname + hostname
命令历史
Hash 缓存表:
系统初始 hash 表为空, 当外部命令执行时, 默认会从 PATH 路径下寻找该命令, 找到后会将这条命令的路径记录到 hash 表中, 当再次使用该命令时, shell 解释器首先会查看 hash 表, 存在将执行之, 如果不存在, 将会去 PATH 路径下寻找, 利用 hash 缓存表可大大提高命令的调用速率
用法:
hash 显示 hash 缓存
hash -l 显示 hash 缓存, 可作为输入使用
hash -p path name 将命令全路径 path 起别名为 name
hash -t name 打印缓存中 name 的路径
hash -d name 清除 name 缓存
hash -r 清除缓存
history 命令: 查看命令历史 (存放在~/.bash_history 中, 登陆后执行的命令都放在缓冲区中, 登出都缓冲区的内容会被保存到该文件中)
环境变量:
HISTSIZE: 命令历史记录的条数;
HISTFILE:~/.bash_history;
HISTFILESIZE: 命令历史文件记录历史的条数;
HISTTIMEFORMAT="%F %T" 显示时间
HISTIGNORE="str1:str2*:..." 忽略 str1 命令, str2 开头的历史
控制命令历史的记录方式:
环境变量: HISTCONTROL
ignoredups: 忽略重复的命令; 连续且相同方为 "重复";
ignorespace: 忽略所有以空白开头的命令;
ignoreboth:ignoredups, ignorespace;
erasedups 删除重复命令
修改环境变量值的方式: export 变量名 ="值"
变量赋值: 把赋值符号后面的数据存储于变量名指向内存空间;
或者存放在 /etc/profile 或 ~/.bash_profile
选项: history + 数字 显示倒数 n 条命令
-a: 追加本次会话的命令至历史文件中
-d:history -d 数字 删除指定的命令历史
-c: 清空命令历史
基于历史之中的命名的快捷操作:
!string: 调用历史中最近一个以 string 开头的命令
!!: 重复执行上一条命令
调用上一条命令的最后一个参数:
!$:
ESC, .
Alt+.
Linux 时间相关的操作
date: 显示或设置当前系统时间
格式: date 选项
%D: 按照月 / 日 / 年格式显示
%F: 按照年 - 月 - 日格式显示
%T: 按照小时: 分钟: 秒格式显示
%Y: 年份, 只显示完整年份数字 (4 位数字), 显示格式为: 2016;
%y: 显示年份的后两位, 显示格式为: 16;
%m: 月份, 只显示数字, 显示格式为: 03;
%d: 日期, 只显示数字, 显示格式为: 02;
%H: 小时, 只显示数字, 显示格式为 (00..23):15;
%k: 小时, 显示格式为 (0..23);
%I: 小时, 格式为 (01..12);
%l: 小时, 显示格式为 (1..12);
%h: 显示月份, 显示格式为: 3 月;
%M: 分钟, 只显示数字, 显示格式为: 52;
%S: 秒钟, 只显示数字, 显示格式为: 16;
%a: 缩写星期;%A: 完整星期;
%b: 缩写月份;%B: 完整月份;
%r: 显示格式为 (11:11:04 PM);
%R: 同 %H%M, 格式为 (23:37)
%s: 从 1970 年 1 月 1 日至此刻所经历的秒数; timestamp; 显示格式为: 1456905397.
例如:
date "+%Y-%m-%d %H:%M:%S": 设置时间的显示格式
设定时间:
格式: 月日小时分钟 [年].[秒]
例: date 0815170117.16 2017.08.15 17:01:16
-s: 指定时间和日期
date -s "2018-5-24 11:27:30": 设定日期为 2018 年 5 月 24 日, 11 点 27 份 30 秒
-d: 查看指定时间的信息
date -d "-5 day": 查看五天前的日期
Linux 的两个时钟:
系统时钟: 由 Linux 内核通过工作频率进行的计时
硬件时钟: 位于主机上 CMOS 里的时钟, 关机后仍会运行
clock 或 hwclock: 查看硬件时钟
hwclock: 同步系统时钟和硬件时钟
-s: 以硬件时钟为准, 把系统时钟与硬件时钟同步
-w: 以系统时钟为准, 把硬件时钟与系统时钟同步
cal 命令: 显示日历 (可加年份, 显示指定的年份)
时区:
timedatectl : 显示或者设置时区相关的信息
选项:
status: 查看当前时间时区信息
list-timezones: 显示支持的所有时区
set-timezone + 时区: 设置时区
Linux 文件系统:
根文件系统: rootfs
LSB 组织: FHS 文件系统层级标准
/boot: 引导文件的存放目录, 内核文件 (vmlinux), 引导加载器 (BootLoader,grub)
/bin: 供所有用户使用的基本命令, 不能关联至独立分区, os 启动时会用
/sbin: 管理类的基本命令
/lib: 基本的共享库和内核模块文件
/lib64: 专用于 X86_64 系统上的辅助共享库文件存放位置
/etc: 配置文件目录的存放位置 (大多数是纯文本文件)
/home: 普通用户的家目录
/root: 管理员的家目录
/media: 挂载便携式存储设备
/mnt: 挂载临时其他的文件系统
/dev: 设备文件及特殊文件的存放位置
b: 块设备 可随机访问设备
c: 字符设备 线性访问设备 (按照时序进行访问)
/opt: 第三方应用程序存放位置
/srv: 当前系统运行时所需要的数据存放位置
/tmp: 临时文件存放位置
/usr: 子目录
bin: 普通用户使用命令 (系统完成基本功能所需要的应用程序)
sbin:root 使用的命令 (系统完成基本功能所需要的应用程序)
lib 和 lib64: 库文件
include:c 程序所用的头文件
share: 结构化的独立的数据 (doc,man)
local: 本地层级结构, 第三方应用程序的存储位置
/var: 存放经常发生变化的数据文件
cache: 应用程序缓存数据存放目录
lib: 应用程序状态信息数据
local: 专用于 / usr/local 下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于 / opt 下的应用程序存储可变数据
run: 运行中的进程相关数据, 通常用于存储进程的 pid
spool: 应用程序的数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 内核与进程相关的虚拟文件系统
/sys: 用于输出当前系统上硬件设备相关的信息的虚拟文件系统
/selinuxe:selinux 安全相关的安全策略信息
Linus 上的应用程序组成部分:
二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件:/lib,/lib64,/usr/lib,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/directory,/usr/local/etc
帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man
/usr/local/share/doc
系统管理类命令:
关机: halt (-f) 强制关机 poweroff
重启: reboot
shutdown: 不指定时间默认为一分钟
-r:reboot 重启
-h:halt 关机
-c: 取消关机或重启
TLME:now(现在) +m(几分钟后) hh:mm(指定时间)
用户登录信息查看命令:
whoami: 显示当前登录有效用户;
who: 系统当前所有的登录会话;
-b: 显示系统的启动时间
w: 系统当前所有的登录会话及所做的操作;
目录相关的命令:
1.cd ; 用于改变工作目录
cd 或 cd~: 切换到当前用户的家目录
cd - : 可以再上次访问的目录和当前目录之间来回切换
cd ..: 切换至上一级目录
相关的环境变量:
PWD: 保留了当前目录的路径
OLDPWD: 上一次目录路径
2.pwd: 显示当前路径
-P 显示真实物理路径
-L 显示链接路径 (默认)
3.ls: 列出指定目录下的文件列表
-a: 显示所有文件, 包括隐藏文件
-A: 显示所有文件, 但是不包括. 和..
-l: 以长列表格式显示
drwxr-xr-x. 22 root root 4096 Jun 17 09:31 var
drwxr-xr-x : 第一位表示文件类型 -(f): 表示普通文件 l: 表示软链接文件
d: 表示目录 b: 块设备 c: 字符设备 p: 管道 s: 套接字
2-4 位表示属主权限
5-7 位表示属组权限
8-10 位表示其他人权限
22: 表示单位符号 文件被硬链接的次数
root: 文件所有者
root: 文件所属组
4096; 文件大小 (-h 以易读的方式显示)
Jun 17 09 :31: 文件最后一次被修改的时间 (时间戳)
显示时间戳: stat 路径 显示指定文件的元数据
var: 文件名
-d: 不会显示目录下的文件, 只显示目录本身的属性
-h: 以易读的方式显示文件大小
-r: 把文件名按照降序方式显示
-R: 递归显示, 会把目录及其子目录的内容列出来
-i: 产看 iNode 节点的信息
4.dirname: 取路径的目录名
5.basename: 取的基名
时间戳管理工具: 显示时间戳: stat 路径 显示指定文件的元数据
三个时间戳:
access time: 最近一次访问时间
modify time: 最近一次修改时间
change time: 改变时间 (文件的元数据发生改变)
查看文件状态: stat
touch: 可以修改 atime 和 mtime 为当前系统时间, 文件不存在则创建
touch 选项 参数
-a 或 - m -t, 指定修改 atime 和 mtime, 默认两个都修改, 格式 [[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存在, 则不创建文件
文件查看命令
1.cat 连接文件并显示出来
-A: 显示所有非正常的符号
-E: 显示行结束符
-T: 显示制表符
-v: 显示其他的非打印字符
-n: 对显示的行进行编号
-b: 打印行号 (空行不标号)
2.tac: 逆序显示文件
-E: 显示行结束符, 在行尾添加 $, 不作为文件内容
-T: 显示制表符
-n: 显示行编号
3.more: 基于显示器查看的过滤信息
-d: 显示翻页及退出提示
4.Less: 和 more 的用法相同
5.head: 显示文件的前几行, 默认为 10 行
-c: 指定获取前几个字节
-n: 指定获取前几行
6.tail: 获取文件后几行 和 head 用法相同
-c: 指定获取后几个字节
-n: 指定获取后几行
-f: 跟踪显示文件追加的新内容
7.watch: 用于动态执行命令
watch 选项 '命令'
-n: 指定刷新时间
watch -n1 'cat /etc/fstab'
每一秒钟执行一次 cat /etc/fstab
8.hexdump: 以十六进制显示二进制文件内容
回显命令
echo; 显示输出的内容或变量
-e: 允许使用转义字符
\n ; 换行 \t: 制表符
\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape, 相当于 \ 033
\r 回车, 即光标移至行首, 但不换行
\\ 插入 \ 字符
\0nnn 插入 nnn(八进制) 所代表的 ASCII 字符
echo -e '\033[43;31;5mmagedu\e[0m'
\xHH 插入 HH(十六进制) 所代表的 ASCII 数字 (man 7 ascii)
echo "$PATH" 变量会被替换 --> 双引号表示强引用
echo '$PATH' 变量不会被替换 --> 单引号表示弱引用
echo `command ....` 会打印出命令的执行结果
which: 显示命令对应的程序文件路径
--skip-alias: 禁止显示别名
whereis: 用于显示二进制文件, 手册页等
whatis: 显示命令帮助信息的位置, 使用 mkwhatis 命令可将当前系统上所有的帮助手册与之相对
应的关键字创建为一个数据库
文件管理类命令:
mkdir: 创建目录
-p: 即使目录已存在也不会报错
如果目录不存在, 而且父目录也不存在, 则会创建所有的父目录
-v: 显示创建目录的详细信息
-m: 创建目录时直接指定目录权限
rmdir: 删除空目录
tree: 列出目录的层级结构
-d: 仅显示目录
-L +#: 仅显示对应的数字的层级
-P pattern: 只显示指定的 pattern 匹配到的路径
cp: 复制文件
格式: cp 源文件 1 源文件 2.... 目的文件或目录
cp -t 目录 源文件 1 源文件 2....
cp -r 目录 1 目录 2
选项:
-i: 交互式
-r: 递归复制目录及目录下的所有内容
-a: 归档, 会保留源文件的所有属性
-u --update: 只复制源比目标更新文件或目标不存在的文件
-b: 目标存在, 覆盖前先备份, 形式为 filename~
--backup=numbered: 目标存在, 覆盖前先备份加数字后缀
练习:
1, 每天将 / etc / 目录下所有文件, 备份到 / data 独立的子目录下, 并要求子目录格式为
backupYYYY-mm-dd, 备份过程可见
cp -r /boot/ /data/bootback`date +%F`
mv: 移动文件 用法和 cp 类似 (可用于重命名)
选项:
-i: 交互式
-f: 强制
rm: 删除目录或文件
-f: 强制
-r: 递归, 用于删除目录
-i: 交互式
命令别名:
alias: 管理命令别名, 列出当前 shell 进程中所有可用的命令别名
alias 别名 ='命令 选项' 仅对当前 shell 进程有效
仅对当前用户生效:~/.bashrc
对所有用户有效:/etc/bashrc
unalias: unalias 别名 撤销别名 -a: 撤销所有
只使用原命令:\COMMAND 或者 `conmmand`
重新加载配置文件:
.+ /path/to/config_file 或者 source + /path/to/config_file
bash 快捷键:
Ctrl+l: 相当于 clear, 清屏
Ctrl+a: 把光标直接跳至命令行首部
Ctrl+e: 把光标直接跳至命令行尾部
Ctrl+c: 取消命令执行
Ctrl+u: 删除光标前的所有内容
Ctrl+k: 删除光标后的所有内容
screen 命令: 实现相当于共享桌面的功能, 前提 两个远程电脑通过同样的账户登进在了同一个服务器上
创建新 screen 会话
screen -S [SESSION]
加入 screen 会话
screen -x [SESSION]
退出并关闭 screen 会话
exit
剥离当前 screen 会话
Ctrl+a,d
显示所有已经打开的 screen 会话
screen -ls
恢复某 screen 会话
screen -r [SESSION]
查看系统信息:
查看系统版本: cat /etc/os-release 或者 lsb 命令
查看内核版本: uname -a
插卡 CPU 信息: lscpu
查看内存信息: free -m: 以 M 的格式显示
查看硬盘信息: lsblk 或者 fdisk -l
让系统重新对硬盘进行扫描:
echo "---"> /sys/class/scsi_host/host0/scan;echo "---"> /sys/class/scsi_host/host1/scan;echo "---"> /sys/class/scsi_host/host2/scan
inode: 索引节点, 按特定格式组织的能存储单个文件的所有属性信息 (在一个分区中 inode 节点唯一)
地址指针: 指向文件在内存中的存储位置
直接指针: 间接指针: 三级指针......
inode 位图: 对位保存 inode 空闲与否的状态信息
cp 和 inode 的关系:
在执行 cp 命令的时候:
先分配一个空闲的 inode 号, 然后在 inode 表中生成新条目, 并在目录中创建一个目录项, 将
名称与 inode 编号关联, 最后拷贝数据生成新的文件
rm 和 inode 的关系:
在执行 cp 命令的时候:
先减少链接数, 释放 inode 编号到空闲列表中, 然后删除指向内存地址的指针, 实际上删除的
时候, 数据不会再硬盘中被立刻删除, 数据会被标记为未使用的状态, 然后等待新的数据写入
mv 和 inode 的关系:
当目标文件和源文件在同一个文件系统时:
在指定的位置创建新的文件名并将其与之父目录相关联, 并将新的文件名与之前的 inode 节
点关联, 最后删除原文件与其父目录的对应, inode 节点不会变
当目标文件和源文件在不同的文件系统时:
相当于先执行 cp, 再执行 rm
软链 ln -s 目标文件 链接文件
指向另一个文件的链接: 访问路径, 大小为指定字符串的长度, 不增加目标文件 inode 的引用
计数, inode 节点与源文件不同, 源文件删除后软连接文件不能访问
硬链接: ln 目标文件 链接文件
不能对目录进行, 不能跨文件系
多个文件指向一个 inode 的不同路径, 创建文件的硬链接即为 inode 创建新的引用路径, 会增
加其引用计数, 新建的硬链接文件的 inode 节点数与源文件相同, 指针都指向相同的存储地址
文件系统空间占用等信息查看工具:
df: 查看以挂载的文件系统的使用情况
-h: 以易读的方式显示
-i: 显示分区可用的 inode 个数
-P: 使用 Posix 兼容的格式输出
du: 查看某目录总体空间的占用状态
du 选项 目录
-h: 以易读的方式显示
-s: 总体大小之和
来源: http://www.bubuko.com/infodetail-3053549.html