文章目录
-
- @[toc]
- 概念
-
- 环境搭建
- 基本概念
- 系统启动过程
-
- 加载内核
- 启动初始化进程init
- 确定操作级别
- 加载启动程序
- 用户登录
- 图形模式与文本模式之间的切换
- login shell
- 三种网络模式
- 命令大全
-
- 命令行中的ctrl组合键
- 目录
-
- 概念
-
- 系统目录结构
- 路径
- 处理目录命令
-
- ls (列出目录)
- cd (切换目录)
- pwd ( 显示当前目录 )
- mkdir (创建新目录)
- rmdir ( 删除空目录 )
- cp ( 复制文件或目录 )
- rm ( 删除文件或目录 )
- mv ( 移动文件和目录,或修改名称 )
- 文件
-
- 文件属性
- 处理文件属性命令
-
- ll (查看文件属性)
- chgrp (变更文件属组)
- chown (更改文件属于主,也可以同时更改文件属于组)
- chmod (更改文件属性)
- 查看文件命令
-
- cat (查看文件)
- tac (查看最后一行)
- nl (查看并显示行号)
- more (可翻动)
- less (页面不留)
- head (前几行)
- tail (后几行)
- find (查找文件)
- grep (按内容搜索)
- tar (文件包装)
- touch (创建文件)
- 文件压缩
-
- gzip
- zip
- unzip
- Vim编辑器
-
- 什么是Vim编辑器
- 三种使用模式
-
- 命令模式:
- 输入模式:
- 底线命令模式
- Vim 按键
-
- 移动光标的方法
- 搜索替换
- 删除、复制和粘贴
- 输入或替换指令
- 存储,离开指令
- 账号
-
- 概念
- useradd (添加帐号)
- su(切换用户)
- userdel (删除账号)
- usermod(修改帐号)
- passwd(密码管理)
- 锁定用户
- whoami (查看当前用户)
- who (此时查看登录用户)
- exit (退出登录用户)
- 用户组
-
- groupadd (创建用户组)
- groupdel (删除用户组)
- groupmod (修改用户组的属性)
- newgrp (切换组)
- 用户组相关系统文件
-
- /etc/passwd
- /etc/shadow
- /etc/group
- 磁盘
-
- df (检查磁盘空间占用情况)
- du (查看磁盘空间)
- mount (磁盘挂载卸载)
- fdisk
- mkfs (磁盘格式化)
- fsck (磁盘检查)
- Linux 链接概念
- 进程
-
- 概念
- top (动态显示过程)
- pstree (进程关系以树状图显示)
- ps (查看过程)
- kill (结束过程)
- lsof (通过端口号查看过程)
- 系统管理
-
- 查看网络状态
-
- 常见问题
- 虚拟机克隆后eth0消失
- 更改主机名
- 更改HOST
- 查看当前日历
- 显示或设置时间
- 关机和重启
- 图形化界面
-
- wc - 统计字数
- cut - 列选取命令
- grep - 行选取命令
- sort - 排序
- uniq - 去重
- tee - 同时输出多个文件
- tr - 替换指定字符
- join - 按行连接文件
- paste-将多个文件链接在一起
- split - 文件切割
- xargs - 参数代换
- 命令符号
-
- 输入重定向 <
- 输出重定向 >
- 重定向标准错误 2>
- 管道 |
- 防火墙
- 包管理工具
-
- yum
- rpm
- Linux软件安装
-
- JDK
- 虚拟机扩容
文章目录
-
- @[toc]
- 概念
-
- 环境搭建
- 基本概念
- 系统启动过程
-
- 加载内核
- 启动初始化进程init
- 确定操作级别
- 加载启动程序
- 用户登录
- 图形模式与文本模式之间的切换
- login shell
- 三种网络模式
- 命令大全
-
- 命令行中的ctrl组合键
- 目录
-
- 概念
-
- 系统目录结构
- 路径
- 处理目录命令
-
- ls (列出目录)
- cd (切换目录)
- pwd ( 显示当前目录 )
- mkdir (创建新目录)
- rmdir ( 删除空目录 )
- cp ( 复制文件或目录 )
- rm ( 删除文件或目录 )
- mv ( 移动文件和目录,或修改名称 )
- 文件
-
- 文件属性
- 处理文件属性命令
-
- ll (查看文件属性)
- chgrp (变更文件属组)
- chown (更改文件属于主,也可以同时更改文件属于组)
- chmod (更改文件属性)
- 查看文件命令
-
- cat (查看文件)
- tac (查看最后一行)
- nl (查看并显示行号)
- more (可翻动)
- less (页面不留)
- head (前几行)
- tail (后几行)
- find (查找文件)
- grep (按内容搜索)
- tar (文件包装)
- touch (创建文件)
- 文件压缩
-
- gzip
- zip
- unzip
- Vim编辑器
-
- 什么是Vim编辑器
- 三种使用模式
-
- 命令模式:
- 输入模式:
- 底线命令模式
- Vim 按键
-
- 移动光标的方法
- 搜索替换
- 删除、复制和粘贴
- 输入或替换指令
- 存储,离开指令
- 账号
-
- 概念
- useradd (添加帐号)
- su(切换用户)
- userdel (删除账号)
- usermod(修改帐号)
- passwd(密码管理)
- 锁定用户
- whoami (查看当前用户)
- who (此时查看登录用户)
- exit (退出登录用户)
- 用户组
-
- groupadd (创建用户组)
- groupdel (删除用户组)
- groupmod (修改用户组的属性)
- newgrp (切换组)
- 用户组相关系统文件
-
- /etc/passwd
- /etc/shadow
- /etc/group
- 磁盘
-
- df (检查磁盘空间占用情况)
- du (查看磁盘空间)
- mount (磁盘挂载卸载)
- fdisk
- mkfs (磁盘格式化)
- fsck (磁盘检查)
- Linux 链接概念
- 进程
-
- 概念
- top (动态显示过程)
- pstree (进程关系以树状图显示)
- ps (查看过程)
- kill (结束过程)
- lsof (通过端口号查看过程)
- 系统管理
-
- 查看网络状态
-
- 常见问题
- 虚拟机克隆后eth0消失
- 更改主机名
- 更改HOST
- 查看当前日历
- 显示或设置时间
- 关机和重启
- 图形化界面
-
- wc - 统计字数
- cut - 列选取命令
- grep - 行选取命令
- sort - 排序
- uniq - 去重
- tee - 同时输出多个文件
- tr - 替换指定字符
- join - 按行连接文件
- paste-将多个文件链接在一起
- split - 文件切割
- xargs - 参数代换
- 命令符号
-
- 输入重定向 <
- 输出重定向 >
- 重定向标准错误 2>
- 管道 |
- 防火墙
- 包管理工具
-
- yum
- rpm
- Linux软件安装
-
- JDK
- 虚拟机扩容
概念
我们为什么要学习Linux
linux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样,想想而已基本不可能,因为用户已经习惯于使用微信交流,不是说技术上实现不了解而是老百姓已经习惯了,想让他们不用,即使他们自己不用亲戚朋友还是要用,没有办法的事情。
用习惯了windows操作系统,再让大家切换到别的操作系统基本上是不可能的事情,改变一个人已经养成的习惯太难。没有办法深入到普通老百姓的生活中,并不意味着linux就没有用武之地了。在服务器端,在开发领域linux倒是越来越受欢迎,很多程序员都觉得不懂点linux都觉得不好意思,linux在开源社区的地位依然岿然不动。
尤其是作为一个后端程序员,是必须要掌握Linux的,因为这都成为了你找工作的基础门槛了,所以不得不学习!
Linux 简介
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux 发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gt03QrJF-1653208551892)(img/Linux/kBtPv2X4z3igFQj.png)]
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
Linux 应用领域
今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。
目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎。
- 巴西联邦政府由于支持 Linux 而世界闻名。
- 有新闻报道俄罗斯军队自己制造的 Linux 发布版的,做为 G.H.ost 项目已经取得成果。
- 印度的 Kerala 联邦计划在向全联邦的高中推广使用 Linux。
- 中华人民共和国为取得技术独立,在龙芯处理器中排他性地使用 Linux。
- 在西班牙的一些地区开发了自己的 Linux 发布版,并且在政府与教育领域广泛使用,如 Extremadura 地区的 gnuLinEx 和 Andalusia 地区的 Guadalinex。
- 葡萄牙同样使用自己的 Linux 发布版 Caixa Mágica,用于 Magalh?es 笔记本电脑和 e-escola 政府软件。
- 法国和德国同样开始逐步采用 Linux。
Linux vs Windows
环境搭建
Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果直接不想搭建,也可以直接买一台学习用用!
安装CentOS(虚拟机安装,耗资源)
1、可以通过镜像进行安装!
2、可以使用我已经制作好的镜像!视频中讲解了该种方式!
3、安装 VMware 虚拟机软件,然后打开我们的镜像即可使用!
购买云服务器(推荐)
虚拟机安装后占用空间,也会有些卡顿,我们作为程序员其实可以选择购买一台自己的服务器,这样的话更加接近真实线上工作;
1、阿里云购买服务器:https://www.aliyun.com/minisite/goods?userCode=0phtycgr
2、购买完毕后,获取服务器的ip地址,重置服务器密码,就可以远程登录了
3、下载 xShell 工具,进行远程连接使用!连接成功效果如下:
如果要打开端口,需要在阿里云的安全组面板中开启对应的出入规则,不然的话会被阿里拦截!
如果前期不好操作,可以推荐安装宝塔面板,傻瓜式管理服务器
安装教程:https://www.bt.cn/bbs/thread-19376-1-1.html
1、开启对应的端口
2、一键安装
3、安装完毕后会得到远程面板的地址,账号,密码,就可以登录了
4、登录之后就可以可视化的安装环境和部署网站!
关于域名
如果自己的网站想要上线,就一定要购买一个域名然后进行备案;
备案的话需要一些认证和时间,备完完毕后,就可以解析到自己的网站了,这个时候就可以使用域名来进行服务器的访问!
基本概念
开机会启动许多程序。它们在Windows叫做""(service),在Linux就叫做""(daemon)。
开机成功后,它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份,密码是不显示的,输完回车即可!
一般来说,用户的登录方式有三种:
- 命令行登录
- ssh登录
- 图形界面登录
最高权限账户为 root,可以操作一切!
系统启动过程
Linux系统的启动过程可以分为5个阶段:
- 内核的引导。
- 运行 init。
- 系统初始化。
- 建立终端 。
- 用户登录系统。
加载内核
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
启动初始化进程init
内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境。
init程序首先是需要读取配置文件/etc/inittab。
CentOS 各版本init配置文件的位置:
-
SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
-
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
-
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。
确定运行级别
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7个运行级别(runlevel):
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
可以使用运行级别执行关机或重启:
init 0 关机
init 6 重启
加载开机启动程序
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit
它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
l5:5:wait:/etc/rc.d/rc 5
这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。
而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
用户登录
一般来说,用户的登录方式有三种:
- (1)命令行登录
- (2)ssh登录
- (3)图形界面登录
对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。
而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
Linux 的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。
然后login会对用户名进行分析:如果用户名不是root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。
这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则root用户可以在任何终端上登录。
/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。
图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
login shell
shell,简单说就是命令行界面,让用户可以直接与操作系统对话。用户登录时打开的shell,就叫做login shell。
(1)命令行登录:首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。
~/.bash_profile
~/.bash_login
~/.profile
需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。
(2)ssh登录:与第一种情况完全相同。
(3)图形界面登录:只加载 /etc/profile 和 /.profile。也就是说,/.bash_profile 不管有没有,都不会运行。
三种网络模式
在网络网卡上安装了一个桥接协议,让这块网卡处于混杂模式,可以同时连接多个网络的做法。
桥接下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样查在这个交换机当中,所以所有桥接下网卡与网卡都是交换模式的,相互可以访问而不干扰。
(仅与主机通信)
虚拟机使用VMnet1网卡与主机单独组网,主机对于虚拟机相当于路由器
虚拟机使用VMnet8网卡与主机单独组网,主机对于虚拟机相当于路由器,VMnet8网卡通过NAT地址转换协议与物理机网卡通信
命令大全
-
[命令] :查看各种命令的用法
-
清空当前界面
-
将数据由内存同步到硬盘中。
-
游览历史
-
当系统执行过一些命令后,可按上下键翻看以前的命令,history将执行过的命令列举出来
-
history保留了最近执行的命令记录,默认可以保留1000。历史清单从0开始编号到最大值。
-
常见用法:
history N 显示最近N条命令 history -c 清除所有的历史记录 history -w xxx.txt 保存历史记录到文本xxx.txt
-
-
查看命令位置
-
ssh通信
命令行中的ctrl组合键
- Ctrl+c 结束正在运行的程序
- Ctrl+d 结束输入或退出shell
- Ctrl+s 暂停屏幕输出【锁住终端】
- Ctrl+q 恢复屏幕输出【解锁终端】
- Ctrl+l 清屏,【是字母L的小写】等同于Clear
- 当前光标到行首:ctrl+a
- 当前光标到行尾:ctrl+e
- 删除当前光标到行首:ctrl+u
- 删除当前光标到行尾:ctrl+k
- Ctrl+y 在光标处粘贴剪切的内容
- Ctrl+r 查找历史命令【输入关键字,就能调出以前执行过的命令】
- Ctrl+t 调换光标所在处与其之前字符位置,并把光标移到下个字符
- Ctrl+x+u 撤销操作
- Ctrl+z 转入后台运行
目录
概念
系统目录结构
登录系统后,在当前命令窗口下输入命令:ls /
你会看到如下图所示:
树状目录结构:(Linux的一切资源都挂载在这个 / 根节点下)
- :bin是Binary的缩写, 这个目录存放着最经常使用的命令。
- 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
- 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- :用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- :这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。
- :这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- :linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- :系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
- :这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- :这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
- :该目录为系统管理员,也称作超级权限者的用户主目录。
- :s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- :该目录存放一些服务启动之后需要提取的数据。
- :这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
- :这个目录是用来存放一些临时文件的。
- :这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- 系统用户使用的应用程序。
- 超级用户使用的比较高级的管理程序和系统守护程序。
- 内核源代码默认的放置目录。
- :这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- :是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
路径
我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。
其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。
在开始本教程前我们需要先知道什么是绝对路径与相对路径。
路径的写法,由根目录 / 写起,例如:/usr/share/doc 这个目录。
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd …/man 这就是相对路径的写法啦!
处理目录命令
ls (列出目录)
在Linux系统当中, ls 命令可能是最常被运行的。将目录下的所有文件列出来(含属性与隐藏档)
语法:ls
选项与参数:
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
- -l :长数据串列出,包含文件的属性与权限等等数据;
cd (切换目录)
cd是Change Directory的缩写,这是用来变换工作目录的命令。
语法:cd 路径
pwd ( 显示当前目录 )
pwd 是 的缩写,也就是显示目前所在目录的命令。
语法:pwd
选项与参数:
- :显示出真实的路径,而非使用连接(link) 路径。
测试:
# 单纯显示出目前的工作目录
[root@kuangshen ~]# pwd
/root
# 如果是链接,要显示真实地址,可以使用 -P参数
[root@kuangshen /]# cd bin
[root@kuangshen bin]# pwd -P
/usr/bin
mkdir (创建新目录)
如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。
语法:mkdir 目录名称
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
测试:
# 进入我们用户目录下
[root@kuangshen /]# cd /home
# 创建一个 test 文件夹
[root@kuangshen home]# mkdir test
# 创建多层级目录
[root@kuangshen home]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’:
No such file or directory # <== 没办法直接创建此目录啊!
# 加了这个 -p 的选项,可以自行帮你创建多层目录!
[root@kuangshen home]# mkdir -p test1/test2/test3/test4
# 创建权限为 rwx--x--x 的目录。
[root@kuangshen home]# mkdir -m 711 test2
[root@kuangshen home]# ls -l
drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
drwx--x--x 2 root root 4096 Mar 12 21:58 test2
rmdir ( 删除空的目录 )
删除的必须是空目录
语法:rmdir 目录名称
选项与参数:
- :连同上一级[空的]目录也一起删除
测试:
# 看看有多少目录存在?
[root@kuangshen home]# ls -l
drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
drwx--x--x 2 root root 4096 Mar 12 21:58 test2
# 可直接删除掉,没问题
[root@kuangshen home]# rmdir test
# 因为尚有内容,所以无法删除!
[root@kuangshen home]# rmdir test1
rmdir: failed to remove ‘test1’: Directory not empty
# 利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 依次删除。
[root@kuangshen home]# rmdir -p test1/test2/test3/test4
注意:这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录
cp ( 复制文件或目录 )
语法:cp 来源档(source) 目标档(destination)
cp source1 source2 source3 .... directory
选项与参数:
- **-a:**相当于 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
- **-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用);
- **-d:**若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
- **-r:**递归持续复制,用於目录的复制行为;(常用)
- **-f:**为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- **-i:**若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- **-l:**进行硬式连结(hard link)的连结档创建,而非复制文件本身。
- **-s:**复制成为符号连结档 (symbolic link),亦即[捷径]文件;
- **-u:**若 destination 比 source 旧才升级 destination !
测试:
# 找一个有文件的目录,我这里找到 root目录
[root@kuangshen home]# cd /root
[root@kuangshen ~]# ls
install.sh
[root@kuangshen ~]# cd /home
# 复制 root目录下的install.sh 到 home目录下
[root@kuangshen home]# cp /root/install.sh /home
[root@kuangshen home]# ls
install.sh
# 再次复制,加上-i参数,增加覆盖询问?
[root@kuangshen home]# cp -i /root/install.sh /home
cp: overwrite ‘/home/install.sh’? y # n不覆盖,y为覆盖
rm ( 移除文件或目录 )
语法:rm 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除!最常用在目录的删除了!这是非常危险的选项!!!
测试:
# 将刚刚在 cp 的实例中创建的 install.sh删除掉!
[root@kuangshen home]# rm -i install.sh
rm: remove regular file ‘install.sh’? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
# 尽量不要在服务器上使用 rm -rf /
mv ( 移动文件与目录,或修改名称 )
语法:mv source destination
mv source1 source2
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
测试:
# 复制一个文件到当前目录
[root@kuangshen home]# cp /root/install.sh /home
# 创建一个文件夹 test
[root@kuangshen home]# mkdir test
# 将复制过来的文件移动到我们创建的目录,并查看
[root@kuangshen home]# mv install.sh test
[root@kuangshen home]# ls
test
[root@kuangshen home]# cd test
[root@kuangshen test]# ls
install.sh
# 将文件夹重命名,然后再次查看!
[root@kuangshen test]# cd ..
[root@kuangshen home]# mv test mvtest
[root@kuangshen home]# ls
mvtest
文件
文件属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用ll
或者ls –l
命令来显示一个文件的属性以及文件所属的用户和组,如:
实例中,boot文件的第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:
- 当为[ ]则是目录
- 当为[ ]则是文件;
- 若是[ ]则表示为链接文档 ( link file );
- 若是[ ]则表示为装置文件里面的可供储存的接口设备 ( 可随机存取装置 );
- 若是[ ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )。
接下来的字符中,以三个为一组,且均为[rwx] 的三个参数的组合。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
每个文件的属性由左边第一部分的10个字符来确定(如下图):
从左至右用0-9这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中:
第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;
第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限;
第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
在以上实例中,boot 文件是一个目录文件,属主和属组都为 root。
处理文件属性命令
ll (查看文件属性)
ll查看当前目录所有的文件属性 后面跟文件名则查看文件其中的内容的属性
语法:ll (文件名)
选项与参数:
- –l 作用与ll相同
测试:
[root@localhost www]# ll
总用量 1
drw-------. 8 root root 169 4月 7 09:56 backup
[root@localhost www]# ll server/
总用量 1
drwxr-xr-x. 2 root root 6 3月 29 14:51 bt_tomcat_web
chgrp (更改文件属组)
语法:chgrp 属组名 文件名
选项与参数:
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown (更改文件属主,也可以同时更改文件属组)
语法:chown 属主名 文件名
选项与参数:
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chmod (更改文件属性)
Linux文件属性有两种设置方法,一种是数字,一种是符号。Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习一下刚刚上面提到的数据:文件的权限字符为:[-rwxrwxrwx], 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数:r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx—] 分数则是:第一个7: 第二个7 第三个0: chmod 770 文件名称
语法: chmod 数字 文件或目录
选项与参数:
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
查看文件命令
cat (查看文件)
由第一行开始显示文件内容
语法:cat 文件名
选项与参数:
- -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
测试:
# 查看网络配置: 文件地址 /etc/sysconfig/network-scripts/
[root@kuangshen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
tac (最后一行查看)
最后一行开始显示
语法tac 文件名
测试:
[root@kuangshen ~]# tac /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=dhcp
DEVICE=eth0
nl (查看并显示行号)
查看文件并显示行号
语法:nl 文件名
选项与参数:
- -b :指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);
- -n :列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;
- -w :行号栏位的占用的位数。
测试:
[root@kuangshen ~]# nl /etc/sysconfig/network-scripts/ifcfg-eth0
1DEVICE=eth0
2BOOTPROTO=dhcp
3ONBOOT=yes
more (可以翻动)
变成一页一页翻动
语法: more 文件名
more运行时可以输入的命令有:
-
空白键 (space)
:代表向下翻一页; -
回车(Enter)
:代表向下翻[一行]; -
/字串
:代表在这个显示的内容当中,向下搜寻[字串]这个关键字; -
:f
:立刻显示出档名以及目前显示的行数; -
q
:代表立刻离开 more ,不再显示该文件内容。 -
b 或 [ctrl]-b
:代表往回翻页,不过这动作只对文件有用,对管线无用。
[root@kuangshen etc]# more /etc/csh.login
....(中间省略)....
--More--(28%) # 重点在这一行喔!你的光标也会在这里等待你的命令
less (不留在页面)
一页一页翻动,以下实例输出/etc/man.config文件的内容:
语法: less 文件名
less运行时可以输入的命令有:
空白键
:向下翻动一页;(pagedown)
:向下翻动一页;(pageup)
:向上翻动一页;/字串
:向下搜寻[字串]的功能;n表示向下获取下一个,N表示向上获取上一个?字串
:向上搜寻[字串]的功能;q
:离开 less 这个程序;
[root@kuangshen etc]# more /etc/csh.login
....(中间省略)....
: # 这里可以等待你输入命令!
head (前面几行)
取出文件前面几行
语法:head 文件
选项与参数:
- -n 数字,代表显示几行的意思!
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@kuangshen etc]# head -n 20 /etc/csh.login
tail (后面几行)
取出文件后面几行
语法:tail [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
默认的情况中,显示最后 10 行!若要显示最后 20 行,就得要这样:
[root@kuangshen etc]# tail -n 20 /etc/csh.login
[root@kuangshen /]# cd /home
[root@kuangshen home]# touch f1 # 创建一个测试文件f1
[root@kuangshen home]# ls
f1
[root@kuangshen home]# ln f1 f2 # 创建f1的一个硬连接文件f2
[root@kuangshen home]# ln -s f1 f3 # 创建f1的一个符号连接文件f3
[root@kuangshen home]# ls -li # -i参数显示文件的inode节点信息
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f2
397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1
从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 397247,然而符号连接文件的 inode 节点不同。
# echo 字符串输出 >> f1 输出到 f1文件
[root@kuangshen home]# echo "I am f1 file" >>f1
[root@kuangshen home]# cat f1
I am f1 file
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
I am f1 file
[root@kuangshen home]# rm -f f1
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效;
依此您可以做一些相关的测试,可以得到以下全部结论:
- 删除符号连接f3,对f1,f2无影响;
- 删除硬连接f2,对f1,f3也无影响;
- 删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
- 同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
后面的话,我们就开始学习Vim和用户磁盘相关的命令!从而修改配置!
find (查找文件)
语法:find path -option;
参数说明 :
-
-perm xxxx:权限为 xxxx的文件或目录
-
-user: 按照文件属主来查找文件。
-
-size 范围
-
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-
-amin n : 在过去 n 分钟内被读取过
-
-anewer file : 比文件 file 更晚被读取过的文件
-
-atime n : 在过去n天内被读取过的文件
-
-cmin n : 在过去 n 分钟内被修改过
-
-cnewer file :比文件 file 更新的文件
-
-ctime n : 在过去n天内被修改过的文件
-
-empty : 空的文件
-
-gid n or -group name : gid 是 n 或是 group 名称是 name
-
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-
, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-
查找某一类型的文件:
- b 块设备文件
- d 目录
- c 字符设备文件
- p 管道文件
- l 符号链接文件
- f 普通文件
-
-exec
find 路径 查找方式 -exec shell命令 {} \
-
-ok
- 该方法与6.1相比更加安全,其存在确认过程
find 路径 查找方式 -ok shell命令 {} \;
常用用法:
命令 | 含义 |
---|---|
find ./ -name test.sh | 查找当前目录下所有名为test.sh的文件 |
find ./ -name ‘*.sh’ | 查找当前目录下所有后缀为.sh的文件 |
find ./ -name “[A-Z]*” | 查找当前目录下所有以大写字母开头的文件 |
find /tmp -size 2M | 查找在/tmp 目录下等于2M的文件 |
find /tmp -size +2M | 查找在/tmp 目录下大于2M的文件 |
find /tmp -size -2M | 查找在/tmp 目录下小于2M的文件 |
find ./ -size +4k -size -5M | 查找当前目录下大于4k,小于5M的文件 |
find ./ -perm 0777 | 查找当前目录下权限为 777 的文件或目录 |
grep (按照内容查找)
语法: grep option "内容" 查找目录或文件
-
-r 若是目录,则可以递归查找
-
-n:可以显示该查找内容所在的行号
-
-i:可以忽略大小写进行查找
-v:不显示含有某字符串
tar (文件打包)
语法:tar [参数] 打包文件名 文件
- -c 生成档案文件,创建打包文件
- -v 列出归档解档的详细过程,显示进度
- -f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
- -t 列出档案中包含的文件
- -x 解开档案文件
- -z 打包同时压缩
注意:除了f需要放在参数的最后,其它参数的顺序任意。
touch (创建文件)
语法: touch 文件名.类型
文件压缩
gzip
语法:gzip [选项] 被压缩文件
- -d 解压文件
- -f 压缩文件
zip
压缩文件zip [-r] 目标文件(没有扩展名) 源文件
unzip
解压文件:unzip -d 解压后目录文件 压缩文件
Vim编辑器
什么是Vim编辑器
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
vim 键盘图:
三种使用模式
基本上 vi/vim 共分为三种模式,分别是,。这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。x 删除当前光标所在处的字符。: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式:
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合 ,输入字符ENTER ,回车键,换行BACK SPACE ,退格键,删除光标前一个字符DEL ,删除键,删除光标后一个字符方向键 ,在文本中移动光标HOME /END ,移动光标到行首/行尾Page Up /Page Down ,上/下翻页Insert ,切换光标为输入/替换模式,光标将变成竖线/