学习虚拟机时的笔记
两种虚拟机备份
第一种:虚拟机快照,第二种将虚拟机安装后的文件夹拷贝一份
虚拟化引擎下面第一个可以用于虚拟机中创建虚拟机
分区说明(200g硬盘/2g内存)
/boot 启动文件1g
/data 实验数据 50G
swap 虚拟内存 一般小于等于8G ,常等于两倍物理内存这里为4G;
/ 根分区 100G
功能键
tty -查询终端窗口
who -显示所有连接的 图形终端
ssh远程连接
Windows10 命令行中也可以ssh root@IP 作为远程访问
free -h 查看内存详细使用情况
runlevel 查看当前所处的模式 init后面的数字 即模式
init 0 关机
init 6 重启
reboot 重启计算机
exit 退出
logout 注销当前身份
lscpu 查看当前的缓存信息
init 3 关闭图形化界面(可以节省1G内存)3模式
init 5 打开图形化界面,5模式
gedit / 相当于windows记事本(用于图形化界面系统的文件打开)
cat / 查看文件内容
ssh root@ip 远程终端
echo $PS1 显示提示符 变量PSI中的内容
echo $SHELL 显示 SHELL类型
bc 计算器(可以进制之间的转换ibase=2,表示输入为2进制,默认输出10进制,obase=2,表示输出为2进制)
nano / 不依赖图形化界面对文本进行编辑
/etc/motd 文件 在远程登陆的时候登陆成功会显示motd中的内容
etc/motd 文件为 登录后的信息提示
etc/issue issue文件为登陆前的信息提示
shell 将命令行输入的英文转换为二进制文件,同时也是一种高级开发语言靠近底层
echo $SHELL 查询当前使用的shell类型
cat /etc/shells 查看系统中支持的shell类型
ps aux 列出 系统中所有的运行的程序,可以看到bash的运行相当于Windows的任务管理器
hostname NAME 设置主机名 临时修改在内存中,重启就复原
nano /etc/hostname 可以直接永久改;
还有一种可以直接用命令改主机名:
有的没有这个命令:hostnamectl set-hostname NAME,同时改了内存和文件;
原理同样改的是/etc/hostname里面的名字
可以用cat /etc/hostname 查看主机名
whoami 显示用户名信息
who am i 显示详细用户信息 用户名 终端 登录时间 (登录地IP)
init 6 重启
提示符
默认代表管理员 $默认代表用户 命令echo $PS1 可以更改(内存中更改)
可以直接输入PS1=""修改
36是颜色位置
文件中修改提示符样式:
echo 'PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h\
[\e[1;31m] \W[\e[1;32m]][\e[0m]\$"' > /etc/profile.d/env.sh
修改文件,永久改变颜色
# 管理员
$ 普通用户
显示提示符格式
[root@centos8 ~]#echo $PS1
[\e[1;35m][\u@\h \W]$[\e[0m]
修改提示符格式范例
PS1="[\e[1;5;41;33m][\u@\h \W]\$[\e[0m]"
PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h[\e[1;31m] \W[\e[1;32m]]\
[\e[0m]\$"
提示符格式说明:
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
# 开机后命令历史数
范例:持久保存提示符格式相关变量 PS1
[root@centos8 ~]# echo 'PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h\
[\e[1;31m] \W[\e[1;32m]][\e[0m]\$"' > /etc/profile.d/env.sh
[root@centos8 ~]#cat /etc/profile.d/env.sh
PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h[\e[1;31m] \W[\e[1;32m]]\
[\e[0m]\$"
[root@centos8 ~]# exit
logout
linux命令的执行
type 判断是SHELL内部命令还是外部命令,外部命令会显示路径,内部命令不显示路径,
用法type +命令 ,还有一种type -a 命令 ,即找出所有同名命令并显示外部或内部命令
优先内部命令查找;
内部命令优先,若有同名外部命令则外部命令不生效
enable -n +内部命令, 表示禁用内部命令;可用于同名命令时要用到外部命令的情况,
help中可以看到禁用后的命令的前面有一个* 表示已禁用(临时禁用,可重启恢复);
enable +内部命令 表示启用该内部命令;
shell命令都加载到缓存中了
echo $PATH 展示出来type的搜索路径
第一次找到之后便会存放在内存中,第二次搜索是 会直接返回这个搜索结果这个过程叫做hashed(哈希)
hash 命令可以看到目前已经hashed的命令
前面数字表示已经执行的次数,后面为hashed保存的路径
hash 提高了 搜索效率
enable 查看所有的内部命令;即echo $SHELL包含的所有命令
安装命令 yum install +命令名字 例如 yum install nano
CentOS 8中 新增 dnf install nano 安装nano命令
nano 编辑好文件 但没生效可用 . 或者source 生效
. 等同 source 让配置文件生效,用法. +文件路径/文件名
或者source +文件路径/文件名
which +外部路径 搜索外部命令的磁盘位置
whereis +命令 搜索命令的路径 和帮助文档的路径
info 查帮助
man文件存放帮助文档
man 命令查看帮助文档
whatis 命令
1 和1p 是man中的章节编号
然后用man命令 man 5 issue 就可以查看issue的帮助文档
mv 文件 文件路径 将文件移动到 路径下
hash -r 清理缓存,文件变动时用;避免搜索错误
hash -d name 清理一条命令路径
命令别名alias
alias 别名=" 完整命令 ",临时的
别名最好不和已经存在的重复 可用type 检测是否存在;
若别名存在,别名优先级高于内部命令
\别名 意为取消此次别名生效还可以 '别名', "别名" 作用相同;
优先级 别名>内部命令>外部命令;
持久保存 要更改配置文件,/home/用户名/.bashrc 文件
添加一条alias 别名=" 完整命令 "
删除别名:unalias +别名
lsblk 显示当前的硬盘包括分区列表
alias 显示所有别名
unalas -a 临时清除所有别名
命令格式
选项:用于启用或关闭命令的某个或某些功能
短选项:UNIX 风格选项,-c 例如:-l, -h
长选项:GNU风格选项,--word 例如:--all, --human
BSD风格选项: 一个字母,例如:a,使用相对较少
一种新的命令格式命令嵌套,命令之后接命令的子命令tab键可以将子命令提示出来
参数:命令的作用对象,比如:文件名,用户名等
注意:
多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行:Ctrl+c,Ctrl+d
多个命令可以用 ";" 符号分开
一个命令可以用\分成多行
常见命令
1.7.1 查看硬件信息
1.7.1.1 查看****cpu
lscpu命令可以查看cpu信息
cat /proc/cpuinfo也可看查看到
范例:
[root@centos8 ~]#id -u wang
1000
ls --all
free -h 查看内存同样 也可以文件中查看内存情况命令为:cat /proc/meminfo
说明:
/proc proc中的文件都是在内存中的,不占用磁盘空间
free --human
lsblk 查看磁盘分区情况,也可以用cat /proc/partitions查看
uname -r 可以查看版本内核(os)
cat /etc/os-release 也可以查看内核信息
NAS服务器 家庭常用存储服务器
时间和日期
Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板
相关命令
date 显示和设置系统时间
date 062018302020.30 修改时间为2020年6月20日18点30分30秒(保存在内存时间,断电/重启会丢失)
修改时间格式: date 月日时分年.秒
date -d ‘+1 day’ 输出明天的日期
date ‘’+%F %T\
硬件主板时间: clock 该命令会显示主板时间和时间戳
[root@ubuntu1804 ~]#clock,hwclock: 显示硬件时钟
-s, --hctosys 以硬件时钟为准,校正系统时钟
-w, --systohc 以系统时钟为准,校正硬件时钟
ll /etc/localtime 显示当前时区
timectl list-timezones 列出所有时区
可以更改时区: timectl set-timezone /Asia/Shanghai
将时区改为亚洲上海
cal 是日历
cal 2020 查看2020年的一年日历
也可以看某一年一个月的日历 cal 月 年
关机重启
关机:
halt
poweroff
重启:
reboot
-f: 强制,不调用shutdown
-p: 切断电源
关机或重启:shutdown
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0
+#: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间
shutdown 01:20 表示凌晨1点20分关机
用户登录信息查看命令
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
会话管理工具
screen工具:
后台持续工作能力
可以实现会话管理,新建会话,共享会话等
安装 yum -y install screen
dnf -y install screen centos8(dnf 作用同yum)
screen命令常见用法:
创建新screen会话:screen -S [session]
加入screen会话: screen -x [session]
退出并关闭screen会话:exit
screen 中执行命令 后可以不受窗口影响关闭之后依然在运行(持续后台工作特点)
screen 虚拟一个终端执行命令,即使关闭窗口依然可以后台运行,知道运行结束
协作功能:
多人协作:用户AB(AB同账号且连接同一主机IP)
A:screen -S nameA 创建协作窗口
B:screen ls 查看screen 窗口列表找到nameA
B:screen -x nameA 表示加入nameA的屏幕实现B同步了A的屏幕,并且可以操作
Ctrl+a,d 剥离当前screen会话
剥离之后可以在进去 screen -r nameA
exit 退出并关闭协作窗口
rpm -qi -screen 查看screen工具的详细信息
工具tmux类似screen
tmux**
Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下
它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
它可以让新窗口"接入"已经存在的会话。
它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
它还支持窗口任意的垂直和水平拆分
安装
启动与退出
mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b ,即先按下
Ctrl+b ,快捷键才会生效。帮助命令的快捷键是 Ctrl+b ? 然后,按下 q 键,就可以退出帮助
yum install tmux
[root@centos8 ~]#tmux
[root@centos8 ~]#exit
logout新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0
号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定
名称的会话。
tmux new -s
tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
tmux ls
tmux list-session
分离会话
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
tmux detach
接入会话
tmux attach 命令用于重新接入某个已存在的会话。
tmux attach -t
范例:
tmux attach -t 0
杀死会话
tmux kill-session命令用于杀死某个会话。
tmux kill-session -t
切换会话
tmux switch命令用于切换会话
tmux switch -t
可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格
tmux split-window
ctrl+b,"
左右分窗格
tmux split-window -h
ctrl+b,%
窗格快捷键
Ctrl+b %:划分左右两个窗格Ctrl+b ":划分上下两个窗格
Ctrl+b
:光标切换到其他窗格。 是指向要切换到的窗格的方向键,比如切换 到下方窗格,就按方向键↓
Ctrl+b ;:光标切换到上一个窗格
Ctrl+b o:光标切换到下一个窗格。
Ctrl+b {:当前窗格左移
Ctrl+b }:当前窗格右移
Ctrl+b Ctrl+o:当前窗格上移
Ctrl+b Alt+o:当前窗格下移
Ctrl+b x:关闭当前窗格
Ctrl+b !:将当前窗格拆分为一个独立窗口
Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+
:按箭头方向调整窗格大小 Ctrl+b q:显示窗格编号
窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口
新建窗口
tmux new-window命令用来创建新窗口
tmux new-window
新建一个指定名称的窗口
tmux new-window -n
切换窗口
tmux select-window命令用来切换窗口
切换到指定编号的窗口
tmux select-window -t
切换到指定名称的窗口
tmux select-window -t
窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b
:切换到指定编号的窗口,其中的 是状态栏上的窗口编号 Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名
列出所有快捷键,及其对应的 Tmux 命令
tmux list-keys
列出所有 Tmux 命令及其参数
输出信息echo
echo 字符串 可以将字符串输出可以不用双引号
echo " 双引号内弱引用" 就是说双引号内,有变量则输出变量的内容例 echo "$PATH" 会列出变量PATH中的内容 弱引用可以输出变量,不能直接输出命令, 加入反向单引号则可以输出反向单引号内的命令
echo ' ' 以字符串形式输出例如 echo 'hello $PATH' 只会输出hello $PATH ,单引号具有强引用可以无视变量,命令
如果echo "这里面含有命令" 若想命令可以执行则可以在命令的前后加上反单引号 ``:
输出 echo 后双引号内的命令
反向单引号内的视为命令
反向单引号 中无法嵌套命令 可以用$(命令$())实现
结论:
反向单引号内的变量和命令都能识别,
单引号内的变量命令都不识别,
双引号则可以识别变量,不能识别命令
$(命令) 等同于`命令 (反单引号)
echo $path 输出变量path的内容$ 后跟变量名
echo -e 启动\字符的解释功能
echo -n 字符串 不换行输出
echo -e "\a" 让计算机发出声音
echo $PATH=echo "$PATH" 效果等同
echo '$PATH' 则会输出 ' 输出这里的内容 ',双引号可有可无,单引号代表以字符串输出单引号中的内容
字符集 与编码
数字字母 对应二进制的关系
最早的字符集是ASCII码
编码和字符集类似严格说又有不同:
字符集表示字符和二进制的对应关系
编码表示如何将字符转化为二进制进行储存或相反,编码决定了空间使用的大小
中国的字符集GBK
Unicode 万国码包含多个国家的字符集
主流utf-8 空间设计合理
echo $LANG 查询编码
LANG= en_US.UTF-8 可以设置
例:LANG=zh_cn.utf-8 提示信息改为中文的错误提示
UTF-8兼容ASCII
保存字母则用ASCII保存,
hexdump -C test.txt 查看文件中的储存形式,并以16进制显示
mkdir 创建文件夹
touch 创建文件
rm -r 递归删除文件夹以及文件夹内的文件
ll 文件 可以查看文件内的所占字节数 权限,操作时间,
echo hello >test.txt
一种写入方式
echo -e "\ASCII" 输入ASCII 输出对应编码
man ascii 查看编码信息
sleep 计算机休眠
uptime
clear 清屏 或者ctrl +L
help 帮助
括号扩展:
{}
可以实现打印重复字符串的简化形式
echo {1..10} 打印 1 2 3 4 5 6 7 8 9 10
{}前后可以加东西或文件后缀
{1..10..2} 打印出 1 3 5 7 9
{a..z} 打印顺序为ASCII码顺序
tab键 自动补全
自动补全命令,子命令,路径,文件名
nmcli 后面跟嵌套子命令,一种新的命令格式嵌套子命令 可以用tab键自动补全
rpm -qa bash* 查询bash*的所有套件以询问的方式
rpm命令
rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
语法
rpm(选项)(参数)
选项
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合``"-l"``参数使用;
-d:只列出文本文件,本参数需配合``"-l"``参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--``hash``:套件安装时列出标记;
-i:显示套件的相关信息;-i<套件档>或--``install``<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合``"-l"``参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-``v``:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错
安装上图这个软件才能使用嵌套子命令并用tab键补全子命令
tab补全子命令需要安装软件包bash-completion
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
如果惟一:则直接补全
否则:再次Tab给出列表
双击tab键
command 2Tab 所有子命令或文件补全
string2Tab 以string开头命令
/2Tab 显示所有根目录下一级目录,包括隐藏目录
./2Tab 当前目录下子目录,包括隐藏目录
*2Tab 当前目录下子目录,不包括隐藏目录
~2Tab 所有用户列表
$2Tab 所有变量
@2Tab /etc/hosts记录 (centos7 不支持)
=2Tab 相当于ls –A (centos7不支持)
a 2tab 将所有a开头的命令显示出来
命令行历史
执行命令后,系统会将执行过的命令保存在内存中,可以用来循环执行命令
当用户正常退出时,命令的历史记录将保存在~/.bash_history中
重新登陆时,文件中的命令记录会被加载到内存中
登进shell后执行的命令只会记录在内存缓存中,在正常退出时追加进~/.bash_history中
命令:
history 显示文件中保存过的历史命令(包含目前内存中缓存的命令)
-c: 清空命令历史
-d offffset: 删除历史中指定的第offffset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
[root@centos8 ~]#nmcli connection 2TAB
add delete edit help load monitor show
clone down export import modify reload up
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]-s: 展开历史参数成一行,附加在历史列表后
命令历史相关环境变量
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T whoami
" 显示时间和用户
HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史
HISTCONTROL:控制命令历史的记录方式
ignor
edups 是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
持久保存变量
以上变量可以 export 变量名="值" 形式存放在 /etc/profifile 或 ~/.bash_profifile
范例:
bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出,解锁
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置注意:Alt组合快捷键经常和其它软件冲突
范例:xshell中启动 alt 键
2 获得帮助
获取帮助的能力决定了技术的能力!
多层次的帮助
命令 --help 查看相关帮助
命令 -h 查看相关帮助
whatis 使用数据库来显示命令的简短描述,并显示该命令在文档中的章节. 如果新安装不久
则还没有生成帮助信息,可用mandb生成man相关文档数据库
man提供命令帮助的文件,手册页存放在/usr/share/man
举例:
用章节查询对应文档(注意:章节中带p的一般代表开发人员使用较多)
可以用mandb生成帮助信息(man相关的数据库)(centos7之后的版本)centos6之前的版本用makewhatis
whatis cal 等同于man -f cal 作用相同
type 可以检查是不是内部命令
内部命令查看帮助用help +命令
查看所有的shell(内部命令) 用 man bash
查看自己的shell用echo $SHELL
man是文档信息
外部命令查看帮助信息用 命令 +--help
command --help
man and info
/usr/share/doc/
Red Hat documentation 、Ubuntu documentation
| 意为多选一
whereis +命令 找出命令在哪个文件夹下,还有香瓜帮助文档的存放地址例子:
上面的地址可以看到文档的存放目录:/usr/share/
man文档的章节目录:
1:用户命令
2:系统调用
3:C库调用
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类的命令
9:Linux 内核API
which 查看指定的外部命令文件的存放路径
文件管理操作
文件的目录结构:单根目录结构
bin 存放二进制程序
boot 放启动文件 (内核)
lib 库
media mnt 作为挂载点
misc 杂项 使用时才挂载
misc挂载前应先确认
还要确认 已安装autofs
可以使用yum -y install autofs 安装
用 systemctl start autofs 启动
用systemctl status autofs查看状态是否已启用,但是机器重启之后使用时需要重新启动
启动后可以执行systemctl start autofs和systemctl enable autofs;或者执行一个命令
即systemctl enable --now autofs
不访问时不会挂载光盘;访问时才会挂载(此为misc文件的神奇之处);
opt 第三方软件安装位置
proc 内存数据
run 正在运行的文件
sbin 管理员命令
var 存放变化的数据
dev 设备文件
.......
文件系统 目录结构:
标准linux文件结构 (如ext4),文件大小写敏感
以 . 开头的文件为隐藏文件
每个文件都有两类相关数据, 属性 可以用 ll 查看,另一个是内部的内容 用cat查看
linux 下的文件类型
- -普通文件
- d 目录文件 directory
- b 块设备 block 以块的方式进行读和写 有缓存
- c 字符设备character 以单个字符的方式进行读写,顺序写没缓存
- l 链接文件 link
- p 管道文件pipe 有单工 半双工 全双工
- s 套接字文件 socket 双向
pwd 显示当前目录
cd 切换文件位置
文件(包括目录)
所在目录:dirname包含所有的上级目录
文件名:basename同样也是命令 可以提取路径 和文件名
cd - 移动到前一个工作目录
cd .. 回到上级目录
cd ~ 回到工作目录
文件操作命令
ls
stat
file
可以查看文件的类型,判断是二进制文件还是其他类型的文件,有图片文件音频文件视频文件等.
file -f 可以批量判断
windows的文本和linux中的文本不同需要dos2unix转换
dos2unix
二进制和windows格式的转换工具
file查看的结果显示出ELF则为二进制文件
linux 后缀更改,输入更改后的命令依旧可以执行
mv可以更改文件名,后缀
mv 文件名 新文件名
字符集编码
unicode 一个字符占3个字节;(UTF-8)
iconv -l 列出所有编码
iconv -f 原来的编码 -t 转换后的编码 转换前的文件名 另存的文件名
文件通配符模式 wildcardpattern
匹配通配符字母的时候 按照先小写后大写顺序显示
显示所有小写字母:
解读:ls -d /etc/*/ 筛选etc下的所有的目录
-d限制了当前的目录下 即只显示当前的目录中符合通配符的项,后面的 /etc// 表示显示出etc下的所有的有子文件的目录名/表示目录下,因为如果是文件则没有文件/,所以 很巧妙的筛选出了所有的目录**
touch
创建空文件和刷新时间功能
touch 文件名 ,若文件存在则刷新文件的三个时间,但不修改内容; 若不存在则创建,
cp
复制文件或目录
cp 文件 文件 文件 ... 文件夹 可以把多个文件复制到一个文件夹内
cp 文件 新文件名 复制文件
! 把上次执行的命令当做这次的参数执行*
cp复制的时候 文件的属性信息会发生变化(时间信息会不同),可以用cp -p 复制,复制的结果 几乎一样(-a为保留全部属性信息)
注意:复制特殊文件的时候,要用cp -a,例如dev/zero文件为特殊文件,如果用普通的复制的话,会丢失大量文件信息.会把0不停的写进磁盘直到满为止,而不是复制.一定要注意直接使用cp -a,cp -p都不行,而且复制的时候要注意使用的是谁的用户,若文件的用户是root,而你的用户是a,则复制过来以后用户的属性信息会变为a例子:
cp -p 等同 --preserv=mode,ownership,timestamp(保留的属性)
cp -r 复制文件夹里面所有的内容 ,一般组合使用 cp -rp
cp -v 显示复制过程
cp -d 只复制链接地址
cp -r 递归复制目录及内部所有内容
cp -a 归档 相当于cp -dR --preserv=all (preserv=all保留所有属性);常用于备份,备份的时候要注意用户,会影响到备份后数据的用户属性
--preserv[=ALL_LIST]
mode: 权限
owernship:属主属组
组合使用
cp -av 复制全部且显示复制过程(若文件有多个已存在则每项都会提示是否覆盖较为麻烦)
cp -i 复制的文件若存在则提示是否覆盖,root用户下使用的cp 为cp -i的别名;普通用户中cp则不会提示会直接覆盖;
可以用\ 来屏蔽别名 \cp -av 文件 文件 不会出现覆盖提示,直接覆盖
普通用户复制文件不可以直接覆盖root用户的文件,
可以用cp -f 强制删除已存在文件再做复制操作,在自己的家目录中可以用cp -f覆盖root用户的文件(即正常情况下用户是无法删除root用户权限的文件的,cp -f 前提是root用户权限的文件已经拷贝到了用户目录下才可以使用);
cp -u 覆盖旧文件 可以防止覆盖新文件;只覆盖比自己旧的文件,或目标文件不存在的文件;
cp -b 若目标存在,则先进行备份,形式为filename.~
只保留最新的和最近的一次复制
--backup=number 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~
#是备份的数字每次复制都会备份上次的数据 cp --backup 文件 文件
mv
移动和重命名文件
- 移动之后可以重新给文件命名
rename (批量更改文件名)
rm
删除文件
rm 较为危险 几个方案作为参考:
-
可以在自己的用户目录下将文件.bashrc 里面添加一个别名 alias rm ="mv -t /tmp/ "意思是把想删除的文件放进根目录下的临时文件tmp中
-
也可以自己手动将要删除的文件放进一个自己的文件夹(类似回收站)
-
或者将/usr/bin/rm 文件更改名字
删除特殊文件:
-
比如 文件是以-开头的文件
-
需要用创建的方式删除才有效,或者加 -- 即 rm -- -f 就能删除名为-f的文件了
-
再比如 文件名为~ 的文件,同上也可以 rm -- ~
安全删除shred -zvun 3 文件 安全删除策略 不过仍然有可能被恢复(原理是反复覆盖)
目录操作
tree
显示目录树
tree -d
mkdir
创建文件夹
mkdir 创建文件夹(前提父目录存在)
mkdir -v 创建过程提示
mkdir -p 可以创建所有需要的文件(如果父目录不存在,则创建)
rmdir 删空文件夹
文件元数据和节点表结构
inode 表结构
节点编号可以stat 文件 查看的 inode属性
inode表示每个文件的专属编号,除了stat 还有ls -i 也可以查看
4k默认块文件储存空间
直接块指针 数据的直接位置,只有12个 12*4k =48k 数据
大于48k的 可以用间接指 每个针指针块有4k,也就是可以存放4k *1024个指针数据即4M;
大于4M的数据则可以利用三重间接块指针原理相同 大小大概为4k*1024*1024=4G
大于4G的数据可以四重间接块指针最多可存储数据4T
文件名不在节点表里面的,是在他的目录的内容中,
文件名存放在它所在目录的内容中的
目录的数据块里面存放了目录里面每个文件的名称和节点编号的对应关系
节点表存放属性数据
同文件系统和分区复制和移动,节点编号不变仅目录中的文件名和路径更改,原数据未动,所以速度较快;
不同文件系统或分区复制与移动都会改变节点编号,且数据会复制过去,相比同分区较慢,
需要注意:不同分区或文件系统的移动内部相当于cp到新分区文件下,然后rm原来的元数据(注意元数据指的是数据的一些目录,名称,属性信息,真实数据仍在,且仍对应原本节点编号,直到下次该分区创建新的文件时将节点编号占用,数据位置被覆盖),删除数据之后即删除元数据信息之后,数据存在的位置会默认打上一个free空闲标签,可以在下次创建文件的时候使用,将之前数据覆盖
df
查询节点编号信息
df -i
IUsed 已存在的文件个数 IFree 是还可以创建的个数
节点编号剩余个数,若使用完则无法创建
df -h
磁盘存储空间信息
df -h 文件 可以查看存储使用情况
第一个问题,:
有两种可能,第一个就是节点编号使用完,即df -i 看inode使用情况,
第二种就是空间使用完,可以用df -h查看;
第二个问题:
文件中如果出现删除之后仍然有大量空间占用,和删除之前没有变化,且df -h查看的时候空间占用仍然很高有可能是以下情况:(即删除操作后空间不会立即释放问题)
- 当你删除时,该文件正在被访问被占用,可以使用 lsof |grep delete可以查看哪些文件已经删了但还在内存中,还没有彻底释放空间
- 解决办法:
-
将已经打开的窗口关闭即可完成释放(有些服务不能随时关闭,亡羊补牢)
-
正确删除方法:
-
cat /dev/null > /boot/big (使用重定向释放大文件),执行之后会释放文件内容,应用仍能运行,仅空间释放,然后手动删除文件名即可,通用的快速释放大文件空间.该类文件属于文件不影响正常生产运行,且数据较大时使用,比如无用的日志文件
- cat /dev/nul > /boot/big 释放之后 文件big的相关数据除了数据清空了,其他的元数据,还有节点编号都没发生变化,
-
也可以直接用 > /boot/big 直接清空big下的文件(缺点不通用不是所有的shell都适用)
-
-
dd创建大文件
例dd if=/dev/zero of=/boot/bigfile bs=1M count=700 创建700个1M的文件在/boot/bigfile中
硬链接
创建硬链接 ln 即英文link缩写
硬链接:(一个文件多个名字)
- 节点编号相同,属性相同,名字不同内容相同
- 相互之间没有依赖关系
- 创建硬链接不能跨分区
- 不能给文件夹创建硬链接(为了避免死循环会出现文件夹嵌套相互嵌套)
生产中,如果出现数据库进行删除操作,在删除之后系统会将元数据清理过的对应节点编号的数据块写入空闲(free)标签,当数据量过大的时候就容易出现服务器占用较大,有崩溃风险,这时候可以创建一个硬链接,然后再删除数据,因为有硬链接存在所以系统不会执行大量的写入操作(因为有硬链接表示文件还会用,不会作为空闲数据块),可以在空闲的时候做删除操作
上图中红框中为链接数
符号(软)连接
特点:
-
软连接创建出来是一个新的文件(即节点编号不同)
-
软连接创建之后文件的链接数不变
-
软连接创建之后的文件大小为创建时候存放在目录文件中路径文件大小
-
软连接创建时候相对路径不是当前目录的路径为特殊情况,源文件路径是相对于软链接文件的路径,而软链接文件路径则相对当前目录
-
格式说明:ln -s 文件 软连接文件
- 值得说明的是文件的路径是相对于软连接文件而言的,而软连接的路径是当前所处的位置,所以软连接就相当于快捷方式.(创建的路径就是他们找寻的路径). 写绝对路径就没有什么区别
-
-
删除软连接不会影响源文件,删除源文件则软链接无效
-
软链接支持文件夹,且软链接可以跨分区
-
重要的应用
-
软链接可以实现类似软件升级的操作,或者生产中升级后的新版本有问题,还可以利用软链接紧急降级到原版本使用从而不影响生产
-
生产用我们一般会创建一个软链接而不会直接作用到软件本身因为要去掉版本号,以方便更新等操作
-
在系统要升级到MySQL10.2.11的时候只需要将mysql软链接删除掉 然后重新创建一个mysql10.2.11的软链接就可以了
-
上图这个过程即完成了更新的操作,版本升级 叫更新 升级 降级 叫回滚
-
需要注意的是 在删除软连接的时候后面如果加了/ 就相当于在源文件后面加斜杠,即删除了源文件中的所有子文件,需要慎重谨慎删除 tab键补全的时候会默认自动加上一定要小心
文件夹是无法创建硬链接的,但是可以看到他的链接数是2 ,是因为文件中都有一个.目录表示当前目录,用的是相同的节点编号,所以文件夹的链接数最低就是2
- 当然了链接数也可能是3, 理由很简单因为每个新建的文件夹中都有两个文件 . 和.. ,要想链接数变为3,即在文件夹中创建一个文件,原来的文件夹链接数就变为3了;
-
标准I/O重定向和管道
三种I/O设备
标准输入(stdin) -0 默认接受来自终端口的输入
标准输出(stdout) -1 默认输出到终端窗口
标准错误(stderr) -2 默认输出到终端窗口
定位程序位置的方法:
tail -f 文件名 打开一个文件不关闭保持持续运行
然后另外一个终端窗口打开/proc 文件查看正在运行的程序 ,然后找到相应程序的进程编号(PID);
使用 px aux 可以查看正在运行的程序,找到对应的进程编号,然后到/proc下的文件中找到相应进程
进程编号为113285 然后去proc文件中找到文件进去里面之后使用ll查看所有详细信息,有一个名为exe的软链接,就可以看到他的真实程序位置
进程编号文件中的fd文件为文件描述符:可以看到文件的标准输入输出,还有程序的指向文件
echo $$ 可以查看当前shell的进程编号
可以查看当前shell的文件描述
重定向技术redirct
例子:
hostname 1> /dev/pts/1 意为将hostname 输出重定向为 /dev/pts/1 的终端
输出到了pts 1的终端窗口
hostname ls 等都有标准输出重定向
也可以重定向输出到文件中
二次执行之后会被覆盖;一定要注意 > 文件名 若文件名存在则覆盖,不存在则创建
echo 默认有一个换行占一个字节 echo -n取消换行
因为echo中自带了一个换行所以echo > 文件 之后文件中会有一个换行
标准输入重定向 (使用 < ):
seq 生成一个每次增长一的数 默认增长1
参数:
说明:
用法:
-
seq 加 想要生成的最后一位数
-
seq 起始值 终止值 生成从起始值到终止值的数,
-
seq 起始值 每次变动的步数(默认为1) 终止值
-
参数有seq -s 添加数字之间的间隔符,默认换行
-
seq -w 生成的数字长度等长 ,不够的用0补齐
-
seq -f 按照指定的格式输出生成的数字,在没有使用-f选项指定格式时,默认格式为%g,可以理解为使用-f 指定模式为"%g",跟不指定格式没有任何区别。
管道符
将第一个的标准输出重定向到第二个命令的重定向输入
符号"|"
要求:管道符 | 后面的命令必须是支持标准输入的命令
| 前面命令必须有标准输出
cat 支持标准输入和标准输出
单行重定向,回车一次重定向一次, cat > 文件 回车之后重定向到文件中,如果没有回车则内容没有被保存;
多行重定向 cat >cat2.log <<结束的标识;
单行重定向较多行重定向I/O较多;
结束标识只能单独占一行且不能有多余空字符
缺点 如果遇到突发事件 数据易丢失,因为只有结束符出现后才会重定向输出
PS2 是影响多行重定向的提示符可更改
mail 命令可以发邮件
发送邮件需要服务 postfix 安装服务 yum -y install postfix
启动服务 systemctl start postfix
mail -s 标题 用户名 用ctrl +d可以退出邮件编辑
查看邮件 mail
批量发邮件 可以使用重定向
mail -s 标题 用户 < 文件
tee命令
由于管道使用时不可以一边重定向到文件,一边输出给下一个命令;
使用tee命令可以实现一个输出 一个存储
- 不过这个存储为输出重定向,每次会将之前的内容覆盖掉,如果不想覆盖则可以使用追加命令 -a
会将最后一个tee命令前的命令输出到屏幕上,tee命令之后加文件 保存在文件中,不加 -a 表示会将原来文件覆盖掉,加 -a 之后表示追加进文件中
tr命令 转换和删除字符
规则可更改-t 处理逻辑变化
tr -t 将第一个字符集 对应转换为第二字符集对应的字符
- 完全一一对应的转换
- tr -d 字符集 删除包字符集内包含的字符
- tr -s 需要去重的字符集 去重字符集中连续出现的字符
- tr -c 字符集 获取字符集的补集(即获取除了参数字符集中的其他字符)
- 删除 字符集意外的字符 tr -dc 字符
tr
- -d删除
- -c取补集 即除了 参数之外的
- -dc删除 除参数之外
- -s 去重=
管道符默认只接收标准输出,如果要将标准错误接收可以使用:
|& 来接收标准输出和标准错误,或者在管道符|之前使用2>&1 2>&1 | 即表示将标准错误重定向到标准输出中;
& 后面跟文件描述符 1代表标准输出 2代表 标准错误 ;
< 代表标准输入
rev 将字符串倒过来输出
mail 邮件
- 需在家目录中创建一个.mailrc文件 存放配置信息:
- 安装一个软件postfix
- yum -y install postfix
- 服务 yum -y install mailx
- 开启服务
- systemctl start postfix
- 查看服务启动状态 systemctl status postfix
- 完成之后就可以发送邮件了
mail 用法
- mail -s 标题 用户 < 文件
- mail -s 标题 用户 <<终止符 这种手动输入内容
- mail -s 标题 -c 用户 用户 ... <<终止符 或者 <文件 可以发送给多个用户
- 1
rev 将字符串反向输出
用户、组和权限
linux安全模型
-
3A
-
审计 审核 监督
用户
切换用户su
设置密码
用户和组的配置文件
!锁定
vipw vigr 编辑修改配置文件的,内部调用vim,编辑文件时自带语法检查功能,提示错误
pwck grpck 检查语法的 pwck 检查/etc/passwd 的 grpck 检查/etc/group
/etc/gshadow 存放口令的(密码) 组的口令一般不设置 或为空 !!表示 锁定 不能自主登陆
/etc/passwd 下的文件格式 为:
存放了用户的详细信息:
- 用户名:口令:uid:gid:描述信息:所属目录:shell类型
- 口令目前一般都显示为x 真实的口令(密码)已存放在/etc/shadow中
密码 生成 可以用随机口令:
- 例如
- 意思为将urandom随机生成的字符取出包含数字和字母的前10位
- 还可以生成的随机里面包含空格下划线斜线等:
用户和组管理命令
- 用户管理命令
- useradd 添加用户
- usermod 更改用户信息
- userdel 用户删除
- 组账号维护命令
- groupadd 添加组
- groupmod 更改组信息
- groupdel 删除组
创建新用户时默认会创建一个同名的组作为他的主组,并且家目录会创建一个用户的文件夹
常用的创建系统服务账号
-r 创建系统用户,id在1-499 之间,创建之后的系统用户家目录不会生成,因为系统用户一般给应用程序使用的;
同样在/var/spool/mail/ 邮件用户目录中也不会存在0
-
/var/spool/mail/也不会创建系统用户的邮件用户
-
如果用默认创建用户时会出现多人创建重复用户的情况可以使用 -u uid 来指定创建的用户id
-
同样默认创建用户时会默认的创建一个同名的组名作为主组, 可以使用 -g gid/gname 可以用来创建到指定已有的分组里面,
-
-G 是用来添加附属组;可以添加多个用逗号','隔开;附属组必须已存在
-
-s 指定shell类型 默认bash bash一般用于登陆使用,如果要创建系统用户(即给应用软件使用的用户),则需要指定shell类型 -s /sbin/nologin
-
-d 指定家目录位置
-
-c 是添加目录的注释信息即 描述信息
-
创建新用户时默认的uid gid 描述信息 家目录 shell类型都在文件 /etc/default/useradd
-
HOME指 默认的家目录;SHELL指的默认shell类型;CREATE_MAIL_SPOOL指是否创建邮箱用户;EXPIRE是有效期 创建的用户的使用期限,如果值为10则表示账户创建之后只能用10天,到期之后就不能使用了;INACTIVE指口令的有效期过了之后的宽限期,如果宽限期到了仍然没有更改口令,则锁定账号无法登陆,-1表示不锁定,超时也不管;SKEL表示创建用户的模板文件夹(隐藏文件)即创建用户之后会将后面的skel中文件复制到用户目录之下,表示新用户的基础配置信息
-
上面信息可以在 shadow中查看 字符之间以:隔开,倒数第二个表示INACTIVE;倒数第一个表示EXPIRE
-
getent:察看系统的数据库中的相关记录
- login.defs 文件 控制账号口令
- 创建的新账号时遵从该文件中的默认设置的口令规则
锁定
usermod -L 用户 锁定用户 无法登陆,也可以getent shadow 用户 查看口令的前面有一个! 意为锁定
usermod -U 用户 解除锁定
删除用户
userdel
-r 删除用户的邮箱还有家目录(慎重)
-f 强制
id 查询用户相关id
改口令
chpasswd
- echo 用户名:新密码 | chpasswd
- 也可以用一个文件写入,只要格式符合用户名:密码即可
- 即cat 文件| chpasswd
chsh 用户 可以更改用户的shell
查看密码策略 chage -l 用户名
用户相关的其他命令
chfn 指定个人信息
chsh 指定shell,相当于userod -s
finger可看用户个人信息
gpasswd 可以更改组的密码,也可以修改附加组的成员关系
文件权限管理
文件权限:
修改文件权限
每个文件每类访问者都定义了三种常用权限
r 读取权限
w 写入编辑权限
x 可执行的
对文件的权限有:
- r 可以被查看的 可以使用cat 等可以获取其内容
- w 可以修改内容
- x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件
对目录的权限:
- r 可以使用ls 查看目录中的文件列表
- w 可以在此目录文件中创建文件,也可删除此目录中的文件
- x 可以使用ls -l 查看此目录中文件的元数据(须配合r权限),可以cd进入此目录,属于目录的基本权限,没有则不可访问
- X 只给目录x权限,不给无执行权限的文件x权限
数学法的权限
查看组中的用户使用groupmems
查看组成员
设置文件所有者:chown
chown
可以更改所有者和所属组
用法: chown 用户 文件 改所有者, 更改所属组的时候可以用 ':' 也可以用 '.'
chown :组名(必须已存在) 文件 改文件的所属组
chown 用户:组名 文件 更改文件的所有者和所属组
设置文件的属组信息chgrp
chown --reference==文件1 文件2
将文件2的权限修改为跟文件1一样
chown -R 递归更改 慎用危险
chown -R 用户:组名
将文件夹下的所有文件用户和组都改为 同一个用户:组名
权限的修改
所有者 所属组 其他 三种即 u g o (user group other)
更改权限 命令chmod
chmod u g o 文件
u 所有者+ 是增加权限-是减少权限 文件权限有 r w x
g o 同上
权限匹配顺序依次为 所有者 所属组 其他 匹配成功则执行对应权限,不会往后匹配
文件权限 r(读) w(写) x(执行)
文件夹权限有 r w x X
特别说明X
权限嵌套问题:
删除含有w权限的文件夹时,如果文件夹内的文件对于该用户没有操作权限或者所有者不是该用户,是无法删除此文件夹的 (总结就是说如果要删除一个文件夹,则要有文件夹的w权限和文件夹内的所有文件的删除权限才能直接删除文件夹)