Linux操作系统的使用
Linux目录结构
Linux的目录结构是一个树型结构。Windows 系统可以拥有多个盘符, 如 C盘、D盘。Linux没有盘符这个概念, 只有一个根目录/
, 所有文件都在它下面。在Linux系统中,路径之间的层级关系,使用:/
来表示,在Windows系统中,路径之间的层级关系,使用:\
来表示。
目录 | 作用 |
---|---|
/bin | bin 是二进制文件的缩写,这个目录存放着最经常使用的命令。 |
/boot | 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 |
/dev | dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 |
/etc | etc 是 Etcetera(其他) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 |
/home | 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名以用户的账号命名。 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录。 |
/lib | lib 是 Library(库) 的缩写,这个目录里存放着系统最基本的动态连接共享库。 |
/media | linux 系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux 会把识别的设备挂载到这个目录下。 |
/mnt | 该目录是为了让用户临时挂载别的文件系统的,可将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容。 |
/opt | opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如安装数据库则就可以放到这个目录下。默认是空的。 |
/sbin | s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 |
/tmp | tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 |
/usr | usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 |
/usr/bin | 系统用户使用的应用程序。 |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序。 |
/var | var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 |
Linux环境变量
环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
在Linux系统中执行env
命令即可查看当前系统中记录的环境变量。
环境变量是一种KeyValue型结构,即名称和值。
PATH
环境变量PATH
会记录一组目录,目录之间用:
隔开。这里记录的是命令的搜索路径,当执行命令会从记录中记录的目录中挨个搜索要执行的命令并执行。
可以通过修改这个项目的值,加入自定义的命令搜索路径。
PATH变量值获取
- 通过
env
命令可以查看环境变量信息,env | grep PATH
。 - 通过
$
符号,可以取出环境变量的值,echo $PATH
。
PATH变量值设置
Linux环境变量可以用户自行设置,其中分为:
- 临时生效,
export PATH=$PATH:自定义路径
。 - 永久生效:
- 针对用户:
~/.bashrc
文件中配置。 - 针对全部用户:
/etc/profile
文件中配置。 - 配置完成,可以通过
source
命令立刻生效。
- 针对用户:
Linux路径
绝对路径
绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头。如cd /etc
。
相对路径
相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头。如cd Desktop
。
特殊路径符
.
表示当前目录,比如cd ./Desktop
表示切换到当前目录下的Desktop目录内,和cd Desktop
效果一致。..
表示上一级目录,比如:cd ..
即可切换到上一级目录,cd ../..
切换到上二级的目录。~
表示HOME目录,比如:cd ~
即可切换到HOME目录或cd ~/Desktop
,切换到HOME内的Desktop目录。
用户、用户组
Linux系统中可以:
- 配置多个用户。
- 配置多个用户组。
- 用户可以加入多个用户组中。
Linux中关于权限的管控级别有2个级别,分别是:
- 针对用户的权限控制。
- 针对用户组的权限控制。
比如,针对某文件,可以控制用户的权限,也可以控制用户组的权限。
用户管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
增加用户账号就是在/etc/passwd
文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow
, /etc/group
等。Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
以下命令需root用户执行。
命令 | 描述 |
---|---|
useradd |
创建用户 |
userdel |
删除用户 |
usermod |
修改帐号 |
用户组管理
用户组的管理涉及用户组的添加、删除和修改。
组的增加、删除和修改实际上就是对/etc/group
文件的更新。
以下命令需root用户执行。
命令 | 描述 |
---|---|
groupadd |
创建用户组 |
groupdel |
删除用户组 |
groupmod |
修改用户组 |
newgrp |
用户组之间切换 |
超级管理员
无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root(超级管理员)。
root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。
- 普通用户的权限,一般在其HOME目录内是不受限的。
- 一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。
- 显示当前用户的命令为
whoami
。 - 切换用户,
su root
,此种方式不会将工作目录变更为/root
目录。 - 切换用户,改变环境变量,
su - root
,此种方式会将工作目录变更为/root
目录。
Linux 文件基本属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们可以使用ll
或者ls –l
命令来显示一个文件的属性以及文件所属的用户和组,如:
- 序号1,表示文件、文件夹的权限控制信息,可使用
chmod
命令修改权限控制信息。- 从左至右用0-9这些数字来表示。第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
- 第0位第一个字符代表这个文件是目录、文件或链接文件等等,当为
d
则是目录,当为-
则是文件,当为l
则表示为链接文档; - 文件的权限表示,均为 rwx 的三个参数的组合。其中,
r
代表可读、w
代表可写、x
代表可执行。这三个权限的位置不会改变,如果没有权限,就会使用减号-
表示。 r
,针对文件可以查看文件内容,针对文件夹,可以查看文件夹内容,如ls
命令。w
,针对文件表示可以修改此文件,针对文件夹,可以在文件夹内:创建、删除、改名等操作。x
,针对文件表示可以将文件作为程序执行,针对文件夹,表示可以更改工作目录到此文件夹,即cd
进入。
- 序号2,表示文件、文件夹所属用户,可使用
chown
命令修改所属用户。 - 序号3,表示文件、文件夹所属用户组,可使用
chown
命令修改所属用户组。
Linux命令
Linux命令基础格式
无论是什么命令,用于什么用途,在Linux中,命令有其通用的格式:
1 | command [-option][arguments] |
- command: 命令本身
- -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
- arguments:[可选,非必填]命令的参数,多数用于命令的指向目标等
磁盘管理
df命令
df(英文全拼:disk free)命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
语法:
1 | df [选项]... [FILE]... |
- 选项:
-h
,以更加人性化的单位显示。
du命令
du(英文全拼:disk usage)命令用于显示目录或文件的大小。du 会显示指定的目录或文件所占用的磁盘空间。
语法:
1 | df [选项]... [FILE]... |
- 选项:
-a
,显示目录中个别文件的大小。 - 选项:
-h
,以更加人性化的单位显示。 - 选项:
--max-depth=<目录层数>
,超过指定层数的目录后,予以忽略。 - 查看根目录
/
下各个文件占用情况,du -ah --max-depth=1 /
。
ls命令
ls命令的作用是列出目录下的内容,语法细节如下:
语法:
1 | ls [-l -h -a] [Linux路径] |
- Linux路径:被查看的文件夹,不提供该参数,表示查看当前工作目录。
- -l,表示:以列表(竖向排列)的形式展示内容,并展示更多信息
- -h,表示以易于阅读的形式,列出文件大小,如K、M、G,
-h
选项必须要搭配-l
一起使用。 - -a,表示:all的意思,即列出全部文件(包含隐藏的文件/文件夹)。在Linux中以
.
开头的,均是隐藏的。默认不显示出来。
cd命令
当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录,可以通过cd命令,更改当前所在的工作目录。 cd命令来自英文:Change Directory。
语法:
1 | cd [dirName] |
- cd命令无需选项,只有参数,表示要切换到哪个目录下
- cd命令直接执行,不写参数,表示回到用户的HOME目录
pwd命令
pwd命令来自:Print Work Directory,命令用于显示工作目录。执行 pwd 指令可立刻得知目前所在的工作目录的绝对路径名称。
语法:
1 | pwd [--help][--version] |
- pwd命令,一般无选项,无参数,直接输入pwd即可
mkdir命令
mkdir(英文全拼:make directory)命令用于创建目录。
1 | mkdir [-p] dirName |
- 参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可。
-p
选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。如mkdir -p runoob2/test
,本例若不加-p
参数,且原本 runoob2 目录不存在,则产生错误。
文件管理
touch命令
可通过touch命令创建一个新的空白文件。
语法:
1 | touch 文件或目录 |
- touch命令一般无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用。
cat命令
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
语法:
1 | cat fileName |
- cat命令一般无选项,参数必填,参数表示被查看的文件路径,相对、绝对、特殊路径符都可以使用。
- 清空 /etc/test.txt 文档内容,
cat /dev/null > /etc/test.txt
,常用于清空日志文件。 - 把textfile1的文档内容加上行号后输入 textfile2 这个文档里,
cat -n textfile1 > textfile2
。 - 把textfile1和textfile2的文档内容加上行号(空白行不加)之后将内容附加 textfile3文档里,
cat -b textfile1 textfile2 >> textfile3
。
split命令
split命令用于将一个文件分割成数个。该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
语法:
1 | split [-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名] |
- 选项:
-<行数>
,指定每多少行切成一个小文件。 - 选项:
-b<字节>
,指定每多少字节切成一个小文件。 - 选项:
-C<字节>
,与参数-b
相似,但是在切割时将尽量维持每行的完整性。 - 选项:
-d
,指定数字形式的文件后缀。 - 选项:
[输出文件名]
,设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号。 - 拆分大文件
1.log
,以200m
为单位,输出目录为xxx文件夹
下,文件以a_数字
格式输出,split -d -b 200m 1.log XXX/a_
。 - 合并文件,
cat XXX/a_* > 1.log
。
more命令
more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),通过q退出查看 。
语法:
1 | more fileName |
- more命令一般无选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用。
chmod命令
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令。注意,只有文件、文件夹的所属用户或root用户可以修改。chmod命令可以使用八进制数来指定权限。
语法:
1 | chmod [-R] mode file... |
- 选项:
-R
,对文件夹内的全部内容应用同样的操作。 - 参数:
file...
,要设置的文件路径,可包含多个。 - 参数:
mode
,权限设定字串,格式如下 :[ugoa...][[+-=][rwxX]...][,...]
。u
表示该文件的拥有者,g
表示与该文件的拥有者属于同一个群体(group)者,o
表示其他以外的人,a
表示这三者皆是。+
表示增加权限、-
表示取消权限、=
表示唯一设定权限。r
表示可读取,w
表示可写入,x
表示可执行。- 权限也可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。
- 为ex1.py文件拥有者增加可执行权限,
chmod u+x ex1.py
。 - 将目前目录下的所有文件与子目录皆设为任何人可读取,
chmod -R a+r *
。 - 为file文件拥有者增加读写可执行权限和其他人可执行权限,
chmod ug=rwx,o=x file
等效于chmod 771 file
。
权限数字 | 描述 |
---|---|
0 |
无任何权限,即--- |
1 |
仅有x 权限,即--x |
2 |
仅有w 权限,即-w- |
3 |
有w 和x 权限,即-wx |
4 |
仅有r 权限,即r-- |
5 |
有r 和x 权限,即r-x |
6 |
有r 和w 权限,即rw- |
7 |
有全部权限,即rwx |
chown命令
chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行。
语法:
1 | chown [-R] 用户[:group] file... |
- 选项,
-R
,对文件夹内全部内容应用相同规则。 - 选项,用户,修改所属用户。
- 选项,用户组,修改所属用户组。
:
用于分隔用户和用户组。- 将hello.txt所属用户修改为root,
chown root hello.txt
。 - 将hello.txt所属用户组修改为root,
chown :root hello.txt
。 - 将hello.txt所属用户修改为root,用户组修改为root,
chown root:root hello.txt
。 - 将文件夹test的所属用户修改为root并对文件夹内全部内容应用同样规则。
chown -R root test
。
cp命令
cp(英文全拼:copy)命令主要用于复制文件或目录。
语法:
1 | cp [-options] 参数1 参数2 |
-r
选项,可选,用于复制文件夹使用,表示递归。-f
选项,可选,覆盖已经存在的目标文件而不给出提示。- 参数1,Linux路径,表示被复制的文件或文件夹。
- 参数2,Linux路径,表示要复制去的地方。
- 将一个文件夹复制到另一个文件夹下,以下实例 packageA 文件及其任意层的结构会拷贝到 packageB 中,
cp -r /home/packageA /home/packageB
- 将 packageA 下的所有文件(不包含 packageA 文件)拷贝到 packageB 中,
cp -r /home/packageA/* /home/cp/packageB/
scp命令
scp 命令用于Linux之间复制文件和目录。scp 是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
语法:
1 | scp [可选参数] 参数1 参数2 |
-r
选项,可选,用于复制文件夹使用,表示递归。-P
选项, port是指定数据传输用到的端口号。- 参数1,Linux路径,表示被复制的文件或文件夹。
- 参数2,Linux路径,表示要复制去的地方。
- 拉取,将异地服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录下,
scp -r root@异地服务器ip:/home/lk /root
。 - 推送,在本地服务器上将/root/lk目录下所有的文件传输到异地的/home/lk/cpfile目录下,
scp -r /root/lk root@异地服务器ip:/home/lk/cpfile
。 - 如果远程服务器防火墙有为scp命令设置了指定的端口,需使用
-P
参数来设置命令的端口号,scp -P 10001 local_file remote_ip:remote_file
。 - 参数1或参数2中指定了用户名,命令执行后需再输入密码;若未指定用户名,命令执行后需输入用户名和密码。
mv命令
mv(英文全拼:move)命令用来为文件或目录改名、或将文件或目录移入其它位置。
语法:
1 | mv [options] 参数1 参数2 |
-b
: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。-f
: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。- 参数1,Linux路径,表示被移动的文件或文件夹。
- 参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在。
- 将源文件名 source_file 改为目标文件名 dest_file,效果是仅重命名,
mv a/source_file(文件) a/dest_file(文件)
。 - 将源文件名 source_file 改为移动到目标文件夹b中并改目标文件名 dest_file,效果是:移动 + 重命名。
mv a/source_file(文件) a/b/dest_file(文件)
。 - 将文件 source_file 移动到目标目录 dest_directory 中,
mv source_file(文件) dest_directory(目录)
。 - 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory,
mv source_directory(目录) dest_directory(目录)
。 - 出错,
mv source_directory(目录) dest_file(文件)
。 - 将 /usr/runoob 下的所有文件和目录移到当前目录下,
mv /usr/runoob/* .
。
rm命令
rm(英文全拼:remove)命令用于删除一个文件或者目录。
语法:
1 | rm [-options] 参数1 参数2 ...... 参数N |
-r
选项用于删除文件夹,将目录及以下之档案亦逐一删除。-f
表示force,强制删除(不会弹出提示确认信息)。- 参数1、参数2、……、参数N 表示要删除的文件或文件夹路径,按照空格隔开。
- 参数也支持通配符
*
,即匹配任意内容(包含空),用以做模糊匹配。test*
,表示匹配任何以test开头的内容,*test
,表示匹配任何以test结尾的内容,*test*
,表示匹配任何包含test的内容。 - 删除当前目录下的所有文件及目录,
rm -rf *
。 - 删除目录 test,不管该目录下是否有子目录或文件,都直接删除,
rm -rf test/
。 - 注意:以下操作会删除Linux根目录下的所有文件,直接导致服务器瘫痪,
rm -rf /*
或rm -rf /
,删库跑路。
which命令
which命令用于查找文件。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
语法:
1 | which [文件...] |
- 可以通过which命令,查看所使用的一系列命令的程序文件存放在哪里,
which bash
find命令
find 命令用于在指定目录下查找文件和目录。它可以使用不同的选项来过滤和限制查找的结果。
语法:
1 | find [path] [expression] |
- path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
- expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
-name pattern
:按文件名查找,支持使用通配符 * 和 ?。-type type
:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。-size [+-]size[cwbkMG]
:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
- 查找当前目录下名为 file.txt 的文件,
find . -name file.txt
。 - 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来,
find . -name "*.c"
- 查找 /home 目录下大于 1MB 的文件,
find /home -size +1M
。 - find指令为找出500M以上的文件,print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题。du -m是查看这些文件的大小,并以m为单位显示。最后sort -nr是按照数字反向排序(大的文件在前),
find / -size +500M -print0|xargs -0 du -m|sort -nr
。
ln命令
ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。
链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
若链接的路径存在,则无法创建新链接,需删除之后,才能新建。
- 软链接:
- 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式。
- 2.软链接可以 跨文件系统 ,硬链接不可以。
- 3.软链接可以对一个不存在的文件名进行链接。
- 4.软链接可以对目录进行链接。
- 硬链接:
- 1.硬链接,以文件副本的形式存在。但不占用实际空间。
- 2.不允许给目录创建硬链接。
- 3.硬链接只有在同一个文件系统中才能创建。
语法:
1 | ln [-s][源文件或目录][目标文件或目录] |
-s
选项,创建软连接。- 参数1:被链接的文件或文件夹。
- 参数2:要链接去的目的地。
- 给文件创建软链接,为a.log文件创建软链接link_a,如果a.log丢失,link_a将失效,
ln -s a.log link_a
。 - 给文件创建硬链接,为b.log创建硬链接ln_b,如果b.log丢失,ln_b仍可访问,b.log与ln_b的各项属性相同,
ln b.log ln_b
。
文档编辑
grep命令
grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法:
1 | grep [options] pattern [files] |
-n
选项,可选,表示在结果中显示匹配的行的行号。pattern
,关键字,必填, 表示要查找的字符串或正则表达式,带有空格或其它特殊符号,建议使用””将关键字包围起来。files
, 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。- 在文件 file.txt 中查找字符串 “hello”,并打印匹配的行,
grep hello file.txt
。 - 在文件夹 dir 中递归查找所有文件中匹配正则表达式 “pattern” 的行,并打印匹配行所在的文件名和行号,
grep -r -n pattern dir/
。 - 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行,
grep test *file
。
wc命令
wc命令做数量统计,可以通过wc命令统计文件的行数、单词数量等。
语法:
1 | wc [-cmlw][文件...] |
-c
选项,统计bytes数量。-m
选项,统计字符数量。-l
选项,统计行数。-w
选项,统计单词数量。- 参数,文件路径,被统计的文件,可作为内容输入端口,多文件按照空格隔开。
- 默认的情况下,wc将计算指定文件的行数、字数,以及字节数并依次显示,
wc testfile
。 - 统计字节数,
wc -c testfile
,其他同理。 - 统计当前目录下文件的个数(不包括目录),
ls -l | grep "^-" | wc -l
- 查看某目录下文件夹(目录)的个数(包括子目录),
ls -lR | grep "^d" | wc -l
- 统计文件中带有it关键字的有几行,
cat test.txt | grep it | wc -l
- 统计文件中带有it关键字的结果中有多少个单词,
cat test.txt | grep it | wc -w
echo命令
可以使用echo命令在命令行内输出指定内容。
语法:
1 | echo 输出的内容 |
- 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用””包围。
- 普通字符串
echo "It is a test"
echo It is a test
- 这里的双引号完全可以省略,两条语句效果一致。
- 显示转义字符
echo "\"It is a test\""
输出结果为”It is a test”
- 显示命令执行结果
echo `pwd`
- 将命令用反引号
`
将其包围,被包围的内容,会被作为命令执行,而非普通字符,此处输出的是当前工作目录。
重定向符
功能:将符号左边的结果,输出到右边指定的文件中去。
>
,表示覆盖输出。>>
,表示追加输出。echo “Hello Linux” > it.txt
,使用>
覆盖原有内容。echo Hello World >> it.txt
,再次执行,使用>>
追加新内容。
备份压缩
Linux和Mac系统常用有2种压缩格式,后缀名分别是:
.tar
,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装。.gz
,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积
tar命令
tar(英文全拼:tape archive )命令用于备份文件。tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
语法:
1 | tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数n |
- 选项
-c
,创建压缩文件,用于压缩模式。 - 选项
-v
,显示压缩、解压过程,用于查看进度。 - 选项
-x
,解压模式。 - 选项
-f
,要创建的文件,或要解压的文件,-f
选项必须在所有选项中位置处于最后一个。 - 选项
-z
,gzip模式,不使用-z
就是普通的tarball格式。 - 选项
-C
,选择解压的目的地,用于解压模式,-C
选项单独使用,和解压所需的其它参数分开。 - tar压缩常用组合为:
- 将1.txt 2.txt 3.txt 压缩到test.tar文件内,
tar -cvf test.tar 1.txt 2.txt 3.txt
。 - 将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式,
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
。
- 将1.txt 2.txt 3.txt 压缩到test.tar文件内,
- tar解压常用组合为:
- 解压test.tar,将文件解压至当前目录,
tar -xvf test.tar
。 - 解压test.tar,将文件解压至指定目录(/home/soft),
tar -xvf test.tar -C /home/soft
。 - 以Gzip模式解压test.tar.gz,将文件解压至指定目录(/home/soft),
tar -zxvf test.tar.gz -C /home/soft
。
- 解压test.tar,将文件解压至当前目录,
zip命令
zip 命令用于压缩文件。zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。
语法:
1 | zip [-r] 参数1 参数2 ... 参数n |
- 选项
-r
,递归处理,将指定目录下的所有文件和子目录一并处理,被压缩的包含文件夹的时候,需要使用-r
选项。 - 将a.txt b.txt c.txt 压缩到test.zip文件内,
zip test.zip a.txt b.txt c.txt
。 - 将test、soft两个文件夹和a.txt文件,压缩到test.zip文件内,
zip -r test.zip test soft a.txt
。
unzip命令
unzip命令用于解压缩zip文件。unzip为.zip压缩文件的解压缩程序。
语法:
1 | unzip [-d] 参数 |
- 选项
-d
,指定要解压去的位置,同tar
的-C
选项。 - 参数,被解压的zip压缩包文件。
- 将test.zip解压到当前目录,
unzip test.zip
。 - 将test.zip解压到指定文件夹内(/home/soft),
unzip test.zip -d /home/soft
。
系统管理
su命令
su(Switch User)命令就是用于账户切换的系统命令。
语法:
1 | su [-] [USER] |
-
符号是可选的,表示是否在切换用户后加载环境变量,建议带上。- 参数:
USER
,用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root。 - 切换用户后,可以通过
exit
命令退回上一个用户,也可以使用快捷键:ctrl + d
。 - 使用普通用户,切换到其它用户需要输入密码,如切换到root用户。
- 使用root用户切换到其它用户,无需密码,可以直接切换。
sudo命令
sudo命令为普通的命令授权,临时以root身份执行。在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权。但是并不是所有的用户,都有权利使用sudo,需要为普通用户配置sudo认证。
语法:
1 | sudo command |
- 为普通用户配置sudo认证:
- 切换到root用户,执行
visudo
命令,会自动通过vi编辑器打开:/etc/sudoers
- 在文件的最后添加:
用户名 ALL=ALL NOPASSWD:ALL
,其中最后的NOPASSWD:ALL 表示使用sudo命令,无需输入密码,通过 wq 保存。
- 切换到root用户,执行
exit命令
exit命令用于退出目前的shell。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
语法:
1 | exit [状态值] |
- 退出终端,
exit
。
whoami
whoami命令用于显示自身用户名称。显示自身的用户名称,本指令相当于执行id -un
指令。
语法:
1 | whoami |
- 显示用户名,
whoami
。
useradd命令
useradd 命令用于建立用户帐号。使用 useradd
指令所建立的帐号,实际上是保存在/etc/passwd
文本文件中。
语法:
1 | useradd [-g -d] 用户名 |
- 选项:
-g
,指定用户的组,不指定-g
,会创建同名组并自动加入,指定-g
需要组已经存在,如已存在同名组,必须使用-g
。 - 选项:
-d
,指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
。 - 新建了一个用户gem,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组,为登录名gem产生一个主目录,/home/gem。
useradd –d /home/gem -g group –G adm,root gem
。
userdel命令
userdel命令用于删除用户帐号。
语法:
1 | userdel [-r] 用户名 |
- 选项:
-r
,删除用户的主目录,不使用-r
,删除用户时,用户的主目录保留。
usermod命令
usermod命令用于修改用户帐号。
语法:
1 | usermod 选项 用户名 |
- 常用的选项包括
-c
,-d
,-g
,-G
等,这些选项的意义与useradd
命令中的选项一样,可以为用户指定新的资源值。 - 将用户sam的主目录改为/home/z,用户组改为developer,
usermod -d /home/z –g developer sam
。
id命令
id命令用于显示用户的ID,以及所属群组的ID。
语法:
1 | id [-gGnru] [用户名] |
- 选项
-g
,显示用户所属群组的ID。 - 选项
-G
,显示用户所属附加群组的ID。 - 选项
-n
,显示用户,所属群组或附加群组的名称。 - 选项
-u
,显示用户ID。 - 参数:用户名,被查看的用户,如果不提供则查看自身。
- 显示所有群组的 ID,
id -G
。 - 显示指定用户信息,
id newlinux
。
groupadd命令
groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
语法:
1 | groupadd [-g gid] group |
- 选项
-g
,指定新建工作组的 id。 - 参数:
group
,创建的工作组名。 - 向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1,
groupadd group1
。 - 向系统中增加了一个新组group2,同时指定新组的组标识号是101,
groupadd -g 101 group2
。
groupdel命令
groupdel命令用于删除群组。
语法:
1 | groupdel [群组名称] |
- 从系统中删除组group1,
groupdel group1
。
groupmod命令
groupmod命令用于更改群组识别码或名称。
语法:
1 | groupmod [-g <群组识别码>][<新群组名称>][群组名称] |
- 选项
-g
,指定修改后的工作组 id。 - 参数:新群组名称,设置欲使用的群组名称。
- 参数:群组名称,要修改的群组名称。
- 将组group2的组标识号修改为102,
groupmod -g 102 group2
。 - 将组group2的标识号改为10000,组名修改为group3,
groupmod –g 10000 -n group3 group2
。
newgrp 命令
newgrp 命令用于登入另一个群组。如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限,前提条件是其他用户组确实是该用户的主组或附加组。
语法:
1 | newgrp [群组名称] |
- 将当前用户切换到root用户组,
newgrp root
。
getent命令
getent(get entries)命令用来查看系统的数据库中的相关记录。其功能是用于查看系统数据库中的记录信息。即便这些数据库不是本地的,类似于LDAP或者NIS也可以使用getent命令进行查看。可用于查看用户信息、域名信息等。
语法:
1 | getent database [参数] |
- 支持的database数据库: group, hosts, networks, passwd,services等,支持的数据库被配置在
/etc/nsswitch.conf
中。 - 查看本地的密码文件(/etc/passwd)中所有用户信息,
getent passwd
,返回的共有7份信息,分别是:用户名:密码(x):用户ID:组ID:描述信息:HOME目录:执行终端
。 - 查看本地的密码文件(/etc/passwd)中包含的指定用户信息,
getent passwd newlinux
。 - 查看本地的组文件(/etc/group)中所有组信息,
getent group
,返回的共包含3份信息,分别是:组名称:组认证(显示为x):组ID
。 - 查看本地的组文件(/etc/group)中包含的指定组信息,
getent root
。 - 查看本地的主机文件(/etc/hosts)中包含的指定域名信息:
getent hosts xxx.com
。 - 获取所有服务的列表:
getent services
。 - 获取指定服务的列表:
getent services 80
。
free命令
free命令用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
语法:
1 | free [-h] |
- 选项:
-h
,以合适的单位显示内存使用情况。 - 百分比查内存占用率,
free | grep Mem | awk '{print $3/$2 * 100.0}'
。
ps命令
ps(英文全拼:process status)命令用于显示当前进程的状态。
语法:
1 | ps [-A -e -f] |
- 选项:
-A
,列出所有的进程,显示部分信息PID、TTY、TIME、CMD
。 - 选项:
-e
,显示出全部的进程。 - 选项:
-f
,以完全格式化的形式展示信息(展示全部信息)。 - 显示所有进程信息,连同命令行,
ps -ef
。 - 查找指定进程格式,
ps -ef | grep 进程关键字
,进程关键字不仅仅过滤名称,进程号,用户ID,端口等,都可以被grep过滤。 - 结果列表显示从左到右分别是:
UID
:进程所属的用户ID。PID
:进程的进程号ID。PPID
:进程的父ID(启动此进程的其它进程)。C
:此进程的CPU占用率(百分比)。STIME
:进程的启动时间。TTY
:启动此进程的终端序号,如显示?,表示非终端启动。TIME
:进程占用CPU的时间。CMD
:进程对应的名称或启动路径或启动命令。
kill命令
kill命令用于删除执行中的程序或工作。
kill 可将指定的信息送至程序。预设的信息为SIGTERM(15)
,可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)
信息尝试强制删除程序。程序或工作的编号可利用ps
指令或jobs
指令查看。
语法:
1 | kill [-s <信息名称或编号>][程序] |
- 选项:
-s <信息名称或编号>
,指定要送出的信息。 - 参数:[程序] ,[程序]可以是程序的PID或是PGID,也可以是工作编号。
- 使用
kill -l
命令列出所有可用信号。最常用的信号是:1(HUP)
:重新加载进程。9(KILL)
:杀死一个进程。15(TERM)
:正常停止一个进程。
- 强制杀死进程号10101,
kill -KILL 10101
效果等同于kill -9 10101
。 - 杀死指定用户所有进程:
- 方法一 过滤出newlinux用户进程,
kill -9 $(ps -ef | grep newlinux)
。 - 方法二,
kill -u newlinux
。
- 方法一 过滤出newlinux用户进程,
top命令
top命令用于实时显示 process 的动态,可查看CPU、内存使用情况,默认每5秒刷新一次。直接输入top即可,按q
或ctrl + c
退出。
语法:
1 | top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] |
- 选项
-p
,只显示某个进程的信息。 - 选项
-d
,设置刷新时间,默认是5s。 - 选项
-c
,显示产生进程的完整命令,默认是进程名。 - 选项
-n
,指定刷新次数,比如top -n 3:刷新输出3次后退出。 - 选项
-b
,以非交互非全屏模式运行,以批次的方式执行top,一般配合-n
指定输出几次统计信息,将输出重定向到指定文件,比如top -b -n 3 > /tmp/top.tmp
。 - 选项
-i
,不显示任何闲置(idle)或无用(zombie)的进程。 - 选项
-u
,查找特定用户启动的进程。
top命令内容详解:
第一行:
top
:命令名称17:02:25
:当前系统时间up 1:14
:启动了1小时14分钟2 users
:2个用户登录load average
:1、5、15分钟负载load average:0.34,0.30,0.32
:1分钟平均负载0.34,5分钟平均负载0.30,15分钟负载0.32
第二行:描述的是进程的相关信息
Tasks
:任务168 total
:168个进程1 running
:1个进程子在运行167 sleeping
:167个进程睡眠0 stopped
:0个停止进程0 zombie
:0个僵尸进程
第三行:描述的是CPU的相关信息
%Cpu(s)
:CPU使用率us
:用户CPU使用率sy
:系统CPU使用率ni
:高优先级进程占用CPU时间百分比id
:空闲CPU率wa
:IO等待CPU占用率hi
:CPU硬件中断率si
:CPU软件中断率st
:强制等待占用CPU率
第四、五行:描述的是内存的相关信息
Kib Mem
:物理内存,- `total:总量
free
:空闲used
:使用buff/cache
:buff和cache占用
- `KibSwap:虚拟内存(交换空间)
total
:总量free
:空闲used
:使用buff/cache
:buff和cache占用
PID
,进程id。USER
,进程所属用户。PR
,进程优先级,越小越高。NI
,负值表示高优先级,正表示低优先级。VIRT
,进程使用虚拟内存,单位KB。RES
,进程使用物理内存,单位KB。SHR
,进程使用共享内存,单位KB。S
,进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)。%CPU
,进程占用CPU率。%MEM
,进程占用内存率。TIME+
,进程使用CPU时间总计,单位10毫秒。COMMAND
,进程的命令或名称或程序文件路径。
当top以交互式运行(非-b选项启动),可以用以下交互式命令进行控制:
按键 | 功能 |
---|---|
h |
会显示帮助画面 |
c |
会显示产生进程的完整命令,等同于-c参数,再次按下c键,变为默认展示 |
f |
可以选择需要展示的项目 |
M |
根据驻留内存大小(RES)排序 |
P |
根据CPU使用百分比大小进行排序 |
T |
根据时间/累计时间进行排序 |
E |
切换顶部内存显示单位 |
e |
切换进程内存显示单位 |
l |
切换显示平均负载和启动时间信息 |
i |
不显示闲置或无用的进程,等同于-i参数,再次按下,变为默认显示 |
t |
切换显示CPU状态信息 |
m |
切换显示内存信息 |
systemctl命令
systemctl命令是一个系统管理守护进程、工具和库的集合,用于取代System V
、service
和chkconfig
命令,初始进程主要负责控制systemd系统和服务管理器。该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令。
Linux系统很多软件(内置或第三方)均支持使用systemctl
命令控制:启动、停止、开机自启,能够被systemctl管理的软件,一般也称之为:服务。
systemctl
命令管理的服务在 /usr/lib/systemd/system
查看。
语法:
1 | systemctl [start | stop | restart | status | enable | disable] 服务名 |
- 选项
start
,启动。 - 选项
stop
,关闭。 - 选项
status
,查看状态。 - 选项
enable
,开启开机自启。 - 选项
disable
,关闭开机自启。 - 列出所有可用单元 ,grep可以进行过滤,
systemctl list-unit-files[ | grep 服务名]
。
date命令
date命令可以用来显示或设定系统的日期与时间。当以root身份更改了系统时间之后,记得以 clock -w
来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续保持最新的正确值。
语法:
1 | date [-d datestr] [-s datestr] [+格式化字符串] |
-d
按照给定的字符串显示日期,字符串不能是'now'
,一般用于日期计算。-s
根据字符串设置系统时间。- 参数:格式化字符串:通过特定的字符串标记,来控制显示的日期格式。
%Y
,年。%y
,年份后两位数字 (00..99)。%m
,月份 (01..12)。%d
,日 (01..31)。%H
,小时 (00..23)。%M
,分钟 (00..59)。%S
,秒 (00..60)。%s
,自 1970-01-01 00:00:00 UTC 到现在的秒数。
- 使用date命令本体,无选项,直接查看时间,
date
,输出结果为Tue May 24 00:00:00 CST
2022。 - 格式化输出,
date +"%Y-%m-%d"
,输出结果为2077-02-07
。 - 时间格式转换,
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
,输出结果为2009/12/12 00:00.00
。 - 输出昨天日期,
date -d "1 day ago" +"%Y-%m-%d"
,输出结果为2077-02-06
。 - 输出 2 秒后的时间,
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
,输出结果为2012-11-20 14:21.31
。 - 设置当前时间,只有root权限才能设置,其他只能查看,
date -s
。 - 设置日期为20770207,这样会把具体时间设置成00:00:00,
date -s 20770207
。 - 设置具体时间,不会对日期做更改,
date -s 01:01:01
。 - 设置全部时间。
date -s "01:01:01 2012-05-23"
。date -s "01:01:01 20120523"
。date -s "2012-05-23 01:01:01"
。date -s "20120523 01:01:01"
。
网络通讯
ifconfig命令
ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置。如无法使用ifconfig命令,可以安装:yum -y install net-tools
。
语法:
1 | ifconfig [网络设备][down up][<hw<网络设备类型><硬件地址>][IP地址] |
- 显示网络设备信息,
ifconfig
。 - 关闭指定网卡,
ifconfig eth0 down
。 - 启动指定网卡,
ifconfig eth0 up
。 - 关闭网卡并修改MAC地址,
ifconfig eth1 hw ether 00:1D:1C:1D:1E
,修改成功之后启动该网卡。 - 给eth0网卡配置IP地址,
ifconfig eth0 192.168.1.117
。 - 给eth0网卡配置IP地址,配置子网掩码,,配置广播地址,
ifconfig eth0 192.168.1.117 netmask 255.255.255.0 broadcast 192.168.1.255
。
ping 命令
ping 命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法:
1 | ping [-c<完成次数>][主机名称或IP地址] |
- 选项:
-c
,检查的次数,不使用-c
选项,将无限次数持续检查。 - 参数:ip或主机名,被检查的服务器的ip地址或主机名地址。
- 检查到127.0.0.1是否联通,并检查3次,
ping -c 127.0.0.1
。
wget命令
wget是非交互式的文件下载器,可以在命令行内下载网络文件。
语法:
1 | wegt [-b] url |
- 选项:
-b
,可选,后台下载,会将日志写入到当前工作目录的wget-log文件,通过tail命令可以监控后台下载进度:tail -f wget-log
。 - 参数:
url
,下载链接。 - 通过wegt后台下载软件安装包,
wegt -b http://xxx.xxx.xxx/xxx.tar.gz
。 - 无论下载是否完成,都会生成要下载的文件,如果下载未完成,请及时清理未完成的不可用文件。
curl命令
curl可以发送http网络请求,可用于:下载文件、获取信息等。
语法:
1 | curl [-O] url |
- 选项:
-O
,用于下载文件,当url是下载链接时,可以使用此选项保存文件。 - 参数:
url
,要发起请求的网络地址。 - curl命令行下直接获取当前IP信息,向cip.cc发起网络请求,
curl cip.cc
。 - 通过curl下载软件安装包,
curl -O http://xxx.xxx.xxx/xxx.tar.gz
。
netstat命令
netstat 命令用于显示网络状态。利用netstat指令可得知整个Linux系统的网络情况。
语法:
1 | netstat [-anptu] |
- 选项:
-a
,显示所有连线中的Socket。 - 选项:
-n
,直接使用IP地址,而不通过域名服务器。 - 选项:
-p
,显示正在使用Socket的程序识别码和程序名称。 - 选项:
-t
,显示TCP传输协议的连线状况。 - 选项:
-u
,显示UDP传输协议的连线状况。 - 查看本机指定端口号的占用情况,
netstat -anp | grep 端口号
。 - Linux系统可以支持65535个端口,这6万多个端口分为3类进行使用:
- 公认端口:1~1023,用于系统内置或常用知名软件绑定使用,如SSH服务的22端口,HTTPS服务的443端口。
- 注册端口:1024~49151,用于松散绑定使用(用户自定义)。
- 动态端口:49152~65535,用于临时使用(多用于出口)。
其他命令
tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename
会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
语法:
1 | tail [参数] [文件] |
-n<行数>
选项, 显示文件的尾部 n 行内容。-f
选项,循环读取。- 显示 notes.log 文件的最后 10 行,
tail notes.log
,不使用fn
参数,默认显示最后 10 行。 - 查看notes.log文件的尾部3行:
tail -3 notes.log
。 - 实时查看notes.log文件末尾100行的内容,
tail -fn 100 notes.log
。
iostat命
iostat主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。
语法:
1 | iostat [-x] [num1] [num2] |
- 选项:
-x
,显示更多信息。 - 参数:
num1
:数字,刷新间隔。 - 参数:
num2
:数字,刷新几次。
sar命令
可以使用sar命令查看网络的相关统计。
语法:
1 | sar -n DEV num1 num2 |
- 选项:
-n
,查看网络,DEV表示查看网络接口。 num1
:刷新间隔(不填就查看一次结束)。num2
:查看次数(不填无限次数)。
man命令
man(英文全拼:Manual,手册)命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。
语法:
1 | man [命令] |
快捷键:
q
,退出。Enter
,按行下翻。Space
,按页下翻。b
,上翻一页。- 查看cp命令的帮助信息,
man cp
。 - 查看/etc/passwd文件的信息,
man /etc/passwd
。 - 任何命令都支持:
--help
选项, 可以通过这个选项,查看命令的帮助。如:ls --help
, 会列出ls命令的帮助文档。
hostname命令
可以通过hostname命令来查看本机的hostname。也可以直接cat /etc/hostname
查看。
语法:
1 | hostname |
- hostname查看主机名,
hostname
。 - 临时修改主机名,关机后失效,
hostname newHostname
。 - 永久修改主机名:
- 修改配置文件
/etc/hostname
保存退出,vi /etc/hostname
,进入vi,删除旧主机名,输入新主机名newHostname,退出保存,reboot
重启生效。 - 使用命令
hostnamectl
,修改主机名(需root),hostnamectl set-hostname newHostname
。
- 修改配置文件
管道符
写法:|
功能:将符号左边的结果,作为符号右边的输入。
- 将cat a.txt的结果,作为grep命令的输入,用来过滤it关键字,
cat a.txt | grep it
。 - 可以支持嵌套使用,
cat it.txt | grep keyword | grep it
。 - 过滤ls的结果,
ls | grep Desktop
- 过滤结果,只找路径带有/usr/lib64的结果,
find / -name “test” | grep “/usr/lib64”
。
vi\vim文本编辑器
vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器,vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
- 命令模式:命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模型下,不能自由进行文本编辑。
- 输入模式:也就是所谓的编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑。
- 底线命令模式:以
:
开始,通常用于文件的保存、退出。
命令模式
如果需要通过vi/vim编辑器编辑文件,通过如下命令任意一个均可:
- 打开或新建文件,并将光标置于第一行首,
vi filename
。 - 打开或新建文件,并将光标置于第一行首,
vim filename
。 - 打开文件,并将光标置于第n行首,
vim +n filename
。 - 打开文件,并将光标置于最后一行首 ,
vim + filename
。 - 打开文件,并将光标置于第一个与pattern匹配的串处,
vim +/pattern filename
。 - 在上次正用vi编辑时发生系统崩溃,恢复filename,
vim -r filename
。 - 打开多个文件,依次进行编辑,
vim filename....filename
。
刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i
,并不会输入一个字符,i
被当作了一个命令。 以下是常用的几个命令:
i
切换到输入模式,以输入字符。x
删除当前光标所在处的字符。:
切换到底线命令模式,以在最底一行输入命令。
命令模式下的一些常见快捷键
- 进入输入或取代的编辑模式
命令 | 描述 |
---|---|
i |
在当前光标位置,进入输入模式 |
a |
在当前光标位置之后,进入输入模式 |
I |
在当行开头,进入输入模式 |
A |
在当行结尾,进入输入模式 |
o |
在当前光标下一行,进入输入模式 |
O |
在当前光标上一行,进入输入模式 |
esc |
返回命令模式 |
- 移动光标的方法和搜索替换
命令 | 描述 |
---|---|
k |
上 |
j |
下 |
h |
左 |
l |
右 |
0 |
移动到当行开头 |
$ |
移动到当行结尾 |
gg |
跳到首行 |
G |
跳到尾行 |
pageup(PgUp) |
向上翻页 |
pagedown(PgDn) |
向下翻页 |
/ |
进入搜索模式 |
n |
向下继续搜索 |
N |
向上继续搜索 |
- 删除、复制与粘贴
命令 | 描述 |
---|---|
dd |
删除当前行 |
ndd |
向下删除n行 |
yy |
复制当前行 |
nyy |
向下复制n行 |
p |
粘贴 |
u |
撤销 |
ctrl + r |
反向撤销 |
dG |
向下删除尾行(向下的所有) |
dgg |
向上删除到首行(向上的所有) |
d0 |
删除到本行开头 |
d$ |
删除到本行结尾 |
输入模式
在命令模式下按下i
就进入了输入模式。在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:
就进入了底线命令模式。
- 指令行的储存、离开等指令
命令 描述 :wq
保存并退出 :q
仅退出 :q!
强制退出 :w
仅保存 :set nu
显示行号 set paste
设置粘贴模式
软件安装
软件安装,CentOS系统和Ubuntu是使用不同的包管理器。CentOS使用yum
管理器,Ubuntu使用apt
管理器。yum
和 apt
均需要root权限,yum
和 apt
均需联网管理软件安装。
yum命令
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHa 以及SUSE中的Shell前端软件包管理器。
基于RPM
包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法:
1 | yum [options] [command] [package ...] |
- 选项
options
,可选,选项包括-h
(帮助),-y
(当安装过程提示选择全部为 “yes”),-q
(不显示安装的过程)等。 - 选项
command
,要进行的操作,install
(安装),选项remove
(卸载),选项search
(搜索)等。 - 参数
package ...
,软件名称。 - yum常用命令:
- 列出所有可更新的软件清单命令,
yum check-update
。 - 更新所有软件命令,
yum update
。 - 仅安装指定的软件命令,
yum install <package_name>
。 - 仅更新指定的软件命令,
yum update <package_name>
。 - 列出所有可安裝的软件清单命令,
yum list
。 - 删除软件包命令,
yum remove <package_name>
。 - 查找软件包命令,
yum search <keyword>
。 - 清除缓存目录下的软件包,
yum clean packages
。 - 清除缓存目录下的 headers,
yum clean headers
。 - 清除缓存目录下旧的 headers,
yum clean oldheaders
。 - 清除缓存目录下的软件包及旧的 headers,
yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
。
- 列出所有可更新的软件清单命令,
- 更换yum源:
- 首先备份
/etc/yum.repos.d/CentOS-Base.repo
,mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
。 - 下载对应版本repo文件, 放入
/etc/yum.repos.d/
文件夹下。 - 运行以下命令生成缓存,
yum clean all
,yum makecache
。
- 首先备份
apt命令
apt(Advanced Packaging Tool)是一个在Debian和Ubuntu中的Shell前端软件包管理器。
apt命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法:
1 | apt [options] [command] [package ...] |
- 选项
options
,可选,选项包括-h
(帮助),-y
(当安装过程提示选择全部为 “yes”),-q
(不显示安装的过程)等。 - 选项
command
,要进行的操作,install
(安装),选项remove
(卸载),选项search
(搜索)等。 - 参数
package ...
,软件名称。 - apt常用命令:
- 列出所有可更新的软件清单命令,
sudo apt update
。 - 升级软件包,
sudo apt upgrade
。 - 列出可更新的软件包及版本信息,
apt list --upgradeable
。 - 升级软件包,升级前先删除需要更新软件包,
sudo apt full-upgrade
。 - 安装指定的软件命令,
sudo apt install <package_name>
。 - 安装多个软件包,
sudo apt install <package_1> <package_2> <package_3>
。 - 更新指定的软件命令,
sudo apt update <package_name>
。 - 显示软件包具体信息,例如,
版本号,安装大小,依赖关系等等,
sudo apt show`。 - 删除软件包命令,
sudo apt remove <package_name>
。 - 清理不再使用的依赖和库文件: sudo apt autoremove`。
- 移除软件包及配置文件: sudo apt purge
`。 - 查找软件包命令,
sudo apt search <keyword>
。 - 列出所有已安装的包,
apt list --installed
。 - 列出所有已安装的包的版本信息,
apt list --all-versions
。
- 列出所有可更新的软件清单命令,
小技巧
修改Linux时区
系统默认时区非中国的东八区。
使用root权限,执行如下命令,将系统自带的/etc/localtime
文件删除,并将/usr/share/zoneinfo/Asia/Shanghai
文件链接为/etc/localtime
文件即可,修改时区为东八区时区。
1 | rm -f /etc/localtime |
同步时间
可以通过ntp程序自动校准系统时间。安装ntp:yum -y install ntp
。
启动并设置开机自启:
systemctl start ntpd
systemctl enable ntpd
当ntpd启动后会定期的联网校准系统的时间。
也可以手动校准(需root权限),通过阿里云提供的服务网址配合ntpdate
命令(安装ntp后会附带这个命令)自动校准,执行以下命令ntpdate -u ntp.aliyun.com
。
域名解析
可以通过主机名找到对应计算机的IP地址,这就是主机名映射(域名解析)。
先通过系统本地的记录去查找,如果找不到就联网去公开DNS服务器去查找。
系统本地的记录:
- Windows看,
C:\Windows\System32\drivers\etc\hosts
。 - Linux看,
/etc/hosts
。
强制停止
Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl + c
。
命令输入错误,也可以通过快捷键ctrl + c
,退出当前输入,重新输入。
退出或登出
可以通过快捷键ctrl + d
,退出账户的登录,或者退出某些特定程序的专属页面,但不能用于退出vi/vim。
历史命令搜索
- 可以通过
history
命令,查看历史输入过的命令。 - 可以通过
!命令前缀
,自动执行上一次匹配前缀的命令,如输入!cr
自动执行上一次clear
清屏命令。 - 可以通过快捷键
ctrl + r
,输入内容去匹配历史命令,如果搜索到的内容是需要的,那么回车键可以直接执行,使用键盘左右键,可以得到此命令(不执行)。
光标移动快捷键
ctrl + a
,跳到命令开头ctrl + e
,跳到命令结尾ctrl + 键盘左键
,向左跳一个单词ctrl + 键盘右键
,向右跳一个单词
清屏
通过快捷键ctrl + l
,可以清空终端内容,或通过命令clear
得到同样效果。