Linux简单入门

Linux与Centos、windows、MacOS

Linux

Linux 内核版本和发行版本

Linux内核:内核即是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。

因此,内核版本就是未经开发修饰的原生样子;发行版本,不言而喻经过某些开发商开发包装而发行的版本。

内核官网:https://www.kernel.org/

Linux发行版有以下版本:

1、红帽企业系统,RedHat官网: http://www.redhat.com
2、社区企业操作系统,CentOS官网: http://www.centos.org/
3、红帽用户桌面版,Fedora官网: http://fedora.redhat.com
4、国际化组织的开源操作系统,Debian官网: http://www.debian.org/
5、基于 Debian 的桌面版,Ubuntu官网: http://www.ubuntulinux.org/

Linux 安装与基本命令

Linux安装教程:此处略(跟着网上的教程走就可以了)

安装完成之后,open-vm-tools、共享文件夹的设置、ssh远程登录等基本都需要做,分别查找网上的教程即可。

终端基本操作:
1、windows 终端打开方式:win+R
2、Linux 终端打开ctrl +alt+t、右键打开终端
3、放大:ctrl shift + 缩小:ctrl -
4、清空当前终端:clear
5、查看命令手册:man + 命令
6、关机:shutdown -h nowhaltinit 0均可

halt 需要切换位管理员模式,并且关闭之后需要手动关闭虚拟机。

7、重启:shutdown -r now、reboot、 init 6均可

Linux与Windows的异同

Linux输入于操作系统软件,当然Windows,macOS等等也是操作系统软件,操作系统软件具有以下基本功能:
1、控制硬件资源

2、提供计算机运作所需要的功能

3、提供给程序员系统调用的接口,提供了更容易的开发环境(即不直接基于硬件开发)

Linux相对Windows的区别:
1、Linux 主要使用命令行操作系统,Windows 图形化界面

2、Linux 主要应用于服务器,Windows 是个人操作系统

3、Linux 属于开源项目,而 Windows 不开源

4、Linux 是多用户系统 ,Windows 是单用户系统

多用户系统:多个人可以同时的操作计算机

单用户系统:只能由一个用户进行操作。

Ubuntu与Centos的异同

相同点:
1、Ubuntu与Centos都是Linux的发行版;
2、大部分的命令操作和原理相同或相似

不同点:
1、Ubuntu图形化界面做的比较优秀,centos稳定性相对较高。

2、centos中新建的非root用户没有sudo权限,如果需要使用管理员权限必须在/etc/sudoers 中加入账户和权限,因此切换到root账号的时候需要输入:su,然后加入root账号的密码即可。而在Ubuntu中,一般使用:sudo+命令,如果是第一次使用会提示输入当前用户的密码(注意:不是root的密码)

3、在线安装软件时,centos使用的是yum命令:yum -y 软件名
而ubuntu中使用的是apt-get命令:apt-get install + 软件名;除此之外yum中还有一个从 软件源中搜索某个软件的方法:yum search +软件名

4、centos是来自于redhat,所以centos支持rpm格式的安装,而ubuntu显然是不支持rpm格式的安装。

5、但是,由于是不同的公司做的发行版,很多配置文件的位置和默认的文件路径都有一定区别,部分命令的使用也有些差别等。

Linux 之Ubuntu

Ubuntu之目录结构与用户管理

Linux目录

Linux 系统的目录结构是一颗倒状树(Linux下:目录《=》文件夹)。
在这里插入图片描述/bin 存放常用命令

/boot 系统内核及启动有关的文件

/dev 存放设备文件 广义上的文件,键盘鼠标都可以抽象为文件然后获取消息。

/etc 存放系统配置文件 系统的运行相关的属性 参数等

/proc 这个目录是一个虚拟的目录,进程在内存中的信息映射成文件,到这个目录下。它是系统内存的映射,通过访问文件的形式访问内存信息。我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件

/mnt 临时挂载点,系统提供这个目录是让用户临时挂载别的文件系统(共享文件夹就是存在该目录下)。

/lib 存放库文件 某个命令的实现。

/tmp 存放各种临时文件,是所有用户均可访问的地点

/usr 存放系统应用程序及文档,用户安装的软件,或者运行时不经常改变的文件

/var 存放系统运行中常改变的文件, 如系统日志

/home 所有普通用户的家目录

/root 管理员用户的家目录 :权限更高

家目录:创建一个普通用户之后,所有普通用户都在”/home”下以该用户的用户名创建了一个目录,该目录就是此用户的家目录。
创建家目录的目的:
多用户的系统 为了让不同的用户和谐的使用计算机, 在家目录下面创建一个和用户同名的文件夹,不同的用户不能访问别人目录下的文件。

Linux路径(相对与绝对路径)

查看当前目录下的文件:ls

ll是ls -l的快捷键
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)

ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出

ls -r 将文件以相反次序显示(原定依英文字母次序)

ls -t 将文件依建立时间之先后次序列出

ls -A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)

ls -F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”

ls -R 若目录下有文件,则以下之文件亦皆依序列出

显示当前路径的命令:pwd

绝对路径:是从系统根目录(“/”)开始到某一位置的完整路径

相对路径: 相对于当前目录(非根目录)开始到某一位置的完整路径(绝对路径其实是一种特殊的相对路径)。

路径切换:cd 后面添加相对路径或者绝对路径。除此之外还有以下用法:

cd .. 退回到上级目录 一个点表示的是当前目录 两个点表示的是:上一级目录

cd - 跳到之前所在的目录

cd ~ 跳到自己的 home 目录

用户管理

1、添加新用户

sudo useradd -m username #参数-m     自动创建用户的家目录

参数:

-u 指定用户的uid 0 : root 用户; uid Linux上 唯一确定用户的标识 尽量不要用。

-g 执行新用户的主组(初始组)默认就是本身。

-G 设置附加组 如果指定多个附加组可以用逗号隔开 。

-d :设置家目录 (一般不用)

-c 备注

-s 指定命令解释器

-m 自动创建家目录

2、切换用户
从普通user用户切换到root用户:sudo su (然后输入当前用户的密码就进入了root用户权限)

root切换到普通用户: su username (管理员操作不需要密码)

从普通user用户切换到另一个普通user用户:su username(输入要切换的目标用户密码即可)

修改 /etc/sudoers 文件 加入一个用户该用户就可切换到root(管理员)用户,这里我添加了两个用户,sxy和teacher,均可切换到root用户
在这里插入图片描述

3、修改用户密码:passwd username(然后输入两次新密码即可)
原则:

1.易记

2.复杂

3.经常更换

4、删除用户
userdel 删除用户时(userdel username),首先确保该用户没有登录。userdel 默认仅删除用户,不会删除家目录
及家目录中的文件,若想删除用户的同时移除家目录, 那么使用 userdel -r username

5、用户信息

简单介绍一下四个目录下的各个字段信息:

1、/etc/passwd

vim或nano打开该文件:每一行都有七个字段,如下:
(1)注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。
(2)口令(密码)(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。
现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc
/shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

(3)用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特
定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。

不能重复。

0: 代表超级用户。

1-499: 代表系统用户。(伪用户)

500 ~ 65535 : 普通用户(我们使用的是从1000开始的)

(4)组标识号(GID)初始组:这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标
识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在
passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

初始组: 主组

附加组: 副组
(5)用户名(user_name):用户的说明信息(-c所指定的信息)。**包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。
(6)用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。
在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每
个用户配置了自己的主目录。个人用户的文件都放置在各自的 主目录下。

(7)命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全 ,显示为路径名,如/bin/bash。

2、/etc/shadow

该文件存储用户组信息,vim或nano打开该文件:每一行都有四个字段,如下:
第一字段:用户组名称; 也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。

第二字段:用户组密码; 和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。

第三字段:GID 就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID
相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。

第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

3、/etc/group

该文件存储用户的密码(当然是加密号的密码串一个用户一行),vim或nano打开该文件:每一行都有九个字段,如下:
1、用户名

同 /etc/passwd 文件的用户名有相同的含义。

2、加密密码
加盐 盐加密

这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES
加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 “!”、"*"
或 “x” 使密码暂时失效。

所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是
“!!”,代表这个用户没有密码,不能登录。

3、最后一次修改时间

此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢?这是因为,Linux 计算日期的时间是以 1970
年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此
root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。

那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:

[root@localhost ~]# date -d “1970-01-01 15775 days”

2013年03月11日 星期一 00:00:00 CST

可以看到,通过以上命令,即可将其换算为我们习惯的系统日期。

4、最小修改时间间隔

最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是
0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

此字段是为了针对某些人频繁更改账户密码而设计的。

5、密码有效期

经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3
字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。

该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90
天之后必须再次修改,否则该用户即将过期(或者按照后面的字段处理)。管理服务器时,通过这个字段强制用户定期修改密码。

6、密码需要变更前的警告天数

与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n
天你的密码就要过期了,请尽快重新设置你的密码!”。

该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。

7、密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是
-1,则代表密码永远不会失效。

8、账号失效时间

同第 3 个字段一样,使用自 1970 年 1 月 1
日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

该字段通常被使用在具有收费服务的系统中。

9、保留

这个字段目前没有使用,等待新功能的加入。

4、/etc/gshadow

5、修改用户信息
举例:修改用户的说明,修改用户副组

#修改用户的说明
usermod -c "test user" teacher

#将teacher用户加入root组
usermod -G root teacher

#锁定用户
usermod -L teacher
#解锁用户
usermod -U teacher

修改用户状态操作如下(也可以使用:man chage查看chage命令的英文说明)
在这里插入图片描述

Ubuntu之Java环境(Idea)与源配置

源配置

我的镜像源配方式:
先备份源文件sources.list

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

通过sudo gedit /etc/apt/sources.list打开sources.list文件修改,可添加阿里云的的源,修改/etc/apt/sources.list文件在头部添加如下內容,
我的做法将以下源替代原有的源即可(也就是删除原有内容,添加如下阿里源,原文件已被分到sources.list_backup)

阿里云的源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

保存后,更新源(此时,速度会比较快)

sudo apt-get update

​    sudo apt-get upgrade

​    sudo apt-get install vim-gtk

此时,可以修改默认编辑器,如下:
Ubuntu命令如下:

update-alternatives --config editor

选择序号:选择对应编译器;如果回车:不修改当前使用编译器;
在这里插入图片描述

jdk安装与配置

1、首先、下载安装包下载地址:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
选择对应的Linux 版,是x64还是x86根据自己的配置择。

2、然后.在windows环境下载之后导入Linux。将下载好的安装包拷贝至windows与Linux的共享文档中,然后在linux上将该安装包再移动至一个指定文件夹下:
先进入到共享文件夹找到压缩包,然后移动

mv + 下载的压缩包名称 + 目的目录/下载的压缩包名称

3、然后cd到目的目录,解压安装包 tar -xzaf + 下载的压缩包名称
4、之后,配置jdk:首先切换至管理员身份,然后通过vim编辑根目录etc目录下的profile文件对JDK的环境进行配置。
添加以下几行代码保存:

export JAVA_HOME = 你解压压缩包后的文件路径
export JRE_HOME =${JAVA_HOME}/jre
export CLASSPATH =.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH = ${JAVA_HOME}/bin:/$PATH

5、执行命令使修改立即生效

source /etc/profile

6、最后执行java -version,出现版本信息后说明jdk配置成功

Idea安装与使用

1、首先下载安装包(我下载的是社区版)
下载地址:https://www.jetbrains.com/idea/download/#section=linux

在windows环境下载之后导入Linux。将下载好的安装包拷贝至windows与Linux的共享文档中。
2、通过mv命令将压缩包移动至我们想要存储的目录下,这部分操作和移动jdk压缩包的步骤相同。
3、解压安装包tar -xzaf 安装包的名字
4、运行idea cd到idea的bin目录下,执行./idea.sh,idea就启动了,启动可能会较慢,后续idea的配置与Windows基本一样,可自行网上搜索

Ubuntu之文件类型与操作

文件类型

Linux 下所有的东西(包括内存、网卡、外部设备等等)都可以看做文件,Linux 将文件 分为以下五种类型:

  1. 普通文件 ‘-’
  2. 目录文件 ‘d’
  3. 管道文件 ‘p’
  4. 链接文件 ‘l’
  5. 设备文件(块设备 ’b’ 、字符设备 ‘c’ 、套接字设备 ‘s’ )

linux只有通过命令才能查看出一个文件的类型:ls -l 、ll :能查出隐藏文件

Linux 上不以文件的扩展名区别文件类型,而是在文件属性中有一列专门记录文件类型。 这五种文件在 Linux 上的呈现如下图所示:
在这里插入图片描述

第一部分:文件的类型和,权限。

第二部分,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。  
第三部分,表示该文件或目录的拥有者。

第四部分,表示所属的组(group)。

第五部分,表示文件大小。文件大小用byte来表示。

第六部分,表示创建日期。

第七部分,表示文件名。

文件权限

用户能够对其进行怎样的操作

1.r 读权限 值: 4

2.w 写权限 值: 2

3.x 执行权限 值: 1

4.-无权限 值: 0

如何查看文件的权限:ls -l 、ll :能查出隐藏文件
在这里插入图片描述1. u : 表示文件属主的访问权限 文件是谁建立的属主就是谁
2. g : 表示文件同组用户的访问权限 用户进行分组
3. o : 表示其他用户的访问权限 和创建文件的用户不是同一个组

修改文件的权限

文字设定法

chmod + u 表属主 g 同组人 o 其他人 a 所有人 + 增加权限 -去掉权限 文件路径/文件名
例如:

chmod u+w 文件名
数字设定法
chmod 650 test

即对test文件:
属主u :rw

属组g: rx

其他组o :没有权限

修改文件的属组

修改a文件的属组为stu

sudo chgrp stu a

修改文件的属主

修改a文件的属主为stu

sudo chown stu a

同时修改属组与属主为xxx:

bash sudo chown xxx:xxx a
对于目录文件
sudo chown -r xxx:xxx a

文件操作

查看

1、ls 查看当前目录下的文件

-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)

-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出

-r 将文件以相反次序显示(原定依英文字母次序)

-t 将文件依建立时间之先后次序列出

-A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)

-F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”

-R 若目录下有文件,则以下之文件亦皆依序列出

2、cat

cat a.txt#查看a.txt
ctrl d #结束输入
cat a.txt b.txt#合并a.txt 与b.txt

3、more

当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。

使用方式: more filename

4、less

文本内容查看器,查看文件内容,但是文件内容不会显示到界面上

5、 head
显示文件前 n 行的内容:

head -2 a.txt #查看a.txt前两行

6、tail
显示文件后 n 行的内容

tail -2 a.txt # 查看a.txt后两行

7、数据统计

 wc

统计文件中单词个数(-w)、字符个数(-c)、行数(-l)

wc -l -c -w c.txt#统计c.txt 文件中的行数、字符个数、单词个数
创建

touch + 文件路径/文件名 创建普通文件 文件路径:可以是相对路径也可以是绝对路径

mkdir + 目录路径/目录名 创建目录文件

删除

1、 删除普通文件

rm + 文件路径/文件名 删除普通文件

2、 删除目录文件

-f, --force 忽略不存在的文件,从不给出提示。

-i, --interactive 进行交互式删除

-r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。

-v, --verbose 详细显示进行的步骤

–help 显示此帮助信息并退出

–version 输出版本信息并退出

3、删除空目录

rmdir + 目录路径/目录名

rm -r +目录路径/ 目录名 -r 是rm的参数

4、删除非空目录

rm -r +目录路径/ 目录名

注意:rm -rf *(递归的删除当前目录下的所有文件) *

禁用: rm -rf /*(强制删除所有文件目录以及文件,从根目录开始删除,相当于把自己删掉了)

文件复制与重命名

文件复制与重命名

复制粘贴使用cp

语法: cp [options] source… directory

    • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。

    • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。

    • -f:覆盖已经存在的目标文件而不给出提示。

    • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。

    • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。

    • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。

    • -l:不复制文件,只是生成链接文件。

移动文件或者重命名使用mv
语法:mv [options] source… directory

    • -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
    • -f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
     mv fromfile tofile
    

    如把文件a.txt得命名为b.txt,可以是mv a.txt b.txt。 mv一次只能重命名一个文件,而且,它是移动命令。如果tofile已经存在的话,会直接装原文件覆盖,从而造成文件的丢失。当然有选项可以对已存在的文件进行提示,还是决定看看rename吧。
    例子:将目录A重命名为Bmv A B例子:将/a目录移动到/b下,并重命名为c mv /a /b/c

编辑文件

vim一共有三种模式,我们可以在不同的模式下做不同的操作。下来我们依次来看一下:

在这里插入图片描述

命令模式切换到插入模式:

1、 a 进入到当前光标后开始编辑

2.、A 进入到当前光标所在行的行末开始编辑

3、i 进入当前光标位置开始编辑

4.、I 进入当前光标所在行的行头开始编辑

5.、o 进入当前光标下一行开始编辑

6.、O 进入当前光标上一行开始编辑

命令模式切换到末行模式

1 、:对文本的设置或保存工作

2.、/ 对文本进行全文向下搜索字符串 string

3.、?对文本进行全文向上搜索字符串 string

vi/vim 常用命令

1、n dd 删除光标开始向下的 n 行

2、 n yy 拷贝光标开始向下的 n 行

3、 p 粘贴

4、u 撤销上一次操作

5、ctrl + r 恢复上一次撤销操作

6、r 替换一个字符

7、shift + 6 光标移动到当前行的行头

8、shift + 4 光标移动到当前行的行尾

9、shift + g 光标移动到整个文本的最后一行 G

10、gg 光标移动到整个文本的第一行

11、n shift + g 光标移动到第 n 行

12、d n shift + g 删除光标到 n 行的内容

13、y n shift + g 拷贝光标到 n 行的内容

3.4 末行模式下的操作

1:w 保存文本

2.:q 退出编辑

3.:wq 保存并退出

4 :q! 强制退出

5 :w newfile 另存为

6 :set nu 显示行号

7 :set nonu 取消行号

8 : set hlsearch 设置高亮搜索

9 : set nohlsearch 取消高亮搜索

10 : n,m s/oldstring/newstring 替换整个文本每行的第一个 oldstring

11:n, m s/oldstring/newstirng/g 替换整个文本所有的 oldstring

12:/string 向下搜索 string

13:?string 向上搜索 string

vim小技巧

定位命令

在这里插入图片描述

删除命令

在这里插入图片描述

复制粘贴命令

在这里插入图片描述

替换和取消命令

在这里插入图片描述

保存或退出命令

在这里插入图片描述

在这里插入图片描述

最后+g 替换的时候不询问 +c 替换的时候询问

恢复上一次撤销操作

ctrl + r

倒入日期

esc:r !date

导入另外一个文件的内容:

esc :r 文件名

vim中的快捷操作

在这里插入图片描述

以上配置如果仅在文件内配置,当再次访问该文件时会失效;解决方法,将常用快捷键写入配置文件 vim.vimrc

vim配置文件

在用户家目录输入:vim .vimrc

输入一些编辑模式的命令:比如设置行号,设置快捷键
在这里插入图片描述上述图片我设置了四行:
第一行:用vim 打开文件时显示行号
第二行:输入myemail回车或者tab时以3407691546@qq.cm代替
第三行:ctrl p 注释对应行
第四行:ctrl b 行首删除一个字符

需要注意的是每个用户的快捷键设置只对某一用户起作用

压缩打包

用tar进行打包或者解包。使用gizp进行文件压缩。
1、 打包

将文件打包或者解包

◼ c 创建包文件

◼ f 指定目标为文件而不是设备

◼ v 显示详细过程

◼ t 显示包中的内容而不释放

◼ x 释放包中的内容

◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能

tar cvf mytar.tar test test1 test 2 #打包
tar xvf mytar.tar #解包
tar czvf mytar.tar.gz a.txt b.txt c.txt	#一步打包压缩
tar xzvf mytar.tar.gz #压缩包一步解压

2、压缩

gzip myrat.tar #压缩
gzip -d mytar.tar.gz #解压缩

Ubuntu之计算机组成与进程

计算机组成之五大部件

(1) 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻辑运 算,移位,比较等。

(2) 控制器 :它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算 机按照预先规定的目标和步骤有条不紊地进行操作及处理。

(3) 存储器 :存储程序和各种数据。

(4) 输入设备 :把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信息存 储起来。

(5) 输出设备 : 把计算机机能识别的信息转换为人能识别的信息,进行呈现。 一台计算机可以抽象成下图: CPU 中包含控制器和运算器, 内存就是存储器。I/O 设 备就是输入设备和输出设备,如:键盘、显示器、鼠标、硬盘、网卡

在这里插入图片描述

系统总线

(1)数据总线:用来在各个功能部件中间传输数据,是双向传输总线

(2) 地址总线 :用来指出数据总线上的源数据或目的数据在主存单元的地址或 io 设备的地 址。

(3) 控制总线 :由于各个连接在数据总线和地址总线的部件都是共享这两类总线的,那么在某一时刻由谁来使用,就是控制总线负责完成的。

指令

(1) 指令 : 是指示计算机执行某种操作的命令。一条指令通常由两部分构成:地址码 和操 作码。

(2) 程序 : 由一条一条的指令构成。

(3) 指令周期 :cpu 每取出并执行一条指令所需的全部时间称为指令周期。

(4) 指令系统 :计算机能够执行的全部指令的集合称为该计算机的指令系统。

(5) RISC :精简指令系统计算机。

(6) CISC :复杂指令系统计算机。

(7) 程序与指令:高级语言 汇编助记符 机器指令

进程

PID

PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。

PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语。

PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统随机分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是你终止程序后再运行PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。

含义

只要运行一程序,系统会自动分配一个标识。

是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。

只要没有成功运行其他程序,这个PID会继续分配给当前要运行的程序。

如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个PID。

是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。

和用户进行交互的命令解释器。

PCB

进程控制块,进程的属性信息。

在操作系统中会使用链表将PCB连接在一起,

链表中有多少个节点,这个操作系统就有多少个进程,操作系统通过管理PCB来管理运行起来的 进程

在这里插入图片描述

进程描述信息:

  • 进程标识符用于唯一的标识一个进程(pid,ppid)。

进程控制信息:

  • 进程当前状态
  • 进程优先级
  • 程序开始地址
  • 各种计时信息
  • 通信信息

资源信息:

  • 占用内存大小及管理用数据结构指针
  • 交换区相关信息
  • I/O设备号、缓冲、设备相关的数结构
  • 文件系统相关指针

现场保护信息(cpu进行进程切换时):

  • 寄存器
  • PC
  • 程序状态字PSW
  • 栈指针

进程状态

就绪 、运行、阻塞

java中线程的状态:NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED

在这里插入图片描述

a. ready:表示线程已经被创建,正在等待系统调度分配CPU使用权。

b. running:表示线程获得了CPU使用权,正在进行运算

c. waiting:表示线程等待(或者说挂起),让出CPU资源给其他线程使用

为什么除去new和terminated状态?

是因为这两种状态实际上并不存在于线程运行中,所以也没什么实际讨论的意义。对于Java中的线程状态无论是Timed Waiting ,Waiting还是Blocked,对应的都是操作系统线程的waiting(等待)状态。而Runnable状态,则对应了操作系统中的ready和running状态。

进程管理命令

ps

只显示当前终端的进程。

默认显示与当前终端有关的进程信息

参数描述
-A列出所有的进程
-e等于“-A”
-a显示现行终端机下的所有进程,包括其他用户的进程;
-u以用户为主的进程状态 ;
x通常与 a 这个参数一起使用,可列出较完整信息。
-w显示加宽可以显示较多的资讯
-au显示较详细的资讯
-aux显示所有包含其他使用者的行程
-f做一个更为完整的输出。
-L显示进程中的线程 ID

这个PID的取值范围从1开始到整数的最大值。这我们可以根据下面要讲的PS命令看一下
在这里插入图片描述

ps与grep组合,打印指定进程信息:

ps -aux | grep sleep	#<==>
ps -le | grep sleep

USER表示哪个用户启动了这个进程;

PID表示进程的ID;

%CPU表示cpu的占用率;占用越高,进程越消耗资源。

%MEM表示内存的使用率;占用越高,进程越消耗资源。

VSZ如果一个程序完全驻留在内存中一共需要会用多少内存;(该进程所占的虚拟内存大小,单位kb)

RSS表示进程当前实际上占用了多少内存,注意不要跟VSZ混淆,VSZ的前提是进程完全驻留在内存中;该进程所占的物理内存大小,单位kb)

TTY表示tty终端;tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符结面终端,tty是图形终端。ps/0-256代表虚拟终端。

STAT表示当前进程的状态,(S表示处于休眠状态,D表示不可中断的状态,Z表示僵尸进程,X表示死掉的进程);

START启动这个命令的时间点;

TIME进程执行起到现在总的CPU占用时间;

COMMAND表示启动这个进程的命令。

pe -ef:

UID: 说明该程序被谁拥有(用户ID)

PID:就是指该程序的 ID(进程ID)

PPID: 就是指该程序父级程序的 ID(父进程号)

C: 指的是 CPU 占用率

STIME: 程序的启动时间

TTY: 指的是登录终端

TIME : 表示进程执行起到现在总的CPU占用时间

CMD: 启动这个进程的命令,它其实就是一个启动进程的命令

pstree
ptree -p

pstree命令以树状图显示进程间的关系(display a tree of processes)。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。

以树状图形式显示进程之间的关系

jobs
jobs -l

显示当前终端的任务

sleep (秒)

睡眠100秒

sleep 100

后台睡眠一百米:

sleep 100 &
fg bg

fg %任务号 将后台运行的或挂起的进程挪到前台执行

​ bg %任务号 将挂起的进程唤醒到后台执行(需要先挂起(Crtl + z)前台线程在执行)

kill
1SIGHUP
2SIGINT
8SIGFPE
9SIGKILL
14SIGALRM
15SIGTERM
18SIGCONT
19SIGSTOP

在这里插入图片描述

1:该信号让进程立即关团,然后重新读取配置文件之后重启。
2:程序终止信号,用于终止前台进程。相当于输出ctrl+c快捷键。
8:在发生致命的算术运算错误时发出.不仅包括浮点运算错误还包括溢出及除数为o等其它所有的算术的错误。
9:用来立即结束程序的运行.本信号不能被阻塞、处理和忽略一般用于强制终止进程。
14:时钟定时信号,计算的是实际的时间或时钟时间. alarm函数使用该信号。
15:正常结束进程的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL信号,也就是信号9。
18:该信号可以让暂停的进程恢复执行,本信号不能被阻断。
19:该信号可以暂停前台进程,相当于输入ctrl+z快捷键。本信号不能被阻断。

结束或者挂起一个进程

-9 强制结束进程

-stop 挂起进程

pkill

结束一组同名的进程

pkill [选项] 进程名

-t 按照终端号踢出用户。

killAll

顾名思义杀死所有。加信号和kill通用;

killall [选项] 进程名

-i 交互式,询问是否要杀死某个进程。

-I 忽略进程名的大小写。

top

查看系统资源使用情况以及进程信息

前五行信息:
统计信息区

  • 第一行:任务队列信息,与uptime命令执行结果相同。

    • 17:25:29:系统当前时间
    • up 1:10:主机已运行时间
    • 1 users:用户连接数(不是用户数,who命令)
    • load average: 0.00, 0.00, 0.00:系统平均负载,统计最近1,5,15分钟的系统平均负载

三个值相加/3*100%,与60%比较

补充:uptime -V可查询版本

  • 第二行:进程信息

    • Tasks: 287 total:进程总数
    • 1 running:正在运行的进程数
    • 146 sleeping:睡眠的进程数
    • 0 stopped:停止的进程数
    • 0 zombie:僵尸进程数
  • 第三行:CPU信息(当有多个CPU时,这些内容可能会超过两行)

    • 1.7 us:用户空间所占CPU百分比
    • 3.3sy:内核空间占用CPU百分比
    • 0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比
    • 94.2 id:空闲CPU百分比
    • 0.0 wa:等待输入输出的CPU时间百分比
    • 0.0 hi:硬件CPU中断占用百分比
    • 0.0 si:软中断占用百分比
    • 0.0 st:虚拟机占用百分比

    第四行:内存信息(与第五行的信息类似与free命令)

    • 1021564 total:物理内存总量
    • 93224 used:已使用的内存总量
    • 51540 free:空闲的内存总量(free+used=total)
    • 416800 buffers:用作内核缓存的内存量
  • 第五行:swap信息

    • 998396 total:交换分区总量
    • 996852 used:已使用的交换分区总量
    • 1544 free:空闲交换区总量
    • 351844 cached Mem:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
      PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:

      • D - 不可中断的睡眠态。
      • R – 运行态
      • S – 睡眠态
      • T – 被跟踪或已停止
      • Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。

生产环境服务器变慢,诊断思路和性能评估:
思路:先找到消耗CPU高得进程,然后找到消耗线程高的线程,然后根据任务类型,输入对应命令找到对应位置,然kill 该线程即可,并去修改出现问题的具体位置。

Ubuntu之内存与磁盘

内存和磁盘都是计算机中的存储器,都具有存储功能,属于存储设备。在计算机中,磁盘和内存是相互配合共同作业的。
区别

1、内存是一种高速,造价昂贵的存储设备;而磁盘速度较慢、造价低廉。

2、内存属于内部存储设备,磁盘属于外部存储设备。

3、内存是通过电流来实现存储;磁盘是通过磁记录来实现存储。所以电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。

内存

内存是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的。其作用是存放CPU中的运算数据,以及与硬盘等外部存储设备交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。

磁盘

磁盘(disk)是指利用磁记录技术存储数据的存储器

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

内存管理相关命令

1、free命令

free -h      //以更友好的方式显示,会以b、K、h、M、G为单位来显示
free -m           //以M单位打印结果

在这里插入图片描述执行free命令后各字段的释义:

Mem:内存使用情况。

Swap:交换空间(虚拟内存)使用情况。

total:系统总共可用物理内存、交换空间大小。

used:已经被使用的物理内存、交换空间大小。

free:剩余可用物理内存、交换空间大小。

shared:被共享使用的物理内存大小。

buff/cache:被 buffer 和 cache 使用的物理内存大小。

      • buffers:用于存放要输出到disk(块存储)的数据,在这里buff是指被OS buffer住的内存(written to disk);
      • cached:存放从disk上读出的数据;buffer和cache是为了提高IO性能并由OS管理。

available:还可以被应用程序使用的物理内存大小。

注意:

  • 应用程序可用内存/系统物理内存 > 70% 内存充足
  • 应用程序可用内存/系统物理内存 < 20% 内存不足,需要增加内存
  • 20% < 应用程序可用内存/系统物理内存 < 70%,表示内存基本够用

2、 vmstat命令

vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控,是对系统的整体情况进行的统计。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数(单位秒),第二个参数是采样的次数

一 为什么需要使用虚拟内存

大家都知道,进程需要使用的代码和数据都放在内存中,比放在外存中要快很多。问题是内存空间太小了,不能满足进程的需求,而且现在都是多进程,情况更加糟糕。所以提出了虚拟内存,使得每个进程用于3G的独立用户内存空间和共享的1G内核内存空间。(每个进程都有自己的页表,才使得3G用户空间的独立)这样进程运行的速度必然很快了。而且虚拟内存机制还解决了内存碎片和内存不连续的问题。为什么可以在有限的物理内存上达到这样的效果呢?

二 虚拟内存的实现机制

首先呢,提一个概念,交换空间(swap space),这个大家应该不陌生,在重装系统的时候,会让你选择磁盘分区,就比如说一个硬盘分几个部分去管理。其中就会分一部分磁盘空间用作交换,叫做swap space。其实就是一段临时存储空间,内存不够用的时候就用它了,虽然它也在磁盘中,但省去了很多的查找时间啊。当发生进程切换的时候,内存与交换空间就要发生数据交换一满足需求。所以啊,进程的切换消耗是很大的,这也说明了为什么自旋锁比信号量效率高的原因。
执行netstat命令后各段释义如下:
memory列

swpd:使用的虚拟内存大小。

free:空闲物理内存大小。

buff:buffer cache内存大小。

cache:page cache的内存大小。

swap列

si:每秒从交换区读入到内存的大小,由磁盘调入内存(单位:kb/s)

so:每秒从内存写出到交换区的大小,由内存调入磁盘(单位:kb/s)

以上是与内存相关的两列。

procs

r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大。

b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等

cpu

us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序

sy:内核进程消耗的CPU时间百分比

我们还可以使用pidstat -r来查看内存使用情况,首次使用该命令需要安装,apt-get install pidstat 即可

Ubuntu之网络

暂时没有总结很多,后续再补充,先介绍以下几个命令:
1、ping ip
测试与某个网络的连接是否通畅

-t Ping 指定的计算机直到中断。

-a 将地址解析为计算机名。
-n count 发送 count 指定的 ECHO 数据包数。默认值为 4。
-l length 发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节; 最大值是65,527。
-f 在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。   
-i ttl 将"生存时间"字段设置为 ttl 指定的值。
-v tos 将"服务类型"字段设置为 tos 指定的值。   
-r count在"记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。   
-s count 指定count 指定的跃点数的时间戳。   
-j computer-list 利用 computer-list指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。   
-k computer-list利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w timeout 指定超时间隔,单位为毫秒。

2、ifconfig
可以查看本虚拟机的ip

3、netstat
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

-t : TCP协议

-u: UDP协议

-r : 路由

-l: 监听

-n: 显示IP地址和端口号

-p或–programs:显示正在使用Socket的程序识别码和程序名称;

Ubuntu之远程登录

在此仅记录Windows远程登录的方式,还有其他更强大的软件ssh登录,比如secureCRT可自行搜索教程。
不管怎么登录都是这段命令:

ssh username@ip #回车输入密码即可

在Windows上,设置-》应用-》管理可选功能能-》添加功能-》OpenSSH服务器,点击安装;等待安装完成即可

注意:Linux或者提供ssh服务者要安装openssh-server,否者仍不能远程登录
Ubuntu下的命令:

sudo apt-get install openssh-server

OVER!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值