Linux入门

Posted DawnCoody

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux入门相关的知识,希望对你有一定的参考价值。

Linux概述

消息对列(Kafka、RabbitMQ、RockeetMQ),缓存(Redis),搜索引擎(ES)

集群分布式(需要购买多台服务器,如果没服务器我们就只能使用虚拟机)

我们为什么要学Linux

Linux的几个优点

  1. 免费(这个是大多数人的喜欢的吧)
  2. 很多软件原生是在Linux运行的,庞大的社区支持,生态环境好
  3. 开源,可被定制,开放,多用户的网络操作系统
  4. 相对安全

LInux 简述

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

环境搭建

购买云服务器

云服务器就是一个远程电脑,服务器一般不会关机!

  1. 阿里云服务器购买地址:https://www.aliyun.com/minisite/goods?userCode=0phtycgr

  2. 购买完毕后,获取服务器的ip地址,重置服务器密码,就可以远程登录了

    • 获取公网IP地址!
    • 修改自己的登录密码

    image-20200629182154774

    注意事项:

    image-20200629181347782

    image-20200629181730194

  3. 下载xShell工具,进行远程连接使用!

image-20200629185330764

这个就相当于一个个远程电脑了,只不过都是命令行。

Ctrl + 鼠标滚轮,可以放大缩小

可以用xftp上传文件

image-20200629190548526

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 /  

image-20200629192854285

树状目录结构:

image-20200629192928640

  • /binbin是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/上,然后进入该目录就可以查看光驱里的内容了。

  • /optoptional 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 命令
    

    基本属性

看懂文件属性

image-20200630100940695

在Liunx中第一个字符代表这个文件是目录、文件或连接文件等等:

  • 当为[d]则是目录
  • 当为[-]则是文件;
  • 若是[I]则表示为链接文档(link file);
  • 若是[b]则代表为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[c]则表示为装置文件里面的串行端口设备,例如键盘鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

每个文件的属性由左边第一部分的10个字符来确定(如下图)。

363003_1227493859FdXT

从左至右用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

日期和时间的操作

  1. 查看或者设置系统的日期或者时间: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\' # 设置当前的系统时间
    
  2. 查看日历: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
    
    

搜索文件或目录命令

  1. 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的文件和目录
  1. locate:在整棵目录树中搜索文件或者目录,都是根据名称搜索

    用之前先要updatedb (更新数据库)

    [root@Dawn home]# updatedb
    [root@Dawn home]# locate *.txt
    
  2. 搜索过滤命令,在前一个搜索梦灵结果中进行按名称进一步过滤:

    • 搜索命令 | grep [选项] 过滤条件
    • 查看命令 | grep [选项] 过滤条件
    [root@Dawn home]# find *.txt|grep new	#搜索当前目录下,所有包含new的.txt文件
    

压缩和解压命令

  1. 压缩或者解压单个文件:

    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
    
  2. 压缩(打包)或者解压多个文件和目录:

    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
    
  3. 压缩(打包)或者解压多个文件和目录:

    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 切换到输入模式,以输入字符。

image-20200630121113717

  • 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 光标向下移动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

修改完毕后查看配置文件即可!

image-20200630152256311

切换用户

root用户

image-20200630153517013

  1. 切换用户的命令为:su + 用户名
  2. 从普通用户切换到root用户,还可以使用命令:sudo su
  3. 在终端输入exit或sogout或使用快捷方式ctrl + d ,可以退回到原来用户,其实ctrl + d也是执行的exit命令
  4. 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在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

image-20200630164616221

用户如果要切换用户组怎么办?

$ 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入门的主要内容,如果未能解决你的问题,请参考以下文章

linux_docker入门

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

[linux][c/c++]代码片段01

Cg入门19:Fragment shader - 片段级模型动态变色

[linux][c/c++]代码片段02

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?