整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

你知道这些Linux命令吗?165条技术人需要了解的Linux系统命令

源:banana 童

www.cnblogs.com/bananaaa/p/7774467.html

linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与之前的 DOS 命令类似。linux 命令在系统中有两种类型:内置 Shell 命令和 Linux 命令。

1.线上查询及帮助命令(2个)

man

查看命令帮助,命令的词典,更复杂的还有 info,但不常用。

help

查看 Linux 内置命令的帮助,比如 cd 命令

2.文件和目录操作命令 (18 个)

ls

全拼 list,功能是列出目录的内容及其内容属性信息。

cd

全拼 change directory,功能是从当前工作目录切换到指定的工作目录。

cp

全拼 copy,其功能为复制文件或目录。

find

查找的意思,用于查找目录及目录下的文件。

mkdir

全拼 make directories,其功能是创建目录。

mv

全拼 move,其功能是移动或重命名文件。

pwd

全拼 print working directory,其功能是显示当前工作目录的绝对路径。

rename

用于重命名文件。

rm

全拼 remove,其功能是删除一个或多个文件或目录。

rmdir

全拼 remove empty directories,功能是删除空目录。

touch

创建新的空文件,改变已有文件的时间戳属性。

tree

功能是以树形结构显示目录下的内容。



dirname

显示文件或目录路径。

chattr

改变文件的扩展属性。

lsattr

查看文件扩展属性。

file

显示文件的类型。

md5sum

计算和校验文件的 MD5 值。

3.查看文件及内容处理命令(21 个)

cat

全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。

tac

tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。

more

分页显示文件内容。

less

分页显示文件内容,more 命令的相反用法。

head

显示文件内容的头部。

tail

显示文件内容的尾部。

cut

将文件的每一行按指定分隔符分割并输出。

split

分割文件为不同的小片段。

paste

按行合并文件内容。

sort

对文件的文本内容排序。

uniq

去除重复行。oldboy

wc

统计文件的行数、单词数或字节数。

iconv

转换文件的编码格式。

dos2unix

将 DOS 格式文件转换成 UNIX 格式。

diff

全拼 difference,比较文件的差异,常用于文本文件。

vimdiff

命令行可视化文件比较工具,常用于文本文件。

rev

反向输出文件内容。

grep/egrep

过滤字符串,三剑客老三。

join

按两个文件的相同字段合并。

tr

替换或删除字符。

vi/vim

命令行文本编辑器。

4.文件压缩及解压缩命令(4 个)

tar

打包压缩。oldboy

unzip

解压文件。

gzip

gzip 压缩工具。

zip

压缩工具。

5.信息显示命令(11 个)

uname

显示操作系统相关信息的命令。

hostname

显示或者设置当前系统的主机名。

dmesg

显示开机信息,用于诊断系统故障。

uptime

显示系统运行时间及负载。

stat

显示文件或文件系统的状态。

du

计算磁盘空间使用情况。

df

报告文件系统磁盘空间的使用情况。

top

实时显示系统资源使用情况。

free

查看系统内存。

date

显示与设置系统时间。

cal

查看日历等时间信息。

6.搜索文件命令(4 个)

which

查找二进制命令,按环境变量 PATH 路径查找。

find

从磁盘遍历查找文件或目录。

whereis

查找二进制命令,按环境变量 PATH 路径查找。

locate

从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。

7.用户管理命令(10 个)

useradd

添加用户。

usermod

修改系统已经存在的用户属性。

userdel

删除用户。

groupadd

添加用户组。

passwd

修改用户密码。

chage

修改用户密码有效期限。

id

查看用户的 uid,gid 及归属的用户组。

su

切换用户身份。

visudo

编辑 / etc/sudoers 文件的专属命令。

sudo

以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。

8.基础网络操作命令(11 个)

telnet

使用 TELNET 协议远程登录。

ssh

使用 SSH 加密协议远程登录。

scp

全拼 secure copy,用于不同主机之间复制文件。

wget

命令行下载文件。

ping

测试主机之间网络的连通性。

route

显示和设置 linux 系统的路由表。

ifconfig

查看、配置、启用或禁用网络接口的命令。

ifup

启动网卡。

ifdown

关闭网卡。

netstat

查看网络状态。

ss

查看网络状态。

9.深入网络操作命令(9 个)

nmap

网络扫描命令。

lsof

全名 list open files,也就是列举系统中已经被打开的文件。

mail

发送和接收邮件。

mutt

邮件管理命令。

nslookup

交互式查询互联网 DNS 服务器的命令。

dig

查找 DNS 解析过程。

host

查询 DNS 的命令。

traceroute

追踪数据传输路由状况。

tcpdump

命令行的抓包工具。

10.有关磁盘与文件系统的命令(16 个)

mount

挂载文件系统。

umount

卸载文件系统。

fsck

检查并修复 Linux 文件系统。

dd

转换或复制文件。

dumpe2fs

导出 ext2/ext3/ext4 文件系统信息。

dump

ext2/3/4 文件系统备份工具。

fdisk

磁盘分区命令,适用于 2TB 以下磁盘分区。

parted

磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。

mkfs

格式化创建 Linux 文件系统。

partprobe

更新内核的硬盘分区表信息。

e2fsck

检查 ext2/ext3/ext4 类型文件系统。

mkswap

创建 Linux 交换分区。

swapon

启用交换分区。

swapoff

关闭交换分区。

sync

将内存缓冲区内的数据写入磁盘。

resize2fs

调整 ext2/ext3/ext4 文件系统大小。

11.系统权限及用户授权相关命令(4 个)

chmod

改变文件或目录权限。

chown

改变文件或目录的属主和属组。

chgrp

更改文件用户组。

umask

显示或设置权限掩码。

12.查看系统用户登陆信息的命令(7 个)

whoami

显示当前有效的用户名称,相当于执行 id -un 命令。

who

显示目前登录系统的用户信息。

w

显示已经登陆系统的用户列表,并显示用户正在执行的指令。

last

显示登入系统的用户。

lastlog

显示系统中所有用户最近一次登录信息。

users

显示当前登录系统的所有用户的用户列表。

finger

查找并显示用户信息。

13.内置命令及其它(19 个)

echo

打印变量,或直接输出指定的字符串

printf

将结果格式化输出到标准输出。

rpm

管理 rpm 包的命令。

yum

自动化简单化地管理 rpm 包的命令。

watch

周期性的执行给定的命令,并将命令的输出以全屏方式显示。

alias

设置系统别名。

unalias

取消系统别名。

date

查看或设置系统时间。

clear

清除屏幕,简称清屏。

history

查看命令执行的历史纪录。

eject

弹出光驱。

time

计算命令执行时间。

nc

功能强大的网络工具。

xargs

将标准输入转换成命令行参数。

exec

调用并执行指令的命令。

export

设置或者显示环境变量。

unset

删除变量或函数。

type

用于判断另外一个命令是否是内置命令。

bc

命令行科学计算器

14.系统管理与性能监视命令 (9 个)

chkconfig

管理 Linux 系统开机启动项。

vmstat

虚拟内存统计。

mpstat

显示各个可用 CPU 的状态统计。

iostat

统计系统 IO。

sar

全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。

ipcs

用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。

ipcrm

用来删除一个或更多的消息队列、信号量集或者共享内存标识。

strace

用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

ltrace

命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。

15.关机 / 重启 / 注销和查看系统信息的命令(6 个)

shutdown

关机。

halt

关机。

poweroff

关闭电源。

logout

退出当前登录的 Shell。

exit

退出当前登录的 Shell。

Ctrl+d

退出当前登录的 Shell 的快捷键。

16.进程管理相关命令(15 个)

bg

将一个在后台暂停的命令,变成继续执行 (在后台执行)。

fg

将后台中的命令调至前台继续运行。

jobs

查看当前有多少在后台运行的命令。

kill

终止进程。

killall

通过进程名终止进程。

pkill

通过进程名终止进程。

crontab

定时任务命令。

ps

显示进程的快照。

pstree

树形显示进程。

nice/renice

调整程序运行的优先级。

nohup

忽略挂起信号运行指定的命令。

pgrep

查找匹配条件的进程。

runlevel

查看系统当前运行级别。

init

切换运行级别。

service

启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

Linux常用命令速查手册】关注【入门小站】,后台回复 「1001」 自取。

route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。

在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

命令语法

route(选项)(参数)

命令选项

  • -A:设置地址类型;
  • -C:打印将Linux核心的路由缓存;
  • -v:详细信息模式;
  • -n:不执行DNS反向查找,直接显示数字形式的IP地址;
  • -e:netstat格式显示路由表;
  • -net:到一个网络的路由表;
  • -host:到一个主机的路由表。

命令参数

  • add:增加指定的路由记录;
  • del:删除指定的路由记录;
  • target:目的网络或目的主机;
  • gw:设置默认网关;
  • mss:设置TCP的最大区块长度(MSS),单位MB;
  • window:指定通过路由表的TCP连接的TCP窗口大小;
  • dev:路由记录所表示的网络接口。

显示当前路由

> route

显示当前路由表(显示ip地址)

> route -n

route -n不执行DNS反向查找,直接显示数字形式的IP地址,列出速度会比route快

字段说明

含义

Destination

目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)

Gateway

网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关

Genmask

Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0

Flags

标记,含义参考表格后面的解释

Metric

路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)

Ref

路由项引用次数 (不在Linux内核中使用。)

Use

此路由项被路由软件查找的次数

Iface

网卡名字,例如 eth0

Flags 含义

  • U 路由是活动的
  • H 目标是个主机
  • G 需要经过网关
  • R 恢复动态路由产生的表项
  • D 由路由的后台程序动态地安装
  • M 由路由的后台程序修改
  • ! 拒绝路由

主机路由

路由表中指向单个 IP 地址或主机名的路由记录,其 Flags 字段为 H。下面示例中,对于 10.0.0.8 这个主机,通过网关 192.168.0.1 网关路由:

> route add -net 10.0.0.8 gateway 192.168.0.1 netmask 255.255.255.255 dev eth0
> route -n 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.8        192.168.0.1     255.255.255.255 UGH   0      0        0 eth0

网络路由

主机可以到达的网络。下面示例中,对于10.0.0.0/24这个网络,通过网关192.168.0.1网关路由:

> route add -net 10.0.0.0/24 gateway 192.168.0.1   dev eth0
> route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        192.168.0.1     255.255.255.0   UG    0      0        0 eth0

//或者

> route add -net 10.0.0.0 gateway 192.168.0.1  dev eth0

默认路由

当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由(默认网关)上。默认路由的 Destination 是 default 或 0.0.0.0。

> route
default         gateway         0.0.0.0         UG    100    0        0 eth0

添加同一个局域网的主机

不指定 gw 选项时,添加的路由记录不使用网关:

> route add -net 10.10.1.0 netmask 255.255.255.0 dev eth0
> route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.10.1.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0

屏蔽路由

> route add -net 10.10.1.0 netmask 255.255.255.0 reject
> route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.10.1.0       -               255.255.255.0   !     0      -        0 -

删除可用路由

> route del -net 10.0.0.0 netmask 255.255.255.0

同时匹配多个路由表时,执行一次删除一条

删除和添加设置默认网关

添加或删除默认网关时,Linux 会自动检查网关的可用性:

> route add default gw 192.168.1.1
SIOCADDRT: Network is unreachable
> route del default gw 192.168.1.1
SIOCDELRT: No such process

原文链接:https://rumenz.com/rumenbiji/linux-route.html
微信公众号:入门小站

【Linux常用命令速查手册】关注【入门小站】,后台回复 「1001」 自取。

信大家对 Linux 肯定是不陌生的,很多同学在学习 Linux 的时候比较头疼,觉得比较难学,命令多记不住,其实我们在学习 Linux 的时候,要把我们的大脑当成内存来用,而不是硬盘。

本文用的是 Ubuntu 操作系统,版本为 ubuntu-21.04-desktop-amd64.iso。下载地址:

http://mirrors.aliyun.com/ubuntu-releases/

用的远程连接工具为 FinalShell,下载地址:

http://www.hostbuf.com/t/988.html

帮助命令

Linux 中有很多命令,命令也有很多参数,那我们要怎么去学习呢?我们可以借助帮助文档,这里给大家介绍 3 个帮助命令:

  • man
  • help
  • info

man

man 是 manual 的缩写,有问题找男人,当时这是一句开玩笑的话。

man 命令的使用也非常简单,示例如下:

man ls

man 也是一条命令,分为 9 章,可以使用 man 命令获得 man 的帮助:

man man 

有的同学一定会好奇,为什么 man 命令给我们 9 章,这是因为命令和系统文件有的时候会出现重名的情况,比如:

passwd        # 这是命令
/etc/passwd    # 这是配置文件

如果不知道是命令还是配置文件,加上 -a 参数:

man -a passwd

这个时候会先查看 passwd 命令,退出后会显示:

可以根据提示继续查看,还是跳过当前的命令查看下一个命令:

help 帮助

这里我先要说一个内部命令和外部命令的概念,shell 自带的命令称为内部命令,其他的是外部命令。

那要怎么区分到底是内部还是外部呢?通过 type,后面跟上命令。

juran@juran-virtual-machine:~$ type cd
cd 是 shell 内建

如果是内部命令使用 help:

help cd

如果是外部命令使用 --help:

ls --help

info 帮助

info 帮助比 help 更详细,作为 help 的补充,大多数的情况下,我们使用 man 和 help 就足够了。

命令格式

终端的命令组成:

command [-options] [parameter]
  • command:命令名,
  • [-options]:选项,可以有零个、一个或者多个选项,多个选项可以合并,命令的选项用于调整命令功能
  • [parameter]:参数,可以有零个、一个 或者 多个参数,参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作
  • []:代表可选

查看目录命令

在 Linux 中一切皆文件,而且 Linux 中是没有盘符的概念的,所有的文件都在根目录下,接下来我们就来看下查看目录的命令有哪些。

ls 命令:列出文件夹中的内容,ls 只能查看一层目录信息:

ls     # 查看当前文件夹的内容

ls /bin    # 查看 bin 目录下的文件

ls 命令还有一些比较常用的选项:

命令选项

说明

-l

以列表方式显示

-h

件大小单位显示,默认是字节

-a

显示隐藏文件和隐藏目录

tree 命令:以树状方式显示目录信息,tree 可以查看多层目录信息。

tree        # 以树状方式显示当前目录信息

tree /bin    # 如果提示没有 tree 命令,可以通过 apt install tree 进行安装

查看当前目录路径

pwd 命令:查看当前目录路径,是 print work directory 的缩写。

切换目录命令

cd 命令:切换目录,是 change directory 的缩写。

cd 命令有几个常用的写法:

命令

说明

cd 目录

切换到指定目录

cd ~

切换到当前用户的主目录

cd ..

切换到上一级目录

cd .

切换到当前目录

cd -

切换到上一次目录

注意:cd 命令切换目录时,这个目录必须存在。cd 后面不写目录等价于 cd ~。

创建、删除文件及目录命令

touch 命令:创建指定文件

touch abc.txt        # Linux 里面文件可以没有后缀的

touch a b c            # 可以一次创建多个文件

mkdir 命令:创建目录(文件夹)

mkdir movie        # 创建 movie 目录

mkdir a b c        # 创建 a b c 目录

如果我想创建双层的目录,来试试:

mkdir movie/active        # 想要创建 movie 下面的 active 目录,而且 movie 目录是没有被创建过的

mkdir: 无法创建目录 “movie/active”: 没有那个文件或目录

这是我们可以通过选项 -p:

mkdir movie/active -p         # 选项和参数之间是没有顺序的,先写那个都可以

我们也可以通过查看帮助文档,man mkdir:

rm 命令:删除指定文件或者目录

rm 命令删除文件:

rm abc.txt    

rm 命令删除目录:

mkdir juran
rm juran
rm: 无法删除 'juran': 是一个目录

rm 命令是无法直接删除目录的,需要加上选项 -r:

rm -r juran 

可以通过 man rm 查看选项,下面来自帮助文档:

-r, -R, --recursive
    remove directories and their contents recursively

rmdir 命令:删除空目录

rmdir juran    # juran 目录是空目录

如果删除非空目录:

mkdir -p a/b
rmdir a
rmdir: 删除 'a' 失败: 目录非空

小结

  • touch 表示创建文件
  • mkdir 表示创建目录
  • rm 表示删除文件或者目录,如果删除目录需要使用 -r 选项,-r 表示递归删除目录及其内容
  • rmdir 表示删除空目录

复制、移动文件及目录命令

cp 命令:拷贝文件、拷贝目录

cp 命令复制文件:

cp abc.txt juran    # 复制 abc.txt 到 juran 目录下

cp命令复制目录

mkdir a b        # 创建 a 和 b 目录
cp a b            # 复制 a 目录到 b 目录
cp: 未指定 -r;略过目录'a'

如果想要复制目录的话,需要加上选项 -r:

cp -r a b

mv 命令:移动文件、移动目录、重命名

mv 命令移动文件:

mkdir abc        # 创建 abc 目录
touch abc.txt    # 创建 abc.txt 文件

mv abc.txt abc

mv 命令移动目录:

mkdir a b
mv a b

查看文件内容命令

cat 命令:文本内容显示到终端

查看文件内容:

touch a.txt
ls /bin > a.txt
cat a.txt

查看文件内容,并显示行号:

cat -n a.txt

查看多个文件:

cat a.txt b.txt

多个文件合并:

cat a.txt b.txt > c.txt

还有一个跟 cat 非常像的命令,tac 命令倒叙输出文本内容。

head 命令:查看文件开头

查看文件:

head a.txt        # 默认显示文件前 10 行内容

指定查看文件行数:

head -5 a.txt    # 显示文件前 5 行内容

tail 命令:查看文件结尾

tail a.txt        # 默认显示文件后 10 行内容

指定查看文件行数:

tail -5 a.txt        # 显示文件后 5 行内容

查看文件更新:

tail -f a.txt        

在另外一个终端,对文件进行更新:

echo "juran" > a.txt

wc 命令:统计文件内容信息

wc -l a.txt  # 统计文件行数

压缩和解压命令

tar 命令:压缩和解压缩命令

tar 命令可以打包,也可以打包压缩:

touch 1.txt 2.txt 3.txt

ls /bin > 1.txt
ls /etc > 2.txt
ls /lib > 3.txt

tar -cvf 3.tar ./*.txt

压缩成 .gz 文件:

tar -zcvf backup.tar.gz  *.txt

解压 .gz 文件:

tar -zxvf backup.tar.gz 

解压到指定的目录:

tar -zxvf backup.tar.gz -C bb/ 

压缩成 .bz2 文件:

tar -jcvf backup.bz2 *.txt

解压 .bz2 文件:

tar -jxvf backup.bz2

解压到指定目录:

tar -jxvf backup.bz2  -C bb/

压缩 zip 文件:

zip backup  *.txt   # 默认后缀是.zip

解压缩 zip 文件:

zip backup.zip -d /bb        # -d 指定文件夹

vim 的使用

我们在 Windows 中有记事本,也有像 pycharm 这样的代码编辑器。

那在 Linux 中我们用什么来写代码呢(如何优雅的装 X)?

用的就是 vim,大家可以把 vim 想象成 Windows 中的 pycharm,或者你熟悉的编辑器。

vim 安装

sudo apt-get install vim     # 这是 Ubuntu 的安装

sudo yum install vim     # 这是 centos 的安装

vim 的工作模式

  • 命令模式
  • 编辑模式
  • 末行模式

工作模式效果图:

编辑模式和末行模式之间不能直接进行切换,都需要通过命令模式来完成。

vim 的末行模式命令

  • :w 保存
  • :wq 保存退出
  • :x 保存退出
  • :q! 强制退出

vim 的常用命令

命令

说明

yy

复制光标所在行

p

粘贴

dd

删除/剪切当前行

V

按行选中

u

撤销

ctr+r

反撤销

>>

往右缩进

<<

往左缩进

:/搜索的内容

搜索指定内容

:%s/要替换的内容/替换后的内容/g

全局替换

:开始行数,结束行数 s/要替换的内容/替换后的内容

局部替换

.

重复上一次命令操作

G

回到最后一行

gg

回到第一行

数字+G

回到指定行

shift+6

回到当前行的行首

shift+4

回到当前行的行末

ctr+f

下一屏

ctr+b

上一屏

vim 交换文件解决办法

当我们用 vim 编辑一个文件,并写入一些数据,发生意外 vim 没有正常退出,这时再去编辑这个文件就会有如下提示:

这时我们可以直接选择编辑,但是下次打开的时候仍然会有这个提示。如果我们执行命令 ls -a 会看到一个隐藏文件 .a.txt.swp。

这个隐藏文件大家可以理解为 Linux 中的缓存文件,为了帮助我们恢复数据的。如果我们不需要的话,可以直接删除,删除掉这个文件后,再次编辑就不会有这个提示了。

用户和用户组管理

用户管理

Linux 支持多任务多用户,用户登录 Linux 之后可以做很多事件,这点和 Windows 很像,但是 Windows 不支持多用户。

useradd 命令:创建(添加)用户

useradd -m juran        # 如果是普通用户执行这个命令会报错

创建用户是需要管理员的权限才可以的。我们想要执行这个命令有两种方法

  • 切换到 root 用户下去执行
  • 在普通用户下,命令前面加上 sudo,这个命令在执行的时候就可以获得管理员的权限
sudo useradd -m juran

创建好的用户,还需要设置密码:

sudo passwd juran

设置好密码后,我们可以切换到 juran 用户下:

su juran

在 Ubuntu 中,默认切换到用户的 bash 是 /bash/sh,这样我们在敲命令的时候特别不方便,我们可以在创建用户的指定解释器:

sudo useradd -m juran -s /bin/bash

查看用户是否创建成功,可以查看 /etc/passwd 这个文件:

tail /etc/passwd

passwd 文件中的每项信息说明,以 root:x:0:0:root:/root:/bin/bash 为例:

第一个:用户名
第二个:密码占位符
第三个:uid, 用户 id
第四个:gid, 用户所在组 id
第五个:用户描述, 可选,
第六个:用户的主目录所在位置
第七个:用户所用 shell 的类型,一般由 bash 或者 sh,默认不设置是 sh 类型

创建用户,默认会自动创建一个同名的用户组,查看用户组是否创建成功,可以查看 /etc/group 这个文件。

group 文件中的每项信息说明,以 laowang:x:1001: 为例:

第一个:用户组名
第二个:用户组密码占位符,一般 Linux 系统的用户组都没有密码的
第三个:组 id

我们也可以通过 id 命令查看用户信息:

id laowang

uid=1001(laowang) gid=1001(laowang) 组=1001(laowang)
第一个: uid 表示用户 id
第二个: gid 表示用户组 id
第三个: 组 表示用户所在的用户组

创建用户流程

  1. useradd juran
  2. 系统读取 /etc/login.defs 和 /etc/default/useradd 两个文件中定义的规则创建新用户
  3. 向 /etc/passwd 和 /etc/group 文件中添加用户和组信息,想 /etc/shadow 和 /etc/gshadow 中添加密码信息
  4. 根据 /etc/default/useradd 文件中配置的信息创建用户家目录
  5. 把 /etc/skel 中所有的文件复制到新用户家目录中

在 Linux 系统中,UID 为 0,就是超级用户,如果设置管理员用户,可以改为 UID 为 0,系统用户 UID 为 1~999,Linux 安装的服务程序都会创建独有的用户负责运行,普通用户 UID 从 1000 开始,最大值 1000~60000 范围。

修改用户信息

创建的用户没有执行 sudo 命令的权限,那我们想要创建的用户也可以执行这个命令,怎么办呢?

我们可以修改用户的附加组,每个用户都有自己的主组,相当于亲爹,那附加组就相当于干爹,可以有很多个:

sudo usermod -g sudo jr

这时我们创建的用户,就可以执行 sudo 命令了。

用户组相关操作

为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。

一个公司中有多个部门,每个部门中又有很多员工,如果只想让员工访问本部的资源,则可以针对部门而非具体的员工来设置。开发部的小哥哥想要前台小姐姐的信息,肯定不能让他直接访问的。

groupadd 命令:创建(添加)用户组

创建用户前,我们可以先创建好用户组:

sudo groupadd dev        # 创建开发组

创建用户指定组:

sudo useradd -m laowang -g dev        

修改用户组:

sudo usermod -g dev laowang

删除用户组:

sudo groupdel dev        # 这时会报错

如果用户组下面有用户先删除用户在删除用户组。

文件权限命令

执行命令 ls -al 查看文件:

这里以文件 abc 来解释。

第一位:文件类型

  • - 表示文件
  • d 表示目录
  • l 表示链接

后面 9 位表示权限:

命令

解释

字母表示

rw-

所有者拥有读写权限

用 u 表示,代表 user

r--

所属组拥有读权限

用 g 表示,代表 group

r--

其他人拥有读权限

用 o 表示,代表 other

减少权限:

chmod u-r abc.txt        # 不能读取数据

chmod u-w abc.txt        # 不能写入数据

添加只读权限,减少写权限:

chmod u+r,u-w pwd.txt

chmod 数字法的使用,数字法就是 rwx 这些权限也可以用数字来代替。

权限

说明

r

可读,权限值是 4

w

可写,权限值是 2

x

可执行,权限值是 1

-

无任何权限,权限值是 0

数字法授予权限,所有者可读可写可执行,所属组可读可写,其他人可读:

chmod 764 abc.txt

网络管理

网络配置

网络配置最重要的两个工具就是 ifconfig 和 ip,这两个工具分别来自两个工具包 net-tools 和 iproute2。

ifconfig 命令:配置和显示 Linux 系统网卡的网络参数

ifconfig 通常是用来查看网卡的信息(比如 IP 地址、收发包及丢包情况等),以及配置网卡(如启停网卡,修改网卡 MTU,修改 IP、MAC 地址等)。

这个命令需要安装:

sudo apt-get install net-tools

若 ifconfig 提示找不到命令,安装 net-tools 也未果,可能是因为 ifconfig 已不被推荐使用,可用 ip addr show 命令代替,一样可以显示出 IP 地址。

ip 命令:网络配置工具

ip 是非常强大的工具,可以替换 net-tools 包的所有工具,如常见的 ifconfig、netstat、route、arp 等。

查看网卡信息:

ip addr show

显示系统路由:

ip route show

开启网卡或关闭网卡:

ip link set eth0 up             # 开启网卡
ip link set eth0 down       # 关闭网卡

网络故障排除

当我们遇到服务器的网络出现问题的时候,我们改怎么去排查呢?大家可以通过下面的命令来逐一排查。

ping 命令:测试主机之间网络的连通性

这个命令通常用来判断网络的连通性和网速情况,偶尔用来查看域名的 IP:

ping www.baidu.com

ping 命令并不会自动结束,需要我们 ctrl+c 强制停止,大家可以通过 -c 选项来指定 ping 的次数:

ping www.baidu.com -c 3        # 设置完成要求回应的次数

ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。

telnet 命令:登录远程主机和管理(测试 IP 端口是否连通)

telnet 通常用作远程登录,用来确定远程服务的状态,探测远程服务器的某个端口是否能访问,也可以探测本地的:

telnet localhost 22

telnet localhost 3306

处理这种情况方法:

  • 确认 IP 地址是否正确?
  • 确认 IP 地址对应的主机是否已经开机?
  • 如果主机已经启动,确认路由设置是否设置正确?(使用 route 命令查看)
  • 如果主机已经启动,确认主机上是否开启了 telnet 服务?(使用 netstat 命令查看,TCP 的 23 端口是否有 LISTEN 状态的行)
  • 如果主机已经启动 telnet 服务,确认防火墙是否放开了 3306 端口的访问?(使用 iptables-save 查看)

traceroute 命令:显示数据包到主机间的路径

traceroute 主要用来探测从源主机到目标主机之间的每一跳路由节点,通常和 ping 结合起来排查网络故障, ping 测连通性和网速,如果网络不通,可以借由 traceroute 进一步排查是哪个路由节点出问题了。

traceroute www.58.com

我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免 DNS 解析,以 IP 格式输出数据。

如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC 服务商也不可能帮助我们解决。

网络连接

netstat 命令:查看 Linux 中网络系统状态信息

netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 Unix Socket 等,也是集多种工具于一身的组合工具。

列出所有端口:

netstat -a     # 列出所有端口
netstat -at    # 列出所有 tcp 端口
netstat -au    # 列出所有 udp 端口   

列出所有处于监听状态的 Sockets:

netstat -l        # 只显示监听端口
netstat -lt       # 只列出所有监听 tcp 端口
netstat -lu       # 只列出所有监听 udp 端口

ss 命令:iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。

ss 和 netstat 类似,也是用来查看网络连接统计的工具,它的输出也和 netstat 类似,甚至显示更多连接状态信息,它最大的优势在于比 netstat 快,在服务器维持上万个连接的情况下,这种优势就体现得比较明显。

显示 TCP 连接:

ss -t -a

列出所有打开的网络连接端口:

ss -l

查看进程使用的 socket:

ss -pl

nc 命令:用于设置路由器

nc 被称为瑞士军刀,非常轻巧但功能强大,能够创建各种不同类型的网络连接、能够实现简单的聊天工具、远程传输文件、debug 分析、扫描端口等。

TCP 端口扫描:

nc -v -z -w2 localhost 1-100 

选项解释:

  • -v 显示指令执行过程
  • -z 使用 0 输入/输出模式,只在扫描通信端口时使用
  • -w<超时秒数> 设置等待连线的时间
  • 1-100 扫描 TCP 端口

UDP 端口扫描:

nc -u -z -w2 192.168.0.1 1-1000        # 扫描 192.168.0.1 的端口 范围是 1-1000

选项解释:

  • -u 使用 UDP 传输协议

域名

host 命令:常用的分析域名查询工具

host 命令是域名分析查询工具,用来测试域名系统工作是否正常。

查看百度域名信息:

host www.baidu.com

nslookup 命令:查询域名 DNS 信息的工具

nslookup 有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。

进入交互模式,直接输入 nslookup 命令,不加任何参数,则直接进入交互模式,此时 nslookup 会连接到默认的域名服务器。或者输入 nslookup -nameserver/ip。进入非交互模式,就直接输入 nslookup 域名就可以了。

非交互模式:

nslookup www.baidu.com

交互模式:

nslookup

软件包管理器

Ubuntu 软件安装有两种方式:

  • 离线安装(deb 文件格式安装)
  • 在线安装(apt-get 方式安装)
  • 源码安装

我们绝大多数的时候,都是通过在线安装的方式来进行安装软件。

apt-get 方式安装

在线安装 deb 软件包的命令,主要用于在线从互联网的软件仓库中搜索、安装、升级、卸载软件。

在线安装软件命令格式:

sudo apt–get install 安装包         # 表示在线安装 deb 安装包

源码安装

开源软件都会提供源码下载的方式,对于源代码安装方式的好处即可以定制软件功能,安装需要的模块,不需要的模块可以屏蔽,方便管理,卸载等。

我们以 Redis 为例:

https://redis.io/download        # 这是官网 redis 的下载地址

官网中给出了源码安装的方式:

$ wget https://download.redis.io/releases/redis-6.2.5.tar.gz
$ tar xzf redis-6.2.5.tar.gz
$ cd redis-6.2.5
$ make

这里会使用 make 工具,make 工具就会通过 makefile 文件来实现。makefile 文件是一种按照某种语法来编写且定义了各个文件的依赖关系。

使用 make 命令,一般都需要 gcc 的环境:

sudo apt-get install gcc

更改镜像源

因为使用 apt-get 命令默认是从国外的服务器下载安装软件的,会导致下载安装速度很慢,所以需要更改成国内的镜像源服务器。

镜像源说明:镜像源就是下载软件来源的服务器。

更改镜像源的方式:

  • 可视化方式更改镜像源
  • 手动方式更改镜像源

可视化的方式适合 Ubuntu 这种有图形化界面的。

第一步:

第二步:

第三步:

第四步:

第五步:

最后执行命令:

sudo apt-get update

手动修改就容易很多:

vim  /etc/apt/sources.list        # 编辑这个文件,将找好的国内镜像源直接复制到这个文件里面就行

这里是清华大学的镜像源,大家可以找其他的镜像源:

查看进程

ps 命令:用于报告当前系统的进程状态的命令

ps 命令可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

当我们在终端敲下 ps 命令,会显示如下界面:

字段解释:

PID         代表这个进程对应的 ID 号码
TTY         进程所属的控制台号码
TIME        进程所使用 CPUC 的总时间
CMD         就是正在执行的系统命令行是什么

ps 常用选项,显示 Linux 机器所有详细的进程信息:

ps -ef
  • -e:列出系统所有运行的进程
  • -f:显示 ID PID PPID C 等信息

字段解释:

UID     这个进程是那个用户执行的命令
PID     进程的标识号码 用于启停进程
PPID    进程的父进程标识号
C       表示 CPU 使用的资源百分比
STIME   表示进程开始执行的时间
TTY     进程在那个终端执行的
TIME    该进程使用的 CPU 总时间
CMD     用户执行某条命令 产生的进程信息

过滤出系统指定的信息:

ps -ef | grep vim 

查看 named 进程详细信息:

ps -aux | grep named

显示指定用户信息:

ps -u root 

把所有进程显示出来,并输出到 ps1.txt 文件:

ps -aux > ps1.txt

ps 命令的参数,分为两种系统形式:

  • ps ef,不带减号的参数
  • ps -ef,带减号的参数

大家一定要注意带减号和不带减号,表示的含义是不同的。

  • e:列出程序时,显示每个程序所使用的环境变量
  • -e :列出系统所有运行的进程

大家可以看出来效果是不一样的。

pstree 命令:以树状图的方式展现进程之间的派生关系

pstree 命令需要安装:

sudo apt-get install psmisc

执行 pstree 效果如下:

kill 命令:发送相关信号,给进程达到不同的停止效果

我们通常用的都是 kill -9 进程号,除了 -9 这一个信号,kill 也有很多其他的信号。

kill -l

下面是常用的信号:

HUP     1    终端挂断
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
KILL    9    强制终止
TERM   15    终止,这是 kill 命令默认的
CONT   18    继续(与 STOP 相反,fg/bg 命令)
STOP   19    暂停(同 Ctrl + Z)

示例:

ping www.baidu.com

找到 ping 命令的进程号:

ps -ef | grep ping

通过刚才找到的进程号结束掉 ping 命令:

kill -9 进程号

top 命令:显示或管理执行中的程序

可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。

当我们敲下 top 命令,可以看到如下界面:

top 交互命令

在 top 命令执行过程中可以使用的一些交互命令,这些命令都是单字母的。

h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为 s),如果有小数,就换算成 ms。输入 0 值则系统将不断刷新,默认值是 5s;
f 或者 F:从当前显示中添加或者删除项目;
o 或者 O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和 CPU 状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据 CPU 使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc 文件中。

top 命令上面字段:

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

解释:

top - 09:44:56[当前系统时间],
16 days[系统已经运行了 16 天],
1 user[个用户当前登录],
load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
Tasks: 145 total[总进程数],
2 running[正在运行的进程数],
143 sleeping[睡眠的进程数],
0 stopped[停止的进程数],
0 zombie[冻结进程数],
Cpu(s): 99.8%us[用户空间占用 CPU 百分比],
0.1%sy[内核空间占用 CPU 百分比],
0.0%ni[用户进程空间内改变过优先级的进程占用 CPU 百分比],
0.2%id[空闲 CPU 百分比], 0.0%wa[等待输入输出的 CPU 时间百分比],
0.0%hi[],
0.0%st[],
Mem: 4147888k total[物理内存总量],
2493092k used[使用的物理内存总量],
1654796k free[空闲内存总量],
158188k buffers[用作内核缓存的内存量]
Swap:  5144568k total[交换区总量],
56k used[使用的交换区总量],
5144512k free[空闲交换区总量],
2013180k cached[缓冲的交换区总量],

内存查看命令

free 命令:显示内存的使用情况

可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

以总和的形式显示内存的使用信息:

free -t 

周期性的查询内存使用信息,每 3s 执行一次命令:

free -s 3

显示内存使用情况:

free -m

服务管理工具 systemctl

systemctl 命令:系统服务管理器指令

systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。

启动服务:

service httpd start
systemctl start httpd.service

停止服务:

service httpd stop    
systemctl stop httpd.service

重启服务:

service httpd restart    
systemctl restart httpd.service

重载服务:

service httpd reload    
systemctl reload httpd.service

检查服务状态:

service httpd status
systemctl status httpd.service

设置开机自启动 MySQL 服务:

systemctl enable mysqld.service 

停止开机自启动:

systemctl disable mysqld.service