阅读目录
- CentOS安装和使用
- 注意事项和相关问题解决
- shell
- 命令提示符
- 执行命令
- alias 别名
- 执行原来本身的命令
- 单双引号的区别
- date
- 时区
- 日历
- 关机重启
- 命令的格式
- 命令补全
- echo 回显
- 获取环境变量
- 命令历史
- 快捷键
- 帮助信息
- man
- 目录结构
- 文件命名规范
- 颜色的表示
- 文件系统结构
- 程序组成部分
- 相对路径 绝对路径
- 获取文件名和文件目录
- cd
- pwd
- ls
- touch 创建空文件修改文件的时间戳
- 命令的展开
- 命令引用
- 文件通配符
- stat 查看文件状态
- 复制文件和文件夹
- 移动或者重命名
- 删除
- 删除文件的多种方法(安全方法)
CentOS安装和使用
- 获取VMware
- (1)VMware 15.1 官方获取地址:https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.1.0-13591040.exe
- CentOS 镜像获取
(1)获取
CentOS 7官方下载地址:https://www.centos.org/download/
Centos国内下载源http://man.linuxde.net/download/CentOShttp://mirrors.btte.net/centos/7/isos/x86_64/http://mirrors.cn99.com/centos/7/isos/x86_64/http://mirrors.sohu.com/centos/7/isos/x86_64/
CentOS 7提供了三种ISO镜像文件的下载:
DVD ISO 标准安装版,一般下载这个就可以了(推荐)
Everything ISO 对完整版安装盘的软件进行补充,集成所有软件。(包含centos7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
Minimal ISO 精简版,自带的软件最少
以下针对各个版本的ISO镜像文件,进行一一说明:
CentOS-7.0-x86_64-DVD-1503-01.iso 标准安装版,一般下载这个就可以了(推荐)
CentOS-7.0-x86_64-NetInstall-1503-01.iso 网络安装镜像(从网络安装或者救援系统)
CentOS-7.0-x86_64-Everything-1503-01.iso 对完整版安装盘的软件进行补充,集成所有软件。(包含centos7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
CentOS-7.0-x86_64-GnomeLive-1503-01.iso GNOME桌面版
CentOS-7.0-x86_64-KdeLive-1503-01.iso KDE桌面版
CentOS-7.0-x86_64-livecd-1503-01.iso 光盘上运行的系统,类拟于winpe
CentOS-7.0-x86_64-minimal-1503-01.iso 精简版,自带的软件最少
- CentOS安装
(1)安装图解
(2)虚拟机的网络连接三种形式
(3)终端输入密码
Centos 开机后,登录时无法输入密码怎么解决?因为:centos输入密码是不显示的,正常输入点击回车即可(注意查看键盘numlock 是否打开)
正常进入的样子↓↓↓
(4)密码输错被锁定解决方法
注意事项和相关问题解决
- 终端
图形终端
虚拟终端(ctrl+alt+F1-F6开启) /dev/tty# 查看当前终端
物理终端
设备终端
串行终端
伪终端 /dev/pts/#
查看当前终端命令【 tty 】 - 远程连接工具
有:xshell、putty、securecrt 等
选取 Xmanger 中的 Xshell
(1)安装好 Xmanger - (2)打开 Xshell 先到Linux系统找到 ip地址
【查看ip地址命令】ifconfig 或者 ip addr 或者简写成 ip a
【xshell连接到虚拟机】ssh 自己的ip地址 或者 ssh@用户名 自己ip地址 - (3)查看系统支持的shell
- (3)xshell中的常用快捷键
使用xshell中的复制粘贴快捷键
复制:Ctrl+Insert
粘贴:ShIft+Insert
或者:直接使用鼠标中键
粘贴:鼠标中键
Ctrl+D 快速退出
- Xshell 报22端口失败解决方法
(1)网上说 是什么 SSHD端口之类的问题,可以 输入 命令 setup 查看下,shhd有没有开启;还有window防火墙和虚拟机的防火墙可以设置关闭,但防火墙开不开启,其实影响不大,还有centos7默认是开启防火墙的;第一次装,如果按照上述步骤装机设置,一般都不会出错!下面来说下下最最最关键会出现报错的原因↓↓↓
(2)检查下你安装完VMware后网络适配器有没有显示,虚拟机的网络适配器,如下图,如果刷新后,发现没有,先别急着去网上找答案,先解决这个问题
(3)解决办法:win+R 输入appwiz.pl ,找到VMware软件,点击删除,引导式卸载,这样把软件卸载干净,然后把安装位置的文件也删了;win+R 输入 regedit 查找注册表中,删除 VM相关的注册表;这里建议安装下:CCleaner,扫描注册表,然后彻底删除和修复注册表;重启电脑,选择官方的VMware,自己搜码,再以管理员模式安装,刷新,再查看是否有虚拟机的网络适配器!
shell
用来在linux系统上的一个接口,用来将用户的输入发送给操作系统去执行,并把得到的结果输出出来
【查看系统支持的shell】 cat /etc/shells
【切换shell】 chsh -s shell
【查看当前运行的shell】 echo $SHELL
命令提示符
- 提示符的含义
[root@localhost ~]#
# 超级管理员
$ 普通用户
[用户@主机名 目录]命令提示符
永久生效的方法:echo 'PS1="\[\e[1;30;35m\][\u@\h \W]\\$\[\e[0m\]"' >> /etc/profile.d/ps.sh
(其中最后ps 为自定义的名称,后缀sh必须一致)
执行命令
写完命令后直接回车就可以
- 内部命令
安装完系统以后自带的命令,就是内部命令
通过help来获取内部命令的列表 - 外部命令
第三方提供的,在某些地方可以直接找到执行文件
type 查看命令的类型
which 查找命令的路径
alias 别名
alias 【直接列出了系统里面所有的别名】
alias cdetc='cd /etc' 【设置别名】
unalias cdetc 【取消别名】
#让命令一致生效
#对当前用户
[root@localhost ~]#echo "alias cdetc='cd /etc'" >> .bashrc
#对所有的用户都生效
echo "alias cdetc='cd /etc'" >> /etc/bashrc
ls 相当于list
执行原来本身的命令
- “ls”
- \ls
- ‘ls’
单双引号的区别
" " 可以打印变量的值
’ ’ 引号里面写什么就打印什么
date
[root@localhost ~]#date
Wed May 20 06:54:17 CST 2020
[root@localhost ~]#date +%F
2020-05-20
[root@localhost ~]#date +%H 【24小时制的时】
06
[root@localhost ~]#date +%I 【12小时制的时】
06
[root@localhost ~]#date +%y 【年】
20
[root@localhost ~]#date +%m 【月】
05
[root@localhost ~]#date +%d 【日】
20
[root@localhost ~]#date +%M 【分钟】
56
[root@localhost ~]#date +%S 【秒】
26
[root@localhost ~]#date +%a 【星期缩写】
Wed
[root@localhost ~]#date +%A 【星期全称】
Wednesday
[root@localhost ~]#date +%T 【完整时间】
06:58:22
[root@localhost ~]#date +%Y-%m-%d
2020-05-20
[root@localhost ~]#date +%y-%m-%d
20-05-20
[root@localhost ~]#date +%s 【时间戳时间】
1589929209
[root@localhost ~]#date +%W 【一年中的第几周】
20
[root@localhost ~]#timedatectl 【查看时区】
Local time: Wed 2020-05-20 07:06:55 CST
Universal time: Tue 2020-05-19 23:06:55 UTC
RTC time: Tue 2020-05-19 23:06:55
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
时区
[root@localhost ~]#timedatectl
[root@localhost ~]#timedatectl set-timezone Asia/Shanghai
日历
cal 【展示当月的日历】
cal -y 【展示当年的日历】
cal -y 【显示#年的日历】
关机重启
shutdown 默认是一分钟之后关机
shutdown -c 取消
shutdown -r 重启
-r 后指定时间
- now 立即
hh:mm 【直接写 时间】
+# 表示多长时间以后重启,一般是分钟
reboot 重启
-p 切断电源
init 6 【重启】
init 0 【0】
poweroff 【关机】
命令的格式
command [options] [args...]
选项:启用或者禁用某些功能的
短选项:-a
长选项:--all
参数:命令的作用对象,一般情况是目录,用户等等
注意:
多个选项及参数和命令之间需要用空格隔开
命令后加ctrl+c 来取消命令的执行
用 ;分号来隔开同时执行的多个命令
使用\来将命令切换成多行
命令补全
tab键
内部命令:
外部命令:shell 会根据环境变量从左至右依次查找,找到第一个匹配的则返回
- 如果说给定的字符串只能搜索到一个的话,则直接显示
- 如果给定的字符串搜索到多个的话,则需要按两次tab键
目录补全
- 把用户给定的字符串当做路径的开始部分,来搜索
- 如果只搜索到一个,则直接显示,直接一个tab
- 如果说搜索到多个的话,列出一个列表,让用户自行选择,需要按两次tab键来获取列表
echo 回显
输入什么就输出什么,并且加入了一个换行符
获取环境变量
[root@localhost ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
命令历史
- 可以通过键盘上的箭头来查找之前执行过的命令
- 通过history来获取之前执行过的命令记录
- 执行刚才执行过的命令
- 键盘上的向上箭头
- !!
- !-1
- ctrl+p
- 使用!:0来执行上一条命令(去掉参数)
- !# 来执行history中的第多少条命令
[root@localhost ~]#!123
which cp
alias cp='cp -i'
/usr/bin/cp
- !要查找的字符 【从下往上直接查找最近的一条包含string的命令】
- ctrl+r 【搜索之前执行过的命令】
- ctrl+g 【退出待定的搜索】
- 调用上一个命令的参数
- esc . 【按一下esc然后按.】
- history 的命令历史
history # 【显示最后的 #条命令】
history -c 清空命令记录
- 当用户登录系统之后,会读取家目录下的.bash_history文件
[root@localhost etc]#cd ~
[root@localhost ~]#ls .bash_history
.bash_history
[root@localhost ~]#cat .bash_history
- 正常退出,会将之前执行过的命令写入到.bash_history文件中
快捷键
ctrl+l 清屏,相当于clear
ctrl+s 锁定屏幕,(挂起)
ctrl+q 解开锁定,(解挂)
ctrl+c 总之命令,(用于某些一直执行的命令,或者待输入后需要主动结束命令,如:top、tr )
ctrl+d 退出,(和ctrl+c 类似)
ctrl+a 移动到命令的行首 相当于home
ctrl+e 移动到行尾,相当于end
ctrl+xx 光标在命令行首和光标之间来回移动
ctrl +k 删除光标到结尾位置的字符
ctrl +u 删除光标到行首的字符
alt+r 删除正行
需要注意,alt会跟别的快捷键冲突
帮助信息
- 内部命令
- help 指定的命令
- man bash
- 外部命令
- command --help
- command -h
- man command q退出
- 官方文档
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
# 含义:
[] 代表可选,即可输也可不输
... 表示一个列表
[-u|--utc|--universal] 任选其中一个
-lh 代表-l -h
date 052805271980 设置时间
ntpdate time.windows.com 自动与时间服务器同步时间
man
man 5 passwd 【需要指定 文档中有的 章节 和其内容】
箭头来控制输出
回车输出下一行
空格切换到下一屏
章节
1 用户的命令
2 系统的调用
3 c库的调用
4 设备文件或者特殊文件
5 配置文件
6 游戏
7 杂项
8 管理类的命令
9 linux内核API
目录结构
- 目录结构是一个倒置的树
- 目录从“/”开始
- 目录严格区分大小写
- 隐藏文件以.开头
- 路径的分隔符是/
文件命名规范
- 文件名最长为255个字符
- 包括路径在内最长4095个字符
- 除了/和NULL以外,其他的字符都生效
- 名称大小写敏感
颜色的表示
- 蓝色 表示目录
- 绿色 表示可执行文件
- 红色 表示压缩文件
- 蓝绿色 链接文件
- 白色 普通的文件
- 灰色 其他文件
文件系统结构
- /boot 存放系统的引导文件,内核文件、引导的加载器放在该目录
- /bin 所有的用户都可以使用的一些基本命令
- /sbin 管理员可以使用的命令,管理类命令
- /lib 基本的一些库文件(windows 是.dll linux是.so)
- /lib64 专门用于64位操作系统的一些辅助库文件
- /etc 配置文件目录
- /home/Username 普通用户的家目录
- /root 超级管理员的家目录
- /media 便携式移动设备挂载点
- /opt 第三方的安装程序
- /srv 系统上允许的服务用到的数据
- /tmp 存放临时文件的目录
- /usr 存放安装程序
- /var 存放经常变化的数据,比如日志
- /proc 用来存放内核和进程相关的虚拟文件
- /dev 用来存放设备的
- /mnt 临时文件挂载
- /run 服务或者系统启动以后生成的文件
- /sys 存放的是硬件设备相关的虚拟文件
程序组成部分
- 二进制文件存放位置
- /bin
- /sbin
- /usr/bin
- /usr/sbin
- /usr/local/bin
- /usr/local/sbin
- 库文件
- /lib
- /lib64
- /usr/lib
- /usr/lin64
- /user/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
相对路径 绝对路径
绝对路径:
- 从根开始
- 完整的路径
相对路径:
- 相对于某个文件或者目录
- 不是从 / 开始
- … 代表是父级目录
- . 代表当前路径
获取文件名和文件目录
[root@localhost network-scripts]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33
[root@localhost network-scripts]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts
cd
change directory
可以使用相对路径,也可以使用绝对路径
[root@localhost etc]#cd
[root@localhost ~]#
[root@localhost ~]#cd - 可以快速的回到上一次的目录
/etc/sysconfig/network-scripts
[root@localhost network-scripts]#cd -
/root
pwd
print working directory
[root@localhost etc]#pwd
/etc
[root@localhost etc]#cd sysconfig/network-scripts/
[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
ls
list 列出指定目录的文件或者文件夹
语法:ls [OPTION]… [FILE]…
ls -a 列出所有的文件(包括隐藏文件)
ls -l =ll 使用长格式来显示文件相关信息
ls -R 【递归显示】
ls -r 【r代表 reverse 倒序显示 】
ls -d 显示目录本身
ls -1(数字1) 竖着显示文件
ls -lS 根据文件的大小来排序(默认降序)
ls -lSr 根据文件的大小,升序排序
ls -d */ 显示当前目录下的目录,不能指定目录
ls -ltu 【按照atime时间排序】
ls -lh 以人类易读的方式显示
touch 创建空文件修改文件的时间戳
touch 用来修改时间和创建文件
如果文件存在的话,则修改时间
如果不存在,则创建文件
命令的展开
a{1..10} 命令展开 【注意是大括号】
a{1..10..2} 指定步长
seq 1 10
seq 1 2 10 【中间的 是 步长】
命令引用
`date`
$(date)
文件通配符
- * 代表零个或者多个字符
- ? 代表任意的一个字符
- ~ 代表家目录
- [0-9] 代表数字
- [a-z] 字母,从a-z并且包括A-Y
- [A-Z] 字母,从A-Z 并且包括b-z
- [abcdef] 表示其中的任何一个
- a[^abcdef] 取反
- [:lower:] 小写字符
- [:upper:] 大写字符
- [:digit:] 数字
- a-zA-Z 所有字母
- [:alpha:] 所有字母
- a-zA-Z0-9 任意字母或者数字
- [:alnum:] 代表所有的字母和数字
stat 查看文件状态
[root@localhost studytest]#stat aa
File: ‘aa’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 2451158 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-05-23 08:02:10.179131830 +0800
Modify: 2020-05-23 08:02:10.179131830 +0800
Change: 2020-05-23 08:02:10.179131830 +0800
Birth: -
访问时间:access 读取文件内容 atime
修改时间:Modify 改变文件的内容 mtime
改变时间:change 改变文件的内容 ctime
复制文件和文件夹
Usage: cp [OPTION]... [-T] SOURCE(源文件) DEST(目标文件)
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
- 如果source是一个文件的话
- 如果目标不存在,新建一个目标文件,并将数据写入到目标文件里面
- 如果目标文件存在
- 如果目标文件是一个目录,直接在目标目标下面新建一个跟源文件同名的文件,并将数据目标文件写入到文件
- 如果说目标文件是一个文件,直接就覆盖,为了安全起见,建议cp配合-i使用
- 如果源文件是多个文件的话
- 目标文件如果是文件的话,则直接报错
- 如果目标文件是一个目录的话,则直接复制进目录
- 如果源文件是目录的话
- 如果目标不存在,则创建指定的目录,必须-r选项
- 如果说目录存在
- 如果目录是一个文件的话,则会报错
- 如果目标是一个目录的话,则在目录下面创建一个新的同名目录,并把文件复制过去
常用参数
-i 覆盖之前提示
-n 不覆盖存在的文件
-r 递归复制,复制目录及目录下的所有文件
-rf 强制
-rv 显示复制过程
-b 在覆盖之前,对源文件做备份
cp --backup=numbered 1.cfg 2.cfg 覆盖文件,备份文件添加上数字
-p 保留原来的属性
移动或者重命名
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
-i 交互式
-f 强制
-b 覆盖前做备份
-v 显示进度
删除
rm [OPTION]... FILE...
-i 交互式
-f 强制删除
-r 递归删除
-rf 递归强制删除,即不过问,直接删除文件夹或文件
- 删除多个文件的方法
【删除几个文件】 rm 文件1 文件2
【删除文件夹下面所有文件,一定要看清所在的文件目录,慎用】 rm -rf *
【删除某些固定字母开头的文件】 rm xxx*
【删除一类文件】 rm *.txt
删除文件的多种方法(安全方法)
- 重定向
通过重定向到 Null 来清空文件内容清空或者让一个文件成为空白的最简单方式,是像下面那样,通过 shell 重定向 null (不存在的事物)到该文件
# > access.log
- 使用 : 符号
使用 : 符号,它是 shell 的一个内置命令,等同于 true 命令,它可被用来作为一个 no-op(即不进行任何操作)。另一种清空文件的方法是将 : 或者 true 内置命令的输出重定向到文件中
# : > access.log
# true > access.log
- 使用 cat/cp/dd 实用工具及 /dev/null 设备来清空文件
在 Linux 中, null 设备基本上被用来丢弃某个进程不再需要的输出流,或者作为某个输入流的空白文件,这些通常可以利用重定向机制来达到,所以 /dev/null 设备文件是一个特殊的文件,它将清空送到它这里来的所有输入,而它的输出则可被视为一个空文件。另外,你可以通过使用 cat命令 显示 /dev/null 的内容然后重定向输出到某个文件,以此来达到清空该文件的目的。
# cat /dev/null > access.log
使用 cp命令 复制 /dev/null 的内容到某个文件来达到清空该文件的目的
# cp /dev/null access.log
下面的命令中, if 代表输入文件,of 代表输出文件
# dd if=/dev/null of=access.log
- 使用 echo 命令清空文件
使用 echo命令 将空字符串的内容重定向到文件中
# echo "" > access.log
或者
# echo > access.log
注意:应该记住空字符串并不等同于 null 。字符串表明它是一个具体的事物,只不过它的内容可能是空的,但 null 则意味着某个事物并不存在。基于这个原因,当你将 echo命令 的输出作为输入重定向到文件后,使用cat命令来查看该文件的内容时,你将看到一个空白行(即一个空字符串)。要将 null 做为输出输入到文件中,你应该使用 -n 选项,这个选项将告诉 echo 不再像上面的那个命令那样输出结尾的那个新行。
# echo -n "" > access.log
- 使用 truncate 命令来清空文件内容
truncate 可被用来将一个文件缩小或者扩展到某个给定的大小。你可以利用它和 -s 参数来特别指定文件的大小。要清空文件的内容,则在下面的命令中将文件的大小设定为 0
# truncate -s 0 access.log
- 使用rsync命令
假如要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件,/usr/local/nginx/proxy_temp的nginx缓存等;rsync 可以用来清空目录或文件!
1)先建立一个空目录
mkdir /data/blank
2)用rsync删除目标目录
rsync--delete-before -d /data/blank/ /var/spool/clientmqueue/
# 这样目标目录很快就被清空了
快速删除大文件:
1)创建空文件
touch /data/blank.txt
2)用rsync清空文件
rsync-a --delete-before --progress --stats /root/blank.txt /root/nohup.out
为什么rsync能够快速删除大文件?
1)rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。
2)rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。
另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。
总结:频繁做减法不如直接从头来过
把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。