前言

菜鸟教程之Linux命令大全
平时我们说的 Linux 其实指的是 Linux内核,而不同厂商在这个内核的基础上二次开发,完善了软件,程序等,出现了不同的发行版,也就是我们使用的 Linux 操作系统。主要有 centosUbuntu

windows和vm以及centos的关系

centos 不能直接在 windows 上操作,因此要先安装一个虚拟机,相当于另一台机器,然后在 vm 上安装 centos

环境搭建

先安装虚拟机软件,我使用的是 VMware,在软件中创建新的虚拟机,然后在虚拟机中按照 CentOS系统

关于设置虚拟机的网络连接时的三种模式

  • 桥接模式:设置桥接模式的话,虚拟机的IP地址的网段就会和宿主机的IP地址网段一样,相当于虚拟机跟宿主机处在同一个网络环境下且是 平级 的关系,该环境下的其它IP (其它计算机) 能和宿主机联系,也能和这个宿主机上的虚拟机联系。

    这种设置的坏处在于,该环境下按道理最多只能有 254 个 IP 地址 (xxx.xxx.xxx.0 跟 xxx.xxx.xxx.255 分配给了网关使用),如果该环境中有多台设备,每台设备都去创建虚拟机,而且都使用桥接模式的话,IP 地址可能就会不够用

  • NAT 模式:网络地址转换模式,默认模式。假设宿主机在所处的网络环境下 IP 地址为192.168.0.40,它创建了虚拟机同时设置其网络连接为 NAT 模式,那么宿主机就会产生第二个 IP 地址,这个 IP 地址不与宿主机属于同一网段,假设为 192.168.100.200,然后虚拟机的 IP 地址就会跟宿主机这个新的 IP 地址处于同一网段,如 192.168.100.50,这样它就不会去占据宿主机所处环境的IP地址,宿主机所处环境的其它主机也不能联系到这台虚拟机,但反过来却可以,因为它可以通过宿主机代理访问到其他主机及外网

  • 主机模式:这种模式下的虚拟机就是一个独立的主机,不能访问外网

关于配置安装 CentOS 时的磁盘分区

分区时我们至少要分 3 个区:/,swap 分区,以及 /boot
Linux 启动的时候需要一些引导文件,这些文件默认就是存放在 /boot 中,200M 就足够
当系统内存不够用的时候,可以用 swap 区暂时地替代内存,分配 2G (2048M) 就可以,swap 区是虚拟内存,太大速度慢。在 Linux 中可以使用 swapoff -a 关闭 swap 分区

基础知识

文件目录结构

Linux 的文件系统采用层级式的 树状 目录结构,最上层是根目录 (/),在此目录下再创建其他目录
“在Linux世界里,一切皆文件”

  • Linux目录中有且只有一个根目录
  • 各个目录存放什么内容是规划好的,要大致知道
  • Linux以文件的形式管理设备

远程操作 Linux

通常 Linux 服务器是不在我们身边的,所以我们需要远程操作服务器
远程登陆选择 Xshell 工具实现,需要 Linux 启用 ssh 服务,监听 22 号端口,在 XShell 中通过 Linux 的 IP 地址新建一个连接,然后用 Linux 服务器上的用户名和密码登陆
如果是使用本地 (Windows) 的虚拟机 (Vmware) 搭建了一个 Linux 环境,然后在本地使用 Xshell 连接到 Linux 上的话,Linux 需要得到一个跟本地同一个 LAN 中的 IP 我们才能去连接它,所以虚拟机的 DHCP 服务 VMware DHCP Service 必须打开,在 Linux 上执行 ifconfig 命令能看到跟本地 Windows 机同网段的 IP,就说明 Linux 获得了跟本地机器同 LAN 的 IP,就可以在本地连接上 Linux 了

直接拖拽本地的文件到 XShell 窗口中可以直接将文件复制到窗口当前所在的虚拟机的目录下,不过需要先在虚拟机中安装一个工具 yum install lrzsz
XFtp 工具可以用于在本地和远程服务器之间上传和下载文件

用户管理

用户组:用分组的方式管理用户,一个用户可以属于多个组,至少属于一个组。类似于角色,系统可以对有共性的多个用户进行统一的管理
groupadd 组名 新建组
groupdel 组名 删除组
useradd -g 组名 用户名 增加用户时直接加上组
usermod -g 组名 用户名 修改用户的组
用户家目录:在 /home/ 目录下有各个创建的用户对应的家目录,当用户登录时,会自动进入到自己的家目录

Linux 是一个 多用户多任务 的操作系统,任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号然后以这个账号进入系统

添加用户

useradd [选项] 用户名 创建成功后会自动创建和用户同名的家目录
选项:-s,指定用户登入后使用的 shell,如 useradd -s /bash/shell xxx;-g,指定所属用户组;-m,自动建立用户的登入目录;-k,在 -m 选项启用时它才有效,用于指定用户的 登入目录,如果创建失败就继续 -m 表示自动创建
useradd -d 指定目录 用户名 创建用户同时创建指定 家目录 (可以不用事先创建这个要指定的目录)
passwd 用户名 更改/修改指定用户的密码

删除用户

userdel 用户名 删除用户,但会保留家目录
userdel -r 用户名 删除用户同时删除家目录

查询用户信息

id 用户名 查询指定用户信息,当用户不存在时返回无此用户的信息

切换用户

在操作 Linux 时,如果当前用户权限不够,可以通过指令切换到高权限用户如 root
su 要切换的用户名 从权限高的用户切换到权限低的用户不需要密码,反之需要;可使用 exit 指令返回到原来用户
whoami/who am I 查看当前用户

配置文件

/etc/passwd:用户的配置文件,记录用户的各种信息,每行的含义:
用户名:口令:用户标识号:组标识号(即id):注释性描述:主目录:登录shell
/etc/shadow:口令(密码)的配置文件,每行的含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group:组的配置文件,记录 Linux 包含的组的信息,每行的含义:
组名:口令:组标识号:组内用户列表
/root/.bash_profile:这个文件就是当 root 用户以 bash 作为登陆 shell 时,那么登陆后就会运行这个文件里面的一系列的命令,即运行这个脚本文件

通用命令

cal 可以获取当前日历信息
$path 得到的是环境变量路径
reboot 重启系统
sudo 表示以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行
clear 清屏
time 测算一个命令 (程序) 的执行时间
uname -m 查看计算机的架构 (x86/arm)

{参数1,参数2,…} 表示在命令的当前位置设置多个参数,例如创建目录,使用 mkdir /usr/{d1,d2},就表示创建目录 /usr/d1 以及 /usr/d2。当需要在同一目录下的不同文件进行相同操作时就可以这样批量操作
在修改一些重要文件时,可以先备份,如要修改 /etc/profile 时,cp /etc/profile{,.origin},表示先将文件备份到 profile.origin 文件中

命令参数也可以使用 ‘*’ 通配符,比如 rm test.tar.gz.* 就是删除目录中所有前缀为 test.tar.gz. 的文件

sed 以脚本文件的形式编辑文本文件,而无需使用 vim 等编辑器自行编辑
sed -n 'xp' 文件名 可以取出文件中第 x 行;sed -n 'x,y,z...p' 文件名 可以取出多行

who 命令用于显示系统中有哪些使用者正在线,显示的资料包含了使用者的 ID,使用的终端机,从哪边连上来的,上线时间,呆滞时间,CPU 使用量,动作等等。所有使用者都可以使用该命令
shutdown 关机
选项:-r,关机后立即重启;可以在后面加上 time,指定关机的时间,如 shutdown now,现在关机

talk 要对谈的使用者 可以跟系统当前在线的其它使用者对谈。如果该使用者在其他机器上,则可输入 使用者@machine.name。可以先根据 who 命令查看当前在线的用户再进一步进行对谈

输入命令,参数时,可以使用 Tab 键自动补全

运行级别

0:关机
1:单用户
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用,保留给用户
5:图形界面
6:系统重启
/etc/inittab:运行级别 的配置文件,可以查看该文件并修改运行级别
init [0123456] 切换不同的运行级别
如何找回root密码:进入单用户模式修改密码,因为进入单用户模式,root 不需要密码就可以登陆,然后修改密码就可以

systemctl get-default 查看当前运行级别
systemctl set-default multi-user.target 设置当前级别为 3
systemctl set-default graphical.target 设置当前级别为 5

Linux 中图形界面切换到命令界面可以按 Ctrl+Alt+Fn(n=1,2,3,4,5,6)

帮助指令

man [命令或配置文件] 获得帮助信息
help 命令 获得 shell 内置命令的帮助信息

文件目录类

chroot 用于改变当前的 “根目录” (我们通常说的根目录指的就是 “/”,但一个用户的根目录可以不指向 “/”,他可以以系统中任何其它目录作为相对于他自己的 “根目录”,这里说的根目录是逻辑上的根目录,而 “/” 是实际文件组织上的根目录,对于所有用户来说,文件组织上的根目录只会是这一个
pwd 显示当前工作目录的绝对路径

tree 查询整个 Linux 目录树

ls [选项] [目录或是文件] 查看当前目录的所有内容信息
选项:-a,显示当前目录所有的文件和目录,包括隐藏的;-l,以列表的方式显示信息;-lh,可以使呈现出来的文件的大小符合我们的常规印象;-al / -la,列表方式显示包括隐藏文件目录在内的所有文件和目录 (即多个选项可以组合)

cd [参数] 表示 change directory,切换到指定目录。可以使用 绝对路径 (从根目录开始定位,/…/…) 或 相对路径 (从当前工作目录开始定位,. ./表示回到上一级目录,./表示当前目录)
cd~/cd 回到自己的家目录
cd.. 回到当前目录的上一级目录

mkdir [选项] 目录名 创建新目录,选项 -p 可以创建多级目录;-v 可以显示创建过程的详细信息

rmdir [选项] 要删除的空目录 删除 空目录,如果目录下有内容是无法删除的
rm -rf 要删除的目录 可以删除非空目录
rm [选项] 要删除的文件或目录 移除文件或目录
选项:-r,递归删除整个文件夹;-f,强制删除,不提示。如果不使用 -f,会出现提示询问是否删除,输入 y 即可确认删除

touch 文件名1 文件名2 .... 新建文件

cp [选项] source dest 拷贝文件到指定目录 (相对路径)。选项 -r 可以递归复制整个文件夹。在复制时可能目标文件夹中与源文件夹要复制的文件存在重复,使用 \cp 可以强制覆盖而不给出提示
示例:cp a.txt b/ 可以把当前目录下的 a.txt 文件复制到当前目录下的 b/ 目录下

mv oldFileName newFileName 重命名文件 (特殊的移动,相当于把当前目录下的某个文件移动到当前目录,然后系统发现当前目录已有这个文件,所以就判断为重命名)
mv /temp/movefile /targetFolder 移动文件。也可以移动多个 文件/目录 到相同的目标目录下,mv 文件1/目录1 文件2/目录2 ... 文件n/目录n 目标目录

cat [选项] 要查看的文件 查看文件内容
选项:-n,显示行号。只能浏览文件,不能修改。为了浏览方便,一般会加上 管道命令 | more 进行分页查看
单纯执行 cat 的话,会接收控制台输入然后将输入的内容直接在控制台输出,例如输入 aaa 然后回车,屏幕就会再显示一次 aaa
cat > 文件 接收 控制台输入 然后 覆盖 到文件中
> 输出重定向 (会将文件原来的内容覆盖),>> 追加
cat >> 文件 << "xxx" 将控制台输入追加到文件中,并当输入 “xxx” 时结束输入,“xxx“ 必须顶行写,前面不能有制表符或者空格
cat 文件1 > 文件2 将 文件1 的内容 覆盖 到 文件2

more 要查看的文件 该指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式分页显示文本文件的内容
选项:-num,指定一次显示的行数,如果直接执行 “more 文件” 然后发现没有分页显示的效果的话,可能就是文件中内容太少分不了页,可以设置 num 为一个较小的,小于文件中文本内容行数的数,就可以分页显示了;-p, 不以卷动的方式显示每一页,而是先清除屏幕后再显示新的内容;-c,跟 -p 相似,不同的是先显示内容再清除其他旧的内容;+num,从第 num 行开始显示
指令中内置了若干 快捷键空格键 — 代表向下翻一页;enter 键 — 代表向下翻一行;q — 代表立刻离开 more 不再显示该文件内容;ctrl + F — 向下滚动一屏;ctrl + B — 返回上一屏;= — 输出当前行的行号;f — 输出文件名和当前行的行号
通常,使用 cat 看文件的话会一次性把所有内容都显示出来,看大文件的话体验可能会很差,此时就可以选择 more 命令来查看文件

less 要查看的文件 用来分屏查看文件内容,与 more 类似,但它支持各种显示终端,less 在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容 (惰性加载),对于显示大型文件具有较高的效率
快捷键空格键 — 向下翻动一页;pagedown — 向下翻动一页;pageup — 向上翻动一页;/字串 — 向上查找字串;?字串 — 向下查找字串;q — 离开 less

ls -l > 文件 列表的内容写入文件中,覆盖文件原有内容,如果文件不存在就先创建该文件
ls -l 目录 > 文件 将指定目录列表展示的内容写入文件中
ls -al >> 文件 列表的内容追加到文件的末尾

echo "内容" >> 文件 将内容追加到文件中
echo [选项] [输出内容] 输出内容到控制台

head 指令用于显示文件的开头部分内容,默认情况下显示文件的前十行内容
head 文件 查看文件头十行内容
head -n i 文件 查看文件头 i 行内容,i 可以是任意行数

tail 用于输出文件中尾部的内容,默认情况下显示文件的后 10 行内容
tail 文件 查看文件后 10 行内容
tail -n i 文件 查看文件后 i 行内容
tail -f 文件 实时追踪该文档的所有更新

软链接:symbolic link,也叫符号链接,类似于快捷方式,主要存放了链接其他文件的路径。当把原文件删掉时,软链接依旧存在并且还是指向原文件,但已经失效
ln -s [原文件或目录] [软链接名] 给原文件或目录创建一个软链接,当我们使用 pwd 命令查看目录时,仍然看到的是软链接所在目录
使用 cd 跳转到软链接所指目录时后面要加上 “/”,使用 rm -rf 删除软链接时不用加 “/” (否则提示“设备或资源忙”);选项 -v 可以显示创建过程信息

硬链接:hard link,在 Linux 中,多个文件名指向同一个文件,即指向同一个 inode 节点的情况是存在的,这种与 inode 之间的链接就称为硬链接。允许一个文件拥有多个有效路径名,可以防止 “误删”,只有当一个 inode 对应的所有硬链接都被删除了,该文件才会被真正地删除
创建硬链接使用 ln 命令 (即比创建软链接少了 -s 选项),当我们对原文件创建了一个硬链接之后,硬链接与原文件指向同一个 inode 同一个文件,就算删除了原文件,硬链接也不会失效,还是可以正常访问原来所指向的文件
指定的软/硬链接相当于是创建一个文件在当前目录下,所以当前目录下不能存在指定的软/硬链接,否则软/硬链接会创建失败

history 查看已经执行过的历史命令 (每一条指令都会携带序号),也可以执行历史命令
history i 显示最近使用过的 i 个命令
! i 执行序号为 i 的指令

vimdiff 文件1 文件2 以 vim 窗口的形式显示 两个文件的不同之处

diff 文件1/目录1 文件2/目录2 diff 是 Linux 中比较重要的工具,用于比较两个文件或目录。如果是文件,则逐行比较它们的异同;如果是目录,则会比较两个目录下名字相同的文本文件,列出不同的二进制文件,公共子目录和只在一个目录出现的文件
选项:-q / --brief,当两个文件不同的时候只显示 “Files xx and xx differ" 的简略信息,如果两个文件相同则不显示任何信息; -s / --report-identical-files,若两个文件没有发现不同也会输出 “Files xx and xx are identical” 的信息;-cNUM,显示不同的内容的同时显示这些不同的内容附近相同的 NUM 行内容;-y / --side-by-side,以并列的方式显示异同;-WNUM / --width=NUM,以并列的方式显示时指定列宽;-i / --ignore-case,忽略大小写的不同

paste [文件列表] 每个文件以列对列的方式,一列列地加以合并
选项:-s,可以将一个文件中的多行数据合并为一行进行显示

uniq 文件 显示文本文件中重复出现的行,不过如果重复出现的行不是相邻的也不会显示 (这时就可以配合 sort 命令先排序)
选项:-c,在行首显示该行出现的次数

时间日期类

date 显示当前时间
时间信息来源于 /etc/localtime 文件,该文件是一个软链接。在 /usr/share/zoneinfo/ 目录下有很多时区信息,该文件就是软链接到该目录中某个时区从而得到相应的时间,例如如果软链接到 /usr/share/zoneinfo/Asia/Shanghai 文件,就可以把时区设置为 Asia/Shanghai
如果系统的时间出错,可以考虑从这个文件入手,看是否没有软链接到某个时区或者链接到了某个错误时区

date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date “+%Y-%m-%d%H:%M:%S” 显示年月日时分秒,显示年月日也行,根据想要的格式修改占位符即可。注意 “-”,“:” 只是在显示出来的时候作为分隔符,可以随意更换;引号可以不用;“+”,“%” 以及表示时间单位的字母就不能随意更换
date -s 字符串时间 设置系统日期
cal [选项] 不加选项,显示本月日历;选项写上年份,显示指定年份日历

搜索查找类

find [搜索范围] [选项] 从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
选项:-name 查询方式,按照指定的 文件名查找模式 查找文件,可以使用通配符;-user 用户名,查找属于指定 用户名 所有文件;-size +n/-n/n,按照指定的 文件大小 查找文件 :+n,表示大于 n;-n,表示小于 n;n,表示等于 n;单位使用 兆 的话必须用大写的 M);-exec 后面加其它指令,让前面查找到的内容执行所加的指令,类似于管道符,例如 find ... -exec rm -rf {} \;,该语句先通过 find 查找文件,然后将查找到的文件删除,这里的 “rm -rf {} \” 为固定写法
查找目标太多一直查不结束的话,可以用 ctrl+c 终止查找

locate 搜索文件 locate 指令可以快速定位文件路径,利用事先建立的系统中的所有文件名称以及路径的 locate 数据库实现快速定位给定的文件。无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确性,管理员必须定期更新 locate 时刻。由于 locate 指令基于数据库进行查询,所以 第一次运行前必须使用 updatedb 指令创建 locate 数据库

grep [选项] 查找内容 源文件 从源文件中查找指定内容。可以实现过滤查找,配合管道符 “|” 表示将前一个命令的处理结果传递给后面的命令处理,例如使用 cat 等命令获取内容后使用管道符交给 grep 进行过滤 (cat abc.txt | grep abc,查找 abc.txt 文件中所有包含 abc 的内容)
选项:-n,显示匹配行及行号;-i,忽略字母大小写;-r,对当前目录进行递归查找

whereis ... 用于查找符合条件文件的目录,如 whereis nginx 表示查找 nginx 相关文件的目录
选项:-b,只查找二进制文件;-m,只查找帮助文件

which 命令用于查找文件,指令会在环境变量 $PATH 设置的目录里查找符合条件的文件

wc [选项] [文件] 计算指定文件的 Byte 数,字数,或是列数;如果若不指定文件名称,或者所指定的文件名为 “-”,则 wc 指令会从标准输入设备读取数据
选项:-c / --bytes / --chars,只显示 Bytes 数;-l / --lines,显示行数;-w / --words,只显示字数; --help,在线帮助; --version,显示版本信息

压缩及解压类

gzip 文件.. 压缩文件,只能把文件压缩为 *.gz 文件,压缩完不保留原文件
gunzip 文件.gz ... 解压缩文件 (gz 文件)

zip [选项] xxx.zip 将要压缩的文件或目录 压缩内容,结果得到 xxx.zip
选项:-r,递归压缩,即压缩目录
unzip [选项] xxx.zip 解压指定 zip 文件
选项:-d 目录,指定解压后文件的存放目录

tar [选项] xxx.tar.gz 打包的文件或目录(可用空格隔开多个文件) 打包内容,压缩后得到 xxx.tar.gz 文件
选项:-c,产生 .tar 打包文件;-x,解包 .tar 文件;-v,显示详细信息;-f,指定压缩后的文件名;-z,打包同时压缩
通常打包用 -zcvf,解压用 -zxvf
tar -zxvf xxx.tar.gz -C 指定目录 解压到指定目录,指定的目录必须存在,否则报错
若只是 .tar 文件而不是 .tar.gz,则不需要 -z 选项

进程相关

后台运行

在命令后加一个&符号就可以后台运行,如果执行了命令发现自己还在进程控制台,按 ctrl + d 即可返回 bash

查看 CPU 信息

lscpu 命令
cat /proc/cpuinfo | grep "processor" | wc -lgrep processor /proc/cpuinfo | wc -l,查看 CPU 核数

查看内存信息

free 会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段等
选项:-b:以 Byte 为单位显示内存使用情况;-k:以 KB 为单位显示内存使用情况

查看进程信息

strace 语句 显示语句所触发执行的进程所调用的系统调用。strace 后面跟触发进程执行的语句,如 “./一个可执行文件”

top 实时显示系统中各进程的资源占用情况,类似于 Windows 的任务管理器

ps [选项] 可以查看系统当前进程信息
选项:-e,显示系统内所有进程信息(可以通过查看第一个进程是不是 systemd 来判断系统使用的是 systemd 还是 sysinit);-l,使用长 (long) 格式显示进程信息;-f,使用完整的格式显示进程信息;-A,所有进程均显示
通常使用 ps -ef | grep 过滤信息 来查看自己想看的进程,过滤信息可以是服务的名称,端口号
ps -aux 显示所有包含其他使用者的进程,简单的 ps 看不到想看到的进程时,可以尝试 -aux

netstat -nlp | grep 端口号 根据端口号查看进程

lsof -i:端口号 根据端口号查看进程
lsof 命令可以查看所有被进程打开的文件的信息以及对应的进程的相关信息
选项:-i<条件>,列出符合条件的进程,条件可以是:4,使用 IPv4;6,使用 IPv6;协议,所使用的协议;:端口,所使用的端口
-c<进程名>,列出指定进程所打开的文件;+d<目录>,列出目录下被打开的文件;+D<目录>,递归列出目录下被打开的文件;-p<进程号>,列出指定进程号所打开的文件;

杀死进程

kill -9 PID杀死指定进程
kill 可将指定的信息送至程序,预设的信息为 SIGTERM (15),可将指定程序终止,但不是强制杀死,只有信号 9 才是强制杀死
kill -l可以列出所有可用信号

killall 进程名 杀死指定名字的所有进程

pkill 进程名 杀死指定名字的所有进程,类似于 killall。与 kill 相比,kill 命令杀死指定 PID 进程,需要配合 ps 使用;而 pkill 直接对进程的名字进行操作,更加方便

查看进程打开的文件描述符

先通过 ps 命令查看进程 pid,然后进入 /proc/pid/fd 目录,ll 列出所有内容即可看到该进程打开的所有文件描述符
每个程序在运行后,都会至少打开三个文件描述符,分别是:0,标准输入;1,标准输出;2,标准错误

网络相关

ping 目的地址 用来测试主机之间网络的连通性。目的地址可以是被测主机的IP地址,主机名或者域名。Linux 中的 ping 跟 Windows 不同,需要 ctrl + c 来终止
选项:-R,记录路由过程;-c NUM,设置完成回应的次数,即 ping 的次数;-i 间隔秒数,配合 -c,设置每次 ping 之间的时间间隔

telnet 可以测试 IP + 端口 的可达性,有时候我们不止想测试主机是否可达,还想测试主机上某个端口上的进程是否可达

ifconfig 配置和显示 Linux 内核中网络接口的网络参数

netstat 打印网络系统的状态信息,了解 Linux 系统的网络情况
选项:-a,显示所有信息;-c / --continuous,持续列出网络状况;-t / --tcp,显示 TCP 传输协议的连接状况;-u / --udp,显示 UDP 传输协议的连接状况;-l,只显示处于监听状态的 socket;-n,直接使用 IP 地址,而不通过域名服务器;-p,显示正在使用 socket 的程序识别码和程序名称
常见场景:查看当前系统打开的所有端口,netstat -tunlp

route 显示并设置 Linux 内核中的网络路由表
选项:-n,不执行 DNS 反向查找,直接显示数字形式的 IP 地址

traceroute 主机 用于追踪数据包 (发送至指定主机) 在网络上传输时的全部路径

host 主机 分析域名查询工具,可以检测域名系统工作是否正常

tcpdump 抓取数据包的工具,打印所有经过网络接口的数据包的头信息,也可以使用 -w 选项将数据包保存到文件中

ssh [选项] [远程主机] 连接到远程主机
选项:-4,强制使用 IPv4 地址;-6,强制使用 IPv6 地址;-f,后台执行 ssh 指令;-l <登录名>,指定连接远程服务器的登录用户名;-p <端口>,指定远程服务器上的端口

curl 命令可以发送 HTTP 请求,如 curl “http://www.baidu.com”。可以使用 -d 选项指定请求参数来发送 POST 请求

ss 表示 socket statistics,用于显示处于活动状态的套接字信息。能显示跟 netstat 命令类似的内容,但它比 netstat 更高效,netstat 是遍历 /proc 下面每个 PID 目录,ss 直接读 /proc/net 下面的统计信息。所以 ss 执行的时候消耗资源以及消耗的时间都比 netstat 少很多
选项:-n,不进行域名转换,以 IP 形式显示;-a,显示所有套接字;-l,显示处于监听状态的套接字;-t,只显示 TCP 套接字;-u,只显示 UDP 套接字;-4,仅显示 ipv4 的套接字;-6,仅显示 ipv6 的套接字;-e,显示详细的套接字信息;-m,显示套接字的内存使用情况;-p,显示使用套接字的进程;-i,显示内部的TCP信息;-s,显示套接字使用概况

组管理和权限管理

组管理

在Linux中的每一个用户必须属于一个组,不能独立于组外。每个文件有所有者,所在组,其它组的概念。所有者一般为文件的创建者,谁创建了该文件就自然成为该文件的所有者;当某个用户创建了一个文件后,用户所在的组就是这个文件的所在组;除去文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

ls -ahl 查看文件的所有者及所在组
chown 用户名 文件名 修改文件所有者
groupadd 组名 创建组
chgrp 组名 文件名 修改文件所在的组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户的所在组

usermod -g 组名 用户名 改变用户所在组
usermod -d 目录名 用户名 改变该用户登陆的初始目录

权限管理

-rw-r--r--. 1 root root 2041593 Apr 29  2015 xxx.tar.gz

以上是在目录中执行 ls -l (或 ll) 指令执行后显示的文件/目录信息的最前面一串字符串,表示的是文件的 权限信息
其中,第0位 确定文件类型(d,表示是目录;-,表示是普通文件;l,表示是软链接;c,表示是字符设备如键盘,鼠标等;b表示是块文件如硬盘);
第1-3位 确定所有者对该文件拥有的权限;
第4-6位 确定所属组(同用户组的,与拥有者同组的用户)对该文件拥有的权限;
第7-9位 确定其他用户(不与拥有者同组的其他用户)对该文件拥有的权限

字符串后面的一个 数字,如果对象是文件,就表示硬链接的数,一般是 1;如果是目录,就表示该目录下子目录的个数 (本目录 (.) 以及上一级目录 (..) 为隐藏目录,也包含在内)

数字后面是 所有者 以及 所在组

所在组后面的 数字,如果对象是文件,那数字就是文件的大小 (字节);如果是目录,就是 4096 (字节)

数字后面显示的时间是 文件的最后修改时间

rwx 权限

作用到 文件
r 代表可读:可以读取,查看;
w 代表可写:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件;
x 代表可执行,可以被执行

作用到 目录
r 代表可读:可以读取,如 ls 查看目录内容;
w 代表可写:可以修改,目录内创建,删除,重命名目录;
x 代表可执行:可以进入该目录

可以用数字来表示:r = 4,w = 2,x = 1,则 rwx =7

权限指令

通过 chmod 指令可以修改文件或目录的权限

  • 第一种方式 (使用 +,-,=;u:所有者,g:所有组,o:其他人,a:所有人(u,g,o的总和))
    chmod u = rwx,g=rx,o=x 文件目录名
    chmod o+w 文件目录名
    chmod a-x 文件目录名
  • 第二种方式 (使用数字,r = 4 w = 2 x = 1 rwx = 7)
    chmod u=rwx,g=rx,o=x 文件目录名 相当于 chmod 751 文件目录名
    chmod [选项] newowner file 改变文件的所有者
    chmod [选项] newowner:newgroup file 改变所有者和所有组
    -R,如果是目录则使其下所有子文件或目录递归生效;-v,显示修改过程信息
    chgrp newgroup file 改变文件的所有组,同样可以使用 -R 选项

用户权限被修改后要重新登录才能生效

任务调度

任务调度 是指系统在某个时间执行的特定的命令或程序
分类:

  1. 系统工作:有些工作必须周而复始地执行,比如病毒扫描
  2. 个别用户工作:个别用户可能希望某些程序的执行,比如MySQL数据库的备份

crontab [选项]
选项:-e,编辑 crontab 定时任务;-l,查询 crontab 任务;-r,删除当前用户所有的 crontab 任务
如执行完 crontab -e 命令后,输入任务:*/1**** ls -l /etc/ > /tmp/to.txt,表示每小时每分钟执行 ls -l /etc/ > /tmp/to.txt 指令。参数说明如下:

参数 含义 取值
第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几小时 0-23
第三个* 一个月当中的第几天 1-31
第四个* 一年当中的第几月 1-12
第五个* 一周当中的星期几 0-7(0和7都代表星期日)
* 代表任何时间
, 代表不连续的时间,比如08,12,16***就代表每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围,比如05**1-6就代表在周一到周六的5点0分执行命令
*/n 代表没隔多久执行一次,比如*/10****就代表每隔十分钟就执行一次命令

注意到在指定 “哪一天” 执行脚本时有两个字段可以供我们选择,一个是 “每个月的第几天”,一个是 “每周的第几天”。那么这两个字段共同作用的结果是什么:
1.如果两个字段都做了限制,即都不为 ‘*’,那么最终的结果是两个字段或的效果,即只要某一天满足这两个条件其中的任意一个,都会执行
2.如果有其中一个字段为 ‘*’,那么最终结果就是另一个字段的效果
3.如果两个字段都为 ‘*’,那么自然不对天数做任何限制,每一天都执行

使用shell脚本进行任务调度:

  1. 先编写一个 .sh 脚本文件,在其中输入要执行的任务
  2. 要设置对这个文件具有可执行 (x) 权限才能执行这个脚本
  3. crontab -e 后设置任务

service crond restart 重启任务调度

定时任务执行失败怎么处理

  1. 首先,检查脚本是否正常可以执行
  2. crontab -e 或 crontab -l 查看定时任务的设置是否正确
  3. tail -f /var/log/cron,查看定时任务的执行日志

如果任务的执行是正常的,那么应该就是脚本文件中出了问题,可能是脚本文件的路径问题,需要继续尝试测试,排查

磁盘分区和挂载

分区基本知识

  • mbr 分区
    1.最多支持四个主分区
    2.系统只能安装在主分区
    3.扩展分区要占一个主分区
    4.mbr 最大只支持 2TB,但拥有最好的兼容性
  • gtp 分区
    1.支持无限多个主分区 (但操作系统可能限制,比如 windows 下最多只能128个分区)
    2.最大支持 18EB 的大容量
    3.Windows7 64位以后支持 gtp

Linux分区

  1. Linux无论有几个分区,分给哪一目录使用,归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
  2. Linux采用了一种叫 “载入” 的方法,他的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得,将某个分区挂载到一个文件上

硬盘说明

Linux硬盘分为 IDE硬盘 和 SCSI硬盘。目前基本上是 SCSI硬盘,标识为sdx~,sd 表示分区所在设备的类型是SCSI硬盘,x 是盘号 (a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),~ 代表分区,前四个分区用 1 到 4 表示,他们是主分区或扩展分区,从 5 开始就是逻辑分区
lsblklsblk -f 查看所有设备挂载情况
blkid 查看块设备的文件系统类型,LABEL,UUID 等信息

如何增加一块硬盘

  1. 为虚拟机增加硬盘
  2. 硬盘分区fdisk
  3. 格式化 mkfs -t ext4 要格式化的硬盘分区
  4. 挂载:先创建要分区要挂载的目标目录,然后挂载:mount 要挂载的分区 要挂载的目录。这样实现的挂载,在系统重新启动后会失效,需要重新挂载
    解除挂载:umount 硬盘分区的路径umount 挂载目录
  5. 设置自动挂载(永久挂载,重启系统后仍然可以挂载到目标目录,将挂载信息添加到 /etc/fstab 中即可):vim /etc/fstab,新增一行分区的路径 挂载的目录 ext4 defaults 0 0,保存,然后执行mount -a即可 (执行该命令可以自动挂载 /etc/fstab 文件没有挂载的设备,或者重启系统也可以达到目的)

查询磁盘使用情况

df -h/df -l/df -lh 查询系统整体磁盘使用情况
du -h 目录 查询指定目录的磁盘占用情况
选项-s,指定目录占用大小汇总;-h,带计量单位;-a,含文件;-c,列出明细的同时增加汇总值;--max-depth=n,指定子目录深度为n
wc -l 统计文件个数
ls -l 指定目录 | grep "^-" | wc -l 统计指定文件夹下文件的个数。“^-” 表示以-开头;如果是统计目录个数,改为 “%d” 即可;ls 的选项加上 -R 就可以递归统计包括子目录下的 文件/目录 个数
tree 指定目录 用树状结构展示指定目录的结构,如果不指定目录就默认是当前目录 (初次使用要用yum install tree命令安装插件)

正则表达式

常与正则表达式配合的命令有 grep,awk
grep "正则表达式" 目标文件 从目标文件中得到符合正则表达式的内容

有些匹配式不用加双引号也能执行,如匹配单个字符的式子;但为了统一,都加上双引号更好

\用于转义,比如下面的.用于匹配u任意单个字符,如果想匹配 ‘.’ 字符本身就需要加上反斜杠转义

匹配单个范围内的字符[a-z],表示匹配单个处于 a-z 的字符,其他范围也可以是 A-Z,0-9 等等以连续区间表示的范围,也可以是某些离散的取值,如 [a-c] 与 [abc] 是等价的;[^...]表示反义
匹配任意单个字符.
匹配任意多个字符.*
以什么开头^x,表示以 x 开头,x 可以是字符也可以是字符串,如grep -E "^abcd" myTest.txt 表示匹配文件中以 “abcd” 开头的行
以什么结尾x$,表示以 x 结尾
匹配空行^$
扩展的匹配符 (使用扩展匹配符需使用 egrep 命令或 grep 命令加上 -E 选项) :
x+,表示重复前面的字符或字符串 x 一次或一次以上
x?,表示重复前面的字符或字符串 x 0次或1次
|,表示或,可以匹配多个字符串,有一个匹配上即可。如grep -E "^abcd|^b" myTest.txt 表示匹配文件中以 “abcd” 或者 “b” 开头的行,只要是这两种情况之一的行都会显示出来。注意,不能多加空格,如这里写成"^abcd |^b "是完全不一样的
可以用多次 grep 达到且的效果

[Linux]-基础知识及命令学习相关推荐

  1. Day 01嵌入式学习之Linux基础知识和命令操作

    学习嵌入式开发的随堂笔记 Day 01嵌入式学习之linux基础知识和命令操作 1.英文: read:读,r字母 write:写,w字母 execute:执行,运行,x字母 directory:目录, ...

  2. linux 基础知识及命令总结

    1.mkdir   创建目录 -p 创建多级目录  mkdir -p /data/test -m, --mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask -p, ...

  3. Linux基础知识与命令

    目录 一.Shell 1.Shell定义 2.不同的Shell环境 二.Linux命令的分类 1.Shell与内部命令.外部命令 2.help命令可以查看内部命令 3.使用type命令来区分内外部命令 ...

  4. 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...

  5. linux基础知识-常用命令,收藏。

    前言 学前须知 适用人群:开发.测试.运维等等 文档用途:linux入门学习.命令备忘录.面试复习 学习途径:书籍(鸟哥的Linux私房菜).视频:慕课网等.百度谷歌搜索.qq群等 学习环境:虚拟机V ...

  6. 不愧是阿里P8!后端程序员必备的Linux基础知识+常见命令

    前言 要相信,你现在所有的努力和付出都会在将来的某一天回报给你! 首先阿里巴巴作为国内互联网行业的领头羊,培养了一代又一代的IT技术人才,很多想进阿里这些互联网大厂的程序员看中的不仅仅是高薪+丰厚的福 ...

  7. linux基础知识和命令试题,Linux基础试题及答案

    1. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么*** B *** A. NID B. PID C. UID D. CID 2. 用vi打开一个文件,如何用字母&q ...

  8. linux基础知识和命令

    Linux历史 Linux是一套免费使用的类Unix操作系统 linux创始人:  林纳斯·托瓦茨 UNIX系统是一个多用户,多任务的分时操作系统. vim   vim 是vi的改进版本 vi/vim ...

  9. LINUX基础知识及命令

    1.什么是shell Linux系统中运行的一种特殊程序(程序是一串特定的指令序列去执行一定的特殊的任务) 在用户和内核之间充当"翻译官" 用户登录Linux系统时,自动加载一个S ...

最新文章

  1. nanodet训练voc数据集
  2. 开源在线阅读技术资源
  3. ThinkSNS积分商城系统 一站式解决企业商城建站需求
  4. ubuntu系统debootstrap的使用
  5. LeetCode - Reorder List
  6. Redhat 6.4_联网 yum 配置
  7. grid++中打印表格时怎么让每页有打印表头_1分钟!学会快速打印标题行,轻松搞定不加班...
  8. javaweb 学习资源
  9. 通过编程解决问题的正确思路
  10. Tomcat5.5.9+JSP经典配置实例
  11. 720P实时超分和强悍的恢复效果:全知视频超分OVSR
  12. activity流程变量使用
  13. DEDECMS首页调用单页文档内容并带过滤HTML的方法
  14. Mac OS X中Apache开启ssl
  15. Mybatis-Plus注解自定义sql分页查询
  16. 计算机字体库位置,电脑cad软件字体库的路径怎么添加
  17. Pygame教程(预备篇)
  18. 提示“百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥”解决方案
  19. 微信小程序input层级穿透解决
  20. 【AutoSec 汽车安全直播课】:整车网络安全威胁分析与风险评估(TARA)方法与实践

热门文章

  1. LVM(Logical Volume Manager)逻辑卷管理
  2. HR SaaS系统,虎蔓开创云端人力资源管理的领先新模式!
  3. 保暖防风又抗冻 春节出游当然要选头戴式耳机
  4. 郭台铭执念夏普,富士康转型梦福兮祸兮?
  5. Solr in Action 第一章翻译(待整理)
  6. Vue-change和input事件
  7. go-testify和robfig
  8. c语言开发安装浏览器,用Visual C++开发简易浏览器
  9. antdvue上传组件onChange状态值为uploading的问题
  10. 1架飞机,加满油可以跑1的距离,问N架飞机最多能跑多远