本文内容主要基于linuxjourney.com 部分网络内容补充

基本命令

pwd (Print Working Directory)

打印当前工作目录

cd (Change Directory)

需要了解下相对路径和绝对路径

  • Absolute path: This is the path from the root directory. The root is the head honcho. The root directory is commonly shown as a slash. Every time your path starts with / it means you are starting from the root directory. For example, /home/pete/Desktop.
  • Relative path: This is the path from where you are currently in filesystem. If I was in location /home/pete/Documents and wanted to get to a directory inside Documents called taxes, I don’t have to specify the whole path from root like /home/pete/Documents/taxes, I can just go to taxes/ instead.

ls (List Directories)

列出文件目录

扩展用法

ls -a 显示隐藏文件
ls -l 显示详细列表
ls -la 可以一起使用 显示详细列表和隐藏文件

ls -R 递归列出目录内容
ls -r 排序时倒序
ls -t 按修改时间排序,最新的在前

touch

新建文件

touch myfile

file

查询文件类型

file myfile.txt

cat

读取文件内容

tips: cat 命令是 concatenate 的缩写

cat myfile.txt

它不适合查看大文件,仅适用于短内容。

扩展:

显示非空的行编号

cat -b myfile.txt

显示所有行编号

cat -n myfile.txt

less

类似于cat命令 , less更适合查看大文件

less myfile.txt

扩展命令

  • q - Used to quit out of less and go back to your shell.
  • Page up, Page down, Up and Down - Navigate using the arrow keys and page keys.
  • g - Moves to beginning of the text file.
  • G - Moves to the end of the text file.
  • /search - You can search for specific text inside the text document. Prefacing the words you want to search with /
  • h - If you need a little help about how to use less while you’re in less, use help.

history & clear

当你想查询之前使用过的命令时 ,history可以帮助你

终端内容很杂乱可以使用clear清屏

cp (Copy)

复制

cp 文件名 目录/文件名
cp myfile ~/Desktop/myfile

多文件复制

  • * the wildcard of wildcards, it’s used to represent all single characters or any string.
  • ? used to represent one character
  • [] used to represent any character within the brackets
cp *.jpg /home/pete/Pictures

目录复制

cp -r Pumpkin/ /home/pete/Documents

覆盖提示

cp -i mycoolfile /home/pete/Pictures

mv (Move)

移动命令

mv 旧文件 新文件

多个bash

移动到不同目录

mv myfile /home/pete/Documents

多文件移动

mv file1 file2 /home/pete/Documents

重命名目录

mv 旧名字 新名字

与 cp 一样,如果您 移动的是 一个文件或目录,它将覆盖同一目录中的任何内容。因此,您可以在覆盖任何内容之前使用 -i 标志来提示您。

mv -i 目录1 目录2

文件备份

mv -b 目录1 目录2

mkdir (Make Directory)

创建目录

mkdir 目录1

递归创建子目录 -p

mkdir -p 目录1/子目录1/子目录2/子目录3......

rm (Remove)

tips:会直接删除文件 回收站不会留存

删除文件

rm file1

强制删除

rm -f file1

删除提示确认

rm -i file1

删除目录

rm -r 目录

扩展

rmdir 也可以删除目录

find

寻找文件

find /home -name puppies.jpg

使用 find 您必须指定要搜索的目录,要搜索的内容,在这种情况下,我们尝试查找名称为 puppies.jpg 的文件。

您可以指定要查找的文件类型。

find /home -type d -name MyFolder

help

Linux 有一些很棒的内置工具可以帮助您如何使用命令或检查命令可用的标志。一个工具,help,是一个内置的 bash 命令,它为其他 bash 命令(echo、logout、pwd 等)提供帮助。

help echo

还可以

echo --help

man

我希望其中一些程序有一个手册,这样我们就可以看到更多关于它们的信息。幸运的是,他们做到了!恰当命名的手册页,您可以使用 man 命令查看命令的手册。

man ls

手册页是大多数 Linux 操作系统默认内置的手册。它们提供有关命令和系统其他方面的文档。

尝试一些命令以获取有关它们的更多信息。

whatis

简要说明

whatis cat

alias

为常用的长命令换个名称

alias foobar='ls -la'

此时在命令行输入foobar就会代替ls -la的效果

这会在下次重启时还原 如果想添加永久别名 需要在下面这个地方添加

~/.bashrc

删除别名

unalias 
unalias foobar

exit

退出终端

exit

或注销

logout

文本操作命令

grep

文本内容查询

grep 查询关键词 查询文件名
grep python 123.txt

tips: 搜带空格的关键词需要加上双引号

例 grep “hello python” 123.txt

选项 说明
-n 显示匹配行号
-i 不区分大小写
-v 显示不包含匹配文本的所有行

模式查找

模式 说明
^a 行首匹配
a$ 行尾匹配

echo

echo hello
echo hello > a

配合重定向使用

重定向 说明
> 覆盖
>> 追加内容
ls -lh >> a
tree . >> a

| pipe 管道

管道可以传递命令

ls -lha ~ | more
ls -lha ~ | grep Do
ls -lha ~ | grep Do > output.txt

远程管理常用命令

shutdown

关机 重启

shutdown 选项 时间

tips 不指定任何参数将会在1分钟后关闭电脑

重启

shutdown -r
reboot

常用命令

# 重新启动操作系统,其中 now 表示现在
$ shutdown -r now

# 立刻关机,其中 now 表示现在
$ shutdown now

# 系统在今天的 20:25 会关机
$ shutdown 20:25

# 系统再过十分钟后自动关机
$ shutdown +10

# 取消之前指定的关机计划
$ shutdown -c

查看配置网卡信息

ifconfig

查询当前电脑网卡配置信息

tips:通过管道快速查找ip地址

ifconfig | grep inet
  • 127.0.0.1被称为 本地回环\环回地址 一般测试本机网卡是否正常

ping

检测目标ip连接

ping ip地址
ping 127.0.0.1

远程管理ssh scp

ssh

远程登陆

ssh [-p port] user@remote
  • user 是在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP/域名,或者是 后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定,就为默认值 22

常见端口号

SSH 服务器	22
Web 服务器 80
HTTPS 443
FTP 服务器 21

Windows连接同网段Ubuntu虚拟机

ssh -p 22 user@ip地址

如果被拒绝了你还需要在Ubuntu上安装openssh-server

sudo apt install openssh-server

scp

远程拷贝文件

tips : scp 中 -P是大写字母 P

# 把本地当前目录下的 01.py 文件 复制到 远程 家目录下的 Desktop/01.py
# 注意:`:` 后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py

# 把远程 家目录下的 Desktop/01.py 文件 复制到 本地当前目录下的 01.py
scp -P port user@remote:Desktop/01.py 01.py

# 加上 -r 选项可以传送文件夹
# 把当前目录下的 demo 文件夹 复制到 远程 家目录下的 Desktop
scp -r demo user@remote:Desktop

# 把远程 家目录下的 Desktop 复制到 当前目录下的 demo 文件夹
scp -r user@remote:Desktop demo

scp -P 22 源文件地址 user@remote:目标地址

复制文件夹

scp -P 22 -r 源文件地址 user@remote:目标地址

tips:FTP传输文件 端口填写21

https://filezilla-project.org/

ssh进阶

  • 免密码登录
  • 配置别名

免密码登录

步骤
配置公钥
执行 ssh-keygen 即可生成 SSH 钥匙,一路回车即可
上传公钥到服务器
执行 ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥

配置别名

每次都输入 ssh -p port user@remote,时间久了会觉得很麻烦,特别是当 user, remote 和 port 都得输入,而且还不好记忆

而 配置别名 可以让我们进一步偷懒,譬如用:ssh mac 来替代上面这么一长串,那么就在 ~/.ssh/config 里面追加以下内容:

Host mac
HostName ip地址
User itheima
Port 22

保存之后,即可用 ssh mac 实现远程登录了,scp 同样可以使用

用户权限相关命令

序号 权限 英文 缩写 数字代号
01 read r 4
02 write w 2
03 执行 excute x 1

ls -l扩展

传送门:点我

ls -l 可以查看文件夹下文件的详细信息,从左到右依次是:

  • 权限,第 1 个字符如果是 d 表示目录
  • 硬链接数,通俗地讲,就是有多少种方式,可以访问到当前目录/文件
  • 拥有者,家目录下 文件/目录 的拥有者通常都是当前用户
  • 组,在 Linux 中,很多时候,会出现组名和用户名相同的情况,后续会讲
  • 大小
  • 时间
  • 名称

chmod

修改权限的命令

chmod 可以修改 用户/组 对 文件/目录 的权限

chmod +/-rwx 文件名|目录名

sudo

susubstitute user 的缩写,表示 使用另一个用户的身份

得到超级用户权限

语法

sudo -i
sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
sudo command

参数说明

  • -i 切换root
  • -V 显示版本编号
  • -h 会显示版本编号及指令的使用方式说明
  • -l 显示出自己(执行 sudo 的使用者)的权限
  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在背景执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

组管理

添加组

groupadd

删除组

groupdel

确认组信息

cat /etc/group

修改文件/目录名所属组

chgrp -R 组名 文件/目录名

用户管理

新建用户

useradd -m -g 组名 用户名

-m 自动建立用户家目录

-g 指定用户组

设置密码

passwd 用户名

删除用户

userdel -r 用户名

查询用户信息

id

查询uid和gid

id 用户名

passwd 文件

/etc/passwd 文件存放的是用户的信息,由 6 个分号组成的 7 个信息,分别是

  1. 用户名
  2. 密码(x,表示加密的密码)
  3. UID(用户标识)
  4. GID(组标识)
  5. 用户全名或本地帐号
  6. 家目录
  7. 登录使用的 Shell,就是登录之后,使用的终端命令,ubuntu 默认是 dash

who

查看当前所有登录的用户列表

whoami

查看当前登录用户的账户名

修改用户组

usermod

  • usermod 可以用来设置 用户 的 主组 / 附加组 和 登录 Shell,命令格式如下:
  • 主组:通常在新建用户时指定,在 etc/passwd 的第 4 列 GID 对应的组
  • 附加组:在 etc/group 中最后一列表示该组的用户列表,用于指定 用户的附加权限

提示:设置了用户的附加组之后,需要重新登录才能生效!

# 修改用户的主组(passwd 中的 GID)
usermod -g 组 用户名

# 修改用户的附加组
usermod -G 组 用户名

# 修改用户登录 Shell
usermod -s /bin/bash 用户名

注意:默认使用 useradd 添加的用户是没有权限使用 sudo 以 root 身份执行命令的,可以使用以下命令,将用户添加到 sudo 附加组中

usermod -G sudo 用户名

which(重要)

/etc/passwd 是用于保存用户信息的文件
/usr/bin/passwd 是用于修改用户密码的程序

  • which 命令可以查看执行命令所在位置,例如:
which ls

# 输出
# /bin/ls

which useradd

# 输出
# /usr/sbin/useradd

bin 和 sbin

bin 存放普通的可执行文件, sbin 存放与系统管理相关的可执行文件.

  • 在 Linux 中,绝大多数可执行文件都是保存在 /bin、/sbin、/usr/bin、/usr/sbin
  • /bin(binary)是二进制执行文件目录,主要用于具体应用
  • /sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
  • /usr/bin(user commands for applications)后期安装的一些软件
  • /usr/sbin(super user commands for applications)超级用户的一些管理程序

tips:

cd 这个终端命令是内置在系统内核中的,没有独立的文件,因此用 which 无法找到 cd 命令的位置

切换用户

切换用户

su 用户名

切换用户,并且切换目录

su - 用户名

退出当前用户

exit

切换root用户

su
su -

tips: 出现su: 认证失败

说明你的root用户当前没有密码 需要设置一个

sudo passwd root

设置好密码就可以切换了

修改文件权限

序号	命令	 作用
01 chown 修改拥有者
02 chgrp 修改组
03 chmod 修改权限

示例:

# 修改文件|目录的拥有者
chown 用户名 文件名/目录名

# 递归修改文件|目录的组
chgrp -R 组名 文件名/目录名

# 递归修改文件权限
chmod -R 755 文件名/目录名
  • chmod 在设置权限时,可以简单地使用三个数字分别对应 拥有者 / 组 和 其他 用户的权限
# 直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他
chmod +/-rwx 文件名|目录名

文件权限示意图

  • 常见数字组合有(u表示用户/g表示组/o表示其他):
  • 777 ===> u=rwx,g=rwx,o=rwx
  • 755 ===> u=rwx,g=rx,o=rx
  • 644 ===> u=rw,g=r,o=r

系统信息相关命令

  • 本节内容主要是为了方便通过远程终端维护服务器时,查看服务器上当前 系统日期和时间磁盘空间占用情况程序执行情况
  • 本小结学习的终端命令基本都是查询命令,通过这些命令对系统资源的使用情况有个了解

时间和日期

date 查看系统时间
cal 全称 calendar 查看日历,-y 选项可以查看一年的日历

磁盘和目录空间

df

disk free 显示磁盘剩余空间

df -h

du

disk usage 显示目录下的文件大小

du -h [目录名]

进程信息

更多参考:

https://linuxjourney.com/lesson/monitor-processes-ps-command

https://linuxjourney.com/lesson/tracking-processes-top

ps

进程 , 就是当前正在执行的程序

ps

仅显示当前用户通过终端启动的程序

  • PID:进程 ID
  • TTY:与进程关联的控制终端(我们稍后会详细介绍)
  • STAT:进程状态码
  • TIME:总CPU使用时间
  • CMD:可执行文件/命令的名称
ps aux

查看进程的详细状况

a显示所有正在运行的进程,包括其他用户正在运行的进程。

u显示有关进程的更多详细信息。

x列出了所有没有与之关联的 TTY 的进程(显示没有控制终端的进程)

您会注意到您现在看到了更多字段,无需全部记住它们,在稍后的高级流程课程中,我们将再次讨论其中的一些:

  • USER:有效用户(我们正在使用其访问权限的用户)
  • PID:进程 ID
  • %CPU:使用的 CPU 时间除以进程运行的时间
  • %MEM:进程的驻留集大小与机器上物理内存的比率
  • VSZ:整个进程的虚拟内存使用情况
  • RSS:驻留集大小,任务已使用的非交换物理内存
  • TTY:与进程关联的控制终端
  • STAT:进程状态码
  • START:进程的开始时间
  • TIME:总CPU使用时间
  • COMMAND:可执行文件/命令的名称

top

动态显示运行中的进程并且排序

top

单独动态显示某个进程

top -p pid

退出top

ctrl + c
q

kill

杀进程

kill pid

强制杀进程

kill -9 pid

本章总结:

通过ps autop 来找到高占用进程 , 在使用kill 杀掉

tips:不要随便 kill root用户启动的进程

其它常用命令补充

  • 查找文件
    • find
  • 软链接
    • ln
  • 打包和压缩
    • tar
  • 软件安装
    • apt-get

查找文件

  • find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件

查找指定路径下扩展名是 .py 的文件,包括子目录

find /路径 -name “*.py”

查找指定文件类型

find /路径 -type d -name 文件名

示例

  • 搜索桌面目录下,文件名包含 1 的文件
find -name "*1*"
  • 搜索桌面目录下,所有以 .txt为扩展名的文件
find -name "*.txt"
  • 搜索桌面目录下,以数字1开头的文件
find -name "1*"

软链接

建立文件的软链接,用通俗的方式讲类似于 Windows 下的快捷方式

ln -s 源文件目录 软链接的名字

#相对路径
$ln -s demo/a/b/c/01.py 01_xd
#绝对路径
$ln -s home/python/Desktop/demo/a/b/c/01.py 01_jd
  • 注意:

  • 没有-s选项建立的是一个 硬链接文件

    • 两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
  • 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用

演练目标

  1. 将桌面目录下的 01.py 移动到 demo/a/b/c 目录下
  2. 在桌面目录下新建 01.py 的 软链接 FirstPython
    分别使用 相对路径 和 绝对路径 建立 FirstPython 的软链接
  3. FirstPython 移动到 demo 目录下,对比使用 相对路径绝对路径 的区别

硬链接简介(仅作了解)

  • 在使用ln创建链接时,如果没有 -s 选项,会创建一个 硬链接,而不是软链接

演练

  • 1.在 ~/Desktop/demo 目录下建立~/Desktop/demo/b/c/01.py的硬链接 01_hard
  • 2.使用ls -l查看文件的硬链接数(硬链接——有多少种方式可以访问文件或者目录)
  • 3.删除 ~/Desktop/demo/b/c/01.py,并且使用tree来确认 demo 目录下的三个链接文件

软硬链接示意图

关于硬链接的理解 , 可以理解为镜像复制了一份, 改动其内容 另外那个也会被改动

打包压缩

tar

# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径...

# 解包文件
tar -xvf 打包文件.tar
  • tar 选项说明
选项 含义
c 生成档案文件,创建打包文件
x 解开档案文件
v 列出归档解档的详细过程,显示进度
f 指定档案文件名称,f 后面一定是 .tar 文件,所以必须放选项最后

tips: 注意:f 选项必须放在最后,其他选项顺序可以随意

打包解包演练

  1. 删除桌面下的所有内容
  2. 在桌面下新建三个空白文件 01.py02.py03.py
  3. 将这三个文件打一个 py.tar 的包
  4. 新建 tar 目录,并且将 py.tar 移动到 tar 目录下
  5. 解包 py.tar

总结:tar直接解压会直接解压在当前你所在的目录

假如你在桌面下(~/Desktop),你想解压桌面上tar文件夹下的py.tar

tar -xvf tar/py.tar

他一样会解压到桌面(~/Desktop) , 而不是解压到(~/Desktop/tar)

压缩和解压缩

gzip

  • targzip 命令结合可以使用实现文件 打包和压缩
    • tar 只负责打包文件,但不压缩
    • gzip 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.gz

Linux 中,最常见的压缩文件格式就是 xxx.tar.gz

  • tar 命令中有一个选项 -z 可以调用 gzip,从而可以方便的实现压缩和解压缩的功能

  • 命令格式如下:

# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...

# 解压缩文件
tar -zxvf 打包文件.tar.gz

# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
选项 含义
-C 解压缩到指定目录,注意:要解压缩的目录必须存在

指定目录解压缩

tar -zxvf 压缩包地址 -C 指定目录地址
tar -zxvf gz/py.tar.gz -C tar

bzip2

  • tarbzip2 命令结合可以使用实现文件 打包和压缩(用法和 gzip 一样)

    • tar 只负责打包文件,但不压缩,
    • bzip2 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.bz2
  • tar 命令中有一个选项 -j 可以调用 bzip2,从而可以方便的实现压缩和解压缩的功能

  • 命令格式如下:

# 压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径...

# 解压缩文件
tar -jxvf 打包文件.tar.bz2

软件安装

apt

  • apt 是 Advanced Packaging Tool,是 Linux 下的一款安装包管理工具
  • 可以在终端中方便的 安装卸载更新软件包
# 1. 安装软件
$ sudo apt install 软件包

# 2. 卸载软件
$ sudo apt remove 软件名

# 3. 更新已安装的包
$ sudo apt upgrade

安装演练

# 一个小火车提示
$ sudo apt install sl

# 一个比较漂亮的查看当前进程排名的软件
$ sudo apt install htop

4.2 配置软件源

  • 如果希望在 ubuntu 中安装软件,更加快速,可以通过设置镜像源,选择一个访问网速更快的服务器,来提供软件下载/安装服务
  • 提示:更换服务器之后,需要一个相对比较长时间的更新过程,需要耐心等待。更新完成后,再安装软件都会从新设置的服务器下载软件了

所谓镜像源,就是所有服务器的内容是相同的(镜像),但是根据所在位置不同,国内服务器通常速度会更快一些!

003_镜像服务器示意图

001_ubuntu设置软件源

新版本在左下角菜单里>>软件和更新