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
2
3
df [选项]... [FILE]...
du [-ah][--max-depth=<目录层数>][目录或文件]

  • 选项:-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
2
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 wx权限,即-wx
4 仅有r权限,即r--
5 rx权限,即r-x
6 rw权限,即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
2
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
  • 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

zip命令

zip 命令用于压缩文件。zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。

语法:

1
2
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
2
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 保存。

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

top命令

top命令用于实时显示 process 的动态,可查看CPU、内存使用情况,默认每5秒刷新一次。直接输入top即可,按qctrl + 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 Vservicechkconfig命令,初始进程主要负责控制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
2
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 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

命令模式下的一些常见快捷键

  1. 进入输入或取代的编辑模式
命令 描述
i 在当前光标位置,进入输入模式
a 在当前光标位置之后,进入输入模式
I 在当行开头,进入输入模式
A 在当行结尾,进入输入模式
o 在当前光标下一行,进入输入模式
O 在当前光标上一行,进入输入模式
esc 返回命令模式
  1. 移动光标的方法和搜索替换
命令 描述
k
j
h
l
0 移动到当行开头
$ 移动到当行结尾
gg 跳到首行
G 跳到尾行
pageup(PgUp) 向上翻页
pagedown(PgDn) 向下翻页
/ 进入搜索模式
n 向下继续搜索
N 向上继续搜索
  1. 删除、复制与粘贴
命令 描述
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,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:就进入了底线命令模式。

  1. 指令行的储存、离开等指令
    命令 描述
    :wq 保存并退出
    :q 仅退出
    :q! 强制退出
    :w 仅保存
    :set nu 显示行号
    set paste 设置粘贴模式

软件安装

软件安装,CentOS系统和Ubuntu是使用不同的包管理器。CentOS使用yum管理器,Ubuntu使用apt管理器。yumapt均需要root权限,yumapt均需联网管理软件安装。

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.repomv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    • 下载对应版本repo文件, 放入/etc/yum.repos.d/文件夹下。
    • 运行以下命令生成缓存,yum clean allyum 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
2
rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /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得到同样效果。