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:
[root@weiying ~]# echo $SHELL /bin/bash
显示系统支持的所有shell:
[root@weiying ~]# 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][u@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 控制符 33 u 当前用户 h 主机名简称 H 主机名 w 当前工作目录 W 当前工作目录基名 t 24小时时间格式 T 12小时时间格式 ! 命令历史数 # 开机后命令历史数 例如: PS1="[u@H W]$"
命令分类
内部命令:由shell自带的,而且通过某命令形式提供
enable:查看所有的内部命令
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令外部命令:在文件系统路径下有对应的可执行程序文件,可以通过which和whereis查看
which:显示命令对应的程序文件路径
–skip-alias:禁止显示别名
whereis:用于显示二进制文件、手册页等
whatis:使用makewhatis(RHEL7为mandb)命令可将当前系统上所有的帮助手册与之相对应的关键字创建为一个数据库
type COMMAND:判断命令是内建命令还是外部命令
[root@weiying ~]# type cd cd is a shell builtin (内部命令) [root@weiying ~]# 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,相当于 33 r 回车,即光标移至行首,但不换行 \ 插入字符 nnn 插入nnn(八进制)所代表的ASCII字符 echo -e ' 33[43;31;5mmagedue[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:总体大小之和