Linux概述
消息对列(Kafka、RabbitMQ、RockeetMQ),缓存(Redis),搜索引擎(ES)
集群分布式(需要购买多台服务器,如果没服务器我们就只能使用虚拟机)
我们为什么要学Linux
Linux的几个优点
- 免费(这个是大多数人的喜欢的吧)
- 很多软件原生是在Linux运行的,庞大的社区支持,生态环境好。
- 开源,可被定制,开放,多用户的网络操作系统。
- 相对安全。
LInux 简述
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
环境搭建
购买云服务器
云服务器就是一个远程电脑,服务器一般不会关机!
-
阿里云服务器购买地址:https://www.aliyun.com/minisite/goods?userCode=0phtycgr
-
购买完毕后,获取服务器的ip地址,重置服务器密码,就可以远程登录了
- 获取公网IP地址!
- 修改自己的登录密码
注意事项:
-
下载xShell工具,进行远程连接使用!
这个就相当于一个个远程电脑了,只不过都是命令行。
Ctrl + 鼠标滚轮,可以放大缩小
可以用xftp上传文件
Linux系统基本命令
开机登录
开机会启动许多程序。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
开机成功后,它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份,密码是不显示的,输完回车即可!
一般来说,用户的登录方式有三种:
- 命令行登录
- ssh登录
- 图形界面登录
最高权限账户为 root,可以操作一切!
关机
关机指令:shutdown;(直接关机容易造成数据丢失)
sync # 将数据由内存同步到硬盘中。
shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机
shutdown –h now # 立马关机
shutdown –h 20:25 # 系统会在今天20:25关机
shutdown –h +10 # 十分钟后关机
shutdown –r now # 系统立马重启
shutdown –r +10 # 系统十分钟后重启
reboot # 就是重启,等同于 shutdown –r now
halt # 关闭系统,等同于shutdown –h now 和 poweroff
systemctl poweroff #关机
Linux系统目录结构
根目录 / ,所有的文件都挂载在这个节点下
登录系统后,在当前明明窗口下输入命令:
ls /
树状目录结构:
-
/bin :bin是Binary的缩写,这个目录存放着最经常使用的命令。
-
/bot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
-
/dev:dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
-
/etc: 是etceteras,“附加项目、零星杂物”,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
-
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
-
/lib:是library缩写,这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。(不要动)
-
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
-
/media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
-
/mnt:是mount缩写,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
-
/opt: optional application software package缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件。(不用管)
-
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
-
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
-
/selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
-
/srv:service,该目录存放一些服务启动之后需要提取的数据。
-
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
-
/tmp:temp,这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,比如:安装包。
-
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 -
/usr/bin:统用户使用的应用程序。
-
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。(Super用户管理)
-
/usr/src:内核源代码默认的放置目录。
-
/var:variables,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
-
/www:存放服务器网站相关的资源,环境,网站的项目
常用的基本命令
目录管理
cd 绝对路径、相对路径
绝对路径为路径的全称。
cd:切换目录命令!
./:当前目录
cd .. :返回上一级目录
ls (列出目录)
-a参数:all,查看全部的文件,包括隐藏文件
-l参数:列出所有的文件,包括文件的属性和权限,没有隐藏文件
所有的Linux命令可以组合使用,即 ls -al 就是查看全部文件,且列出所有的文件属性和权限。
pwd显示当前用户所在的目录!
[root@cyy ~]# pwd
/root
[root@cyy ~]# cd /bin
[root@cyy bin]# pwd
/bin
touch 创建一个文件
[root@cyy home]# ls
redis test www
[root@cyy home]# touch do.txt #也可以没有后缀名
[root@cyy home]# ls
do.txt redis test www
mkdir 创建一个目录
[root@cyy /]# cd home/ #创建目录
[root@cyy home]# ls
redis www
[root@cyy home]# mkdir test
[root@cyy home]# ls
redis test www
[root@cyy home]# cd test
[root@cyy test]# cd ..
[root@cyy home]# mkdir -p test1/test2/test3 #创建多级目录
[root@cyy home]# cd test1
[root@cyy test1]# ls
test2
[root@cyy test1]# cd test2/
[root@cyy test2]# ls
test3
rmdir 删除目录
rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录加 -p 参数即可
cp(复制文件或者目录)
cp 原来的地方 拷贝到新的地方
root@cyy home]# ls
redis test test.txt www
[root@cyy home]# cp test.txt test #拷贝文件至目录
[root@cyy home]# ls
redis test test.txt www
[root@cyy home]# cd test.txt
-bash: cd: test.txt: Not a directory
[root@cyy home]# cd test
[root@cyy test]# ls
test.txt
rm(移除或者目录!)
-f 忽略不存在的文件,不会出现警告,强制删除!
-r 递归删除目录!
-i 互动,删除询问是否删除
rm -rf /* #系统中所有的文件就被删除了(非常危险!不要这样做)
[root@cyy test]# ls
test.txt
[root@cyy test]# cd ..
[root@cyy home]# ls
redis test test.txt www
[root@cyy home]# rm -rf test
[root@cyy home]# ls
redis test.txt www
mv 移动文件或者目录!(也可以重命名文件夹)
-f 强制
-u 只替换已经更新过的文件
[root@cyy home]# ls
redis test.txt www
[root@cyy home]# mkdir test
[root@cyy home]# rm test.txt test
rm: remove regular empty file ‘test.txt’? y
rm: cannot remove ‘test’: Is a directory
[root@cyy home]# ls
redis test www
Linux中的帮助命令:
-
用来查看Linux系统手册上的帮助信息:man命令
[root@dawn home]# man 命令
分屏显示、按回车翻一行、按空格翻一页、按q退出查看。
-
用来查看命令的内置帮助信息:help 命令
[root@dawn home]# help 命令
基本属性
看懂文件属性
在Liunx中第一个字符代表这个文件是目录、文件或连接文件等等:
- 当为[d]则是目录
- 当为[-]则是文件;
- 若是[I]则表示为链接文档(link file);
- 若是[b]则代表为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[c]则表示为装置文件里面的串行端口设备,例如键盘鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『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"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
查看文件或者目录的权限
ls -ahl # h为human以人性化的方式显示
修改文件属性
1、chgrp:更改文件属组(一般不要改)
chgrp -R 属组名 文件名 # -R是递归修改目录的所有者和所在的组
2、chown:更改文件属主,也可以同时更改文件属组(一般不用改)
chown -R 新属主名 文件名 # -R是递归修改目录的所有者和所在的组
chown -R 新属主名:新属组名 文件名
3、chmod:更改文件9个属性(重点)
chmod -r xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字(常用),一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
chomd 777 文件所有用户可读可写可执行!
符号:
用u、g、o、a分别表示给所有者、同组用户、其他组用户、所有用户修改权限
用+、-、=分别给指定的用户增加、减少、设置对应的权限
chmod g-w,o+w t5.txt # 对同组用户减少写的权限,对其他用户组增加写的权限
chmod g=rwx t5.txt # 对同组用户设置读写可执行权限
chmod a-r t5.txt # 所有人减少读的权限
文件内容查看
Linux系统中使用一下命令来查看文件的内容(命令 + 文件名):
- cat 由第一行开始显示文件内容(最常用)
- tac 从最后一行开始显示,可以看出tac是cat的倒着写!
- nl 显示的时候,顺道输出行号!(常用)
- more一页一页的显示文件内容(用空格键翻页,Enter向下看一行,:f 显示当前所在行)(常用)
- less与more类似,但是比more更好的是,他可以往前翻页!(用pageDown,pageUp键翻页,上下键移动行,退出q命令,查找字符串: 用 / + 字符串 这个是向下查询, ? + 要查询的字符串 这个是向上查询 ;n向下搜寻,N向上搜寻)
- head只看头几行,通过-n参数来控制显示前几行
[root@cyy etc]# head -n 5 csh.login #表示显示前5行
# /etc/csh.login
# System wide environment and startup programs, for login setup
#add sbin directories to the path
- tail 与head类似,只不过是倒着看几行
网络配置目录:cd /home/etc/sysconfig/network-scripts
ifconfig命令查看网络配置!(windows系统是ipconfig)
Linux 链接的概念
Linux的链接分为两种:硬链接、软链接!
硬链接:A --B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径。
软链接:相当于Wind上的快捷方式,删除了源文件,快捷方式就访问不了了
创建链接用In命令
ln + 源文件 + 生成文件 创建一个硬链接
ln -s + 源文件 + 生成文件 创建一个软链接
echo输出字符串
[root@cyy home]# ls
do.txt redis test www
[root@cyy home]# ln do.txt do2 #生成硬链接
[root@cyy home]# ls
do2 do.txt redis test www
[root@cyy home]# ln -s do.txt do3 #生成软链接
[root@cyy home]# ls
do2 do3 do.txt redis test www
[root@cyy home]# echo "I Love U" >> do2 #向do2里面输入字符串
[root@cyy home]# cat do2
I Love U
[root@cyy home]# cat do3
I Love U
echo也可以输出系统变量
[root@Dawn java]# echo $PATH
/usr/lib/jdk1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Dawn java]# echo $JAVA_HOME
/usr/lib/jdk1.8.0_231
把前一个查看命令的结果输出到指定的文件中:查看命令 > 文件名
- 如果目标文件不存在,则新建一个文件
- 如果目标文件已存在,则把以前的文件内容覆盖
[root@Dawn home]# ls
git redis ret.txt www
[root@Dawn home]# ls > ret.txt
[root@Dawn home]# ls
git redis ret.txt www
[root@Dawn home]# cat ret.txt
git
redis
ret.txt
www
删除do.txt后
[root@cyy home]# ls
do2 do3 do.txt redis test www
[root@cyy home]# rm -f do.txt
[root@cyy home]# ls
do2 do3 redis test www
[root@cyy home]# cat do2 #do2还可以正常查看(硬链接)
I Love U
[root@cyy home]# cat do3 #do3不能查看(软链接)
cat: do3: No such file or directory
日期和时间的操作
-
查看或者设置系统的日期或者时间:date
[root@Dawn home]# date # 查看系统当前时间的完整的日期和时间 Wed Aug 12 20:21:16 CST 2020 [root@Dawn home]# date +%Y # 查看系统当前的年份 2020 [root@Dawn home]# date +%m # 查看系统当前的月份 08 [root@Dawn home]# date +%d # 查看系统当前的日期 12 [root@Dawn home]# date \'+%Y-%m-%d %H:%M:%S\' # 按yyyy-MM-dd HH:mm:ss格式显示 2020-08-12 20:22:42 [root@Dawn home]# date -S \'2020-10-20 10:20:30\' # 设置当前的系统时间
-
查看日历:cal
[root@Dawn home]# cal # 查看当前月份的日历 August 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [root@Dawn home]# cal 2020 # 查看指定年份的日历 2020 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 1 2 3 4 5 6 7 5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14 12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21 19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28 26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 2 1 2 3 4 5 6 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 1 2 3 4 5 5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12 12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19 19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26 26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30 30 31 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26 25 26 27 28 29 30 31 29 30 27 28 29 30 31
搜索文件或目录命令
- find [搜索范围] [搜索标准] 关键字
[root@Dawn home]# find *.txt # 搜索当前目录里下所有的.txt文件
cy.txt
[root@Dawn home]# find *e* #搜索当前目录下,所有的名称中包含e的那些文件或者目录
redis
redis/.bash_logout
redis/.bash_profile
redis/.bashrc
[root@Dawn home]# find /etc *.txt # 搜索/etc目录下所有.txt文件
[root@Dawn home]# find /etc -size +5M #搜索/etc目录下所有大于5M的文件,小于用减号,等于不用符号
/etc/udev/hwdb.bin
[root@Dawn home]# find /etc -user zhangsan #搜索/etc目录下所有的所有者是zhangsan的文件和目录
-
locate:在整棵目录树中搜索文件或者目录,都是根据名称搜索
用之前先要
updatedb
(更新数据库)[root@Dawn home]# updatedb [root@Dawn home]# locate *.txt
-
搜索过滤命令,在前一个搜索梦灵结果中进行按名称进一步过滤:
- 搜索命令 | grep [选项] 过滤条件
- 查看命令 | grep [选项] 过滤条件
[root@Dawn home]# find *.txt|grep new #搜索当前目录下,所有包含new的.txt文件
压缩和解压命令
-
压缩或者解压单个文件:
gzip 文件名:压缩单个文件,生产一个.gz的压缩包,并且会把原来的文件删除。
[root@Dawn home]# ls cy.txt git redis www [root@Dawn home]# gzip cy.txt [root@Dawn home]# ls cy.txt.gz git redis www
gunzip 文件名: .gz压缩包名:解压.gz压缩包,并且会把原来的.gz压缩包删除。
[root@Dawn home]# ls cy.txt.gz git redis www [root@Dawn home]# gunzip cy.txt.gz [root@Dawn home]# ls cy.txt git redis www
-
压缩(打包)或者解压多个文件和目录:
zip 目标压缩包名称(通常使用.zip压缩包) 文件或者目录列表 :
[root@Dawn home]# ls cy.txt git redis t1.txt t2.txt www [root@Dawn home]# zip test.zip *.txt adding: cy.txt (deflated 74%) adding: t1.txt (stored 0%) adding: t2.txt (stored 0%) [root@Dawn home]# ls cy.txt git redis t1.txt t2.txt test.zip www
unzip 压缩包名(.zip) -d 解压目录:将指定的.zip压缩包解压到当前目录(或者指定目录)
[root@Dawn home]# unzip test.zip -d test Archive: test.zip inflating: test/cy.txt extracting: test/t1.txt extracting: test/t2.txt [root@Dawn home]# ls test cy.txt t1.txt t2.txt
-
压缩(打包)或者解压多个文件和目录:
tar [选项] 目标压缩包名称
- -z: 打包时同时压缩
- -c:产生.tar.gz打包文件
- -v:显示详细信息
- -f:指定压缩后的文件名
- -x:解压
- -C:指定解压到哪个目录
解压:
tar -zcvf xxx.tar.gz 文件或者目录列表
[root@Dawn home]# mkdir test5 [root@Dawn home]# tar -zxvf mytar.tar.gz -C test5 cy.txt test.zip test/ test/t2.txt test/cy.txt test/t1.txt [root@Dawn home]# ls test5 cy.txt test test.zip
压缩:
tar -zxvf xxx.tar.gz -C解压目录名
[root@Dawn home]# ls cy.txt git redis t1.txt t2.txt test test.zip www [root@Dawn home]# tar -zcvf mytar.tar.gz cy.txt test.zip test cy.txt test.zip test/ test/t2.txt test/cy.txt test/t1.txt [root@Dawn home]# ls cy.txt git mytar.tar.gz redis t1.txt t2.txt test test.zip www
Vim 编辑器
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。(记得先退出编辑模式按Esc键退出)
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序
- w 保存文件(一般是wq配合使用)
简单的说,我们可以将这三个模式想成底下的图标来表示:
vi/vim 按键说明
移动光标的方法 | |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! | |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
数字 + 空格 | 例如 20 < space > 则光标会向后面移动 20 个字符距离。 |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
数字+ < Enter > | 例如 3 |
搜索替换 | |
---|---|
/word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) |
?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |
n | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! |
N | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 |
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! | |
:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
删除、复制与贴上 | |
---|---|
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 删除游标所在的那一整行(常用) |
ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 撤销,复原前一个动作。(常用) |
[Ctrl]+r | 重做,重做上一个动作。(常用) |
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦! | |
. | 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式 | |
---|---|
i, I | 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用) |
a, A | 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) |
o, O | 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用) |
r, R | 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) |
上面这些按键中,在 vi/vim 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔! | |
[Esc] | 退出编辑模式,回到一般模式中(常用) |
第三部分:一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令 | |
---|---|
:w | 将编辑的数据写入硬盘档案中(常用) |
:w! | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
:q | 离开 vi (常用) |
:q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
注意一下啊,那个惊叹号 (!) 在 vi/vim 当中,常常具有『强制』的意思~ | |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开! |
:w [filename] | 将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] | 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command | 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息! |
:set nu(常用) | 显示行号,设定之后,会在每一行的前缀显示改行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
账号管理
在公司中,用的应该都不是root用户!
简介
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
用户账号的管理
用户账号的管理工作只要涉及到用户账号的天加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。
useradd 命令 添加用户
useradd -选项 用户名
-m: 自动创建这个用户的主目录
[root@cyy home]# useradd -m Dawn 创建一个用户
[root@cyy home]# ls
Dawn redis www
理解一下本质 :Linux中一切皆文件,这里的添加用户说白了就是往莫一个文件中写入用户的信息(信息在/etc/passwd)
删除用户 userdel
userdel -r Dawn 删除用户的时候将用户的时候将他的目录也一并删除!
[root@cyy home]# ls
Dawn redis www
[root@cyy home]# userdel -r Dawn #删除用户
[root@cyy home]# ls
redis www
修改用户 usermod
修改用户 usermod 对应修改的内容 修改那个用户
[root@cyy home]# usermod -d /home/cy dawn
修改完毕后查看配置文件即可!
切换用户
root用户
- 切换用户的命令为:su + 用户名
- 从普通用户切换到root用户,还可以使用命令:sudo su
- 在终端输入exit或sogout或使用快捷方式ctrl + d ,可以退回到原来用户,其实ctrl + d也是执行的exit命令
- 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之前加-,例如 :[su - root]
$表示普通用户
表示超级用户,也就是root用户
hostname 查看主机名
hostname + 用户名 修改主机名
用户的密码设置
我们一般通过root创建用户的时候!要配置密码!(Linux上输入密码,密码是不会显示的,不是你的电脑卡了哦~)
如果是超级用户的话用passwd + 用户名 修改用户密码
如果是普通用户直接passwd (然后输入旧密码,就可以输入新密码了)
锁定账户!(也就是所谓的冻结账户)
passwd -l + 用户名
锁定之后这个用户就不能登录了
passwd -d + 用户名
-d是指不仅用户名冻结了,密码也删除了。
passwd -u + 用户名
解除锁定
用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
创建一个用户组 groupadd
[root@dawn home]# groupadd cc
[root@dawn home]# cat /etc/group #查看用户组
创建完用户组后可以得到一个组的id,这个是可以指定的 -g 123
, 若不指定就是自增 1
删除用户组 groupdel
[root@dawn home]# groupdel cc #删除用户组
[root@dawn home]# cat /etc/group #查看用户组
把用户添加到组中: gpasswd - a 用户名 组名
[root@dawn home]# gpasswd - a cc dev
把用户从组中移除:gpasswd -d 用户名 组名
[root@dawn home]# gpasswd -d cc dev
创建用户时,指定所属的组(主组):useradd -g 组名 用户名
[root@dawn home]# useradd -g dev cc
修改用户组的权限信息和名字 groupmod
用户如果要切换用户组怎么办?
$ newgrp root
与用户账号有关的系统文件(拓展)
这个文件对所有用户都是可读的。它的内容类似下面的例子:
# cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh
从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令(登录密码,我们不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell
1)"用户名"是代表用户账号的字符串。
通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(
以上是关于Linux入门的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)