目录
目录和文件
sudo
pwd
ls
cd
touch
tree
cp
mv
mkdir
rmdir
rm
nano
cat
more
head
tail
grep
echo
管道 |
apt-get
poweroff
文件权限
ls查看权限
chmod 修改权限
文件默认权限
一个使用Python的技巧
远程管理
shutdown
ifconfig
ping
ssh基础
scp
ssh高级
用户权限
chmod
sudo
组管理终端命令
查看用户信息
password文件
usermod
which
bin/sbin
切换用户
修改文件权限
系统信息
时间和日期
磁盘信息
进程信息
其他
find
ln
tar
gzip
bzip2
apt
配置软件源
友情链接:
https://zhouzhuming.tech/categories/Linux%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/
$ sudo su
# SuperUserDo(简写成”sudo”),根目录权限
~/Documents$ pwd
# 获取当前所在的路径(绝对路径)
~$ ls
# 显示当前目录的所有文件和文件夹
~$ ls -l
# 输出详细信息 -l (long 的简写). 这个指令会打印出文件的权限 (-rw-rw-r-- 之后我们在细说这个), 用户名, 文件大小, 修改日期, 文件名
~$ ls -a
# -a (all 的简写) 显示所有文件 . 这里还会显示隐藏的文件 (以 . 开头的)
~$ ls -lh
# -lh (human), 直接 -l 不方便人看, 这个指令是为了方便给人观看的. 注意这里的文件大小使用了 K, MB, GB 之类概括
~$ ls --help
# 还有很多其他的功能, 我们可以通过 --help 来查看
~$ cd Documents/
# 跳转到对应的Documents目录
~/Documents$ cd ..
# 返回上一级目录
~$ cd Documents/Folder1/
# 去往子文件夹Folder1
~/Documents/Folder1$ cd -
# 返回你刚刚所在的目录(也就是你的上一条命令所在的目录)
~/Documents/Folder1$ cd ../../
# 向上返回两次(再往上返回可以依次类推)
~/Documents/Folder1$ cd ~
# 去往当前用户的主目录
~/Documents$ touch file2.txt
# 建立一个文件名为file2的空的文本文档
~/Documents$ touch file3.txt file4.txt file5.txt
# 同时建立三个空的文本文档(也可以不指定文件的扩展名)
~/Documents$ tree [目录名]
# 查看当前目录下的文件目录结构
~/Documents$ tree -d [目录名]
# 只会显示当前目录下的目录结构而不显示文件结构
~/Documents$ tree /f>tree.txt
# 将生成的文件目录树写入到tree.txt
~$ cp 源文件 目标文件
~/Documents$ cp file1 file1copy
# 将file1复制成file1copy
~/Documents$ cp -i file1 file1copy
# -i (interactive) 注意: 如果 file1copy 已经存在, 它将会直接覆盖已存在的 file1copy, 如果要避免直接覆盖, 我们在 cp 后面加一个选项。
# 在这句问句后面打上 “Yes”, “Y”, 或者任何大小写形式的 “y” 和 “yes”, 它将进行覆盖操作. 直接回车或者打其他字母, 就会放弃复制这项操作。
~/Documents$ cp file1 Folder1/
# 将file1复制到文件夹Folder1
~/Documents$ cp -R Folder1/ Folder2/
# 复制文件夹, 需要加上 -R (recursive)
~/Documents$ cp file* Folder1/
# 复制多个文件。复制名字部分相同的多个文件到某个文件夹, * 是说"你就找文件名前面是 file 的文件, 后面是什么名字无所谓"
~/Documents$ cp file2.txt file5.txt Folder1/
# 或者你可以单独选定几个文件, cp 会默认最后一个选项是要复制去的文件夹. 比如把 file2.txt 和 file5.txt 复制去 Folder1/
~/Documents$ mv file1 Folder1/
# 将file1移动到文件夹Folder1
~/Documents$ mv -i file1 file1rename
# 重命名文件file1为file1rename。因为移动文件到原始的地点, 但是以不同的文件名。所以这种做法不就是在重命名嘛!(加上`-i`覆盖文件前提示)
~/Documents$ mv -f file1 Folder2/
# 将文件file1强制移动到Folder2文件夹下。如果目标文件已经存在,不会询问而会直接覆盖。
~/Documents$ mkdir Folder2/
# 在Documents文件夹下创建一个文件夹Folder2
~/Documents$ mkdir Folder2/folder
# 在文件夹Folder2里面再创建一个子文件夹folder
~/Documents$ mkdir -p A/B/C/D
# 可以递归的创建目录,此处创建了4个目录
~/Documents$ rmdir Folder3
# 删除文件夹Folder3(rmdir只能移除空文件夹!!!)
~/Documents$ rm file1
# 删除单个文件filer1
~/Documents$ rm -i file2
# -i 或 -I 有提示地移除文件 (为了避免误删)
# -i 会每个要移除的文件都进行提示
~/Documents$ rm -I file2 fil3 file4 file5
# -I 超过3个文件才进行提示
~/Documents$ rm -f file1
# 强制删除,忽略不存在的文件,无需提示
~/Documents$ rm -r Folder1/
# -r 或 -R (recursively) 用来删文件夹(递归的删除目录下的内容)
# 和 rmdir 不同, rm -r 可以在文件夹中有文件的情况下删除这个文件夹. 比如我的 Folder1 里有 file1 和 file2 两个文件.
~/Documents$ touch p1.py
# 在Documents目录下创建一个python文件
~/Documents$ nano p1.py
# 用nano命令执行这个文件
~/Documents$ cat -b p1.py
~/Documents$ cat -n p1.py
# -b表示对文件的非空输出行编号
# -n表示对文件的所有行输出行编号
~/Documents$ cat p1.py > p2.py
~/Documents$ cat p2.py
# > 将文件的内容放到另一个文件里,这里我们将p1.py的内容写入到p2.py里面。
~/Documents$ cat p1.py p2.py > p3.py
~/Documents$ cat p3.py
# > 将多个文件的内容打包一起放入另一个文件,这里我们将p1.py的内容和p1.py的内容一同写入到p2.py里面。
# 在显示的时候,两个文件的内容会分开显示
~/Documents$ cat p2.py >> p3.py
~/Documents$ cat p3.py
# >> 将内容添加在一个文件末尾,这里我们将p2.py的内容添加到p3.py的末尾。
~/Documents$ more p1.py
# 分屏查看p1.py文件的内容。如果要查看后续的内容,可以按住空格键(显示手册页的下一屏)或者回车键(一次滚动手册页的一行)
# b:回滚一屏 f:前滚一屏 q:退出
~/Documents$ head -n 5 p2.py
# head [-n number] filename
# -n :后面接数字,代表显示几行的意思
~/Documents$ tail -n 6 p3.py
# tail [-n number] filename
# -n :后面接数字,代表显示几行的意思
$ grep [-acinv] [--color=auto] 搜寻字符串 filename
# -a : 将 binary 文件以 text 文件的方式进行搜寻
# -c : 计算找到个数
# -i : 忽略大小写
# -n : 输出行号
# -v : 反向选择,亦即显示出 没有搜寻字符串内容 的那一行
# --color=auto :找到的关键字加颜色显示
~/Documents$ grep hello p1.python
# 在p1.py文件中搜索"hello"这个单词
$ grep -n 'the' regular_express.txt
# 以下为相应的显示结果
# 8:I can't finish the test.
# 12:the symbol '*' is represented as start.
# 15:You are the best is mean you are the no. 1.
# 16:The world Happy is the same with "glad".
# 18:google is the best tools for search keyword
$ grep -n 'go\{2,5\}g' regular_express.txt
~/Documents$ echo Hello World > 1.txt
~/Documents$ echo Python >> 1.txt
# 将'Hello World'写入到1.txt中
# 将'Python'追加到1.txt文件的末尾
|
~/Documents$ ls -lha | more
~ sudo apt-get update
~ sudo dnf update
~ sudo apt-get install
# 安装相应的软件或工具
~$ sudo poweroff
在 Terminal 中查看文件的权限的命令可以用ls -l
或者ls -lh。
如果你只是想单独看看某一个具体的文件的权限,只需要在后面加上相应的文件名就可以了,比如ls -lh p1.py
Type
: 很多种 (最常见的是 -
为文件, d
为文件夹, 其他的还有l
, n
… 这种东西, 真正自己遇到了, 网上再搜就好, 一次性说太多记不住的)。
User
: 后面跟着的三个空是使用 User 的身份能对这个做什么处理 (r
可读; w
可写; x
可执行; -
不能完成某个操作)。
Group
: 一个 Group 里可能有一个或者多个 user, 这些权限的样式和 User 一样。
Others
: 除了 User 和 Group 以外人的权限。
~$ chmod [谁] [怎么修改] [哪个文件]
[谁]
u
: 对于 User 修改g
: 对于 Group 修改o
: 对于 Others 修改a
: (all) 对于所有人修改[怎么修改]
+
, -
, =
: 作用的形式, 加上, 减掉, 等于某些权限r
, w
, x
或者多个权限的组合, 比如 rx
[哪个文件]
也可以用数字来表示相应的权限,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
文件默认权限:文件默认没有可执行权限,因此为666
,也就是 -rw-rw-rw-
。
目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为777
,也就是 drwxrwxrwx
。
通常, .py
没有x
权限, 需要这样执行:
~/Documents/Folder1$ python3 p1.py
有了 x
(可执行权限), 可以这样:
~/Documents/Folder1$ ./p1.py
有一个前提,需要在这个Python脚本p1.py的开头加上:
#!/usr/bin/python3
print("Hello World")
~/Documents$ shutdown 选项 时间
~/Documents$ shutdown -r
# -r表示重新启动系统
# 重新启动操作系统,其中 now 表示现在
$ shutdown -r now
# 立刻关机,其中 now 表示现在
$ shutdown now
# 系统在今天的 20:25 会关机
$ shutdown 20:25
# 系统再过十分钟后自动关机
$ shutdown +10
# 取消之前指定的关机计划
$ shutdown -c
# 查看网卡配置信息
$ ifconfig
# 查看网卡对应的 IP 地址
$ ifconfig | grep inet
ensXX
表示.127.0.0.1
被称为本地回环/环回地址,一般用来测试本机网卡是否正常# 检测到目标主机是否连接正常
$ ping IP地址
# 检测本地网卡工作正常
$ ping 127.0.0.1
Secure Shell(SSH)
协议连接到远程计算机的软件程序SSH
是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议
SSH协议
可以有效防止远程管理过程中的信息泄露SSH协议
可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗SSH
的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度1) 域名和端口号
域名:
端口号:
SSH服务器
的默认端口号是22
,如果是默认端口号,在连接的时候,可以忽略序号 | 服务 | 端口号 |
---|---|---|
01 | SSH服务器 | 22 |
02 | Web服务器 | 80 |
03 | HTTPS服务器 | 443 |
04 | FTP服务器 | 21 |
2) SSH客户端的简单使用
ssh [-p port] user@remote
user
是在远程机器上的用户名,如果不指定的话默认为当前用户remote
是远程机器的地址,可以是IP/域名,或者是后面会提到的别名port
是SSH Server监听的端口,如果不指定,就默认为22
exit
退出当前用户的登录# 把本地当前目录下的01.py文件复制到远程Home目录下的Desktop/01.py
# 注意:`:` 后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py
# 把远程Home目录下的Desktop/01.py文件复制到本地当前目录下的01.py
scp -P port user@remote:Desktop/01.py 01.py
# 加上-r选项可以传送文件夹
# 把当前目录下的demo文件夹复制到远程Home目录下的Desktop
scp -r demo user@remote:Desktop
# 把远程Home目录下的Desktop复制到当前目录下的demo文件夹
scp -r user@remote:Desktop demo
选项 | 含义 |
---|---|
-r | 若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名 |
-P | 若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口 |
1) 免密码登陆:
步骤:
ssh-keygen
即可生成SSH
钥匙,一路回车即可ssh-copy-id -p port user@remote
,可以让远程服务器记住我们的公钥
非对称加密算法
- 使用公钥加密的数据,需要使用私钥解密
- 使用私钥加密的数据,需要使用公钥解密
2) 配置别名:
而配置别名可以让我们进一步偷懒,譬如用:ssh mac
来替代上面这么一长串,那么就在 ~/.ssh/config
里面追加以下内容:
Host mac
HostName ip地址
User itheima
Port 22
chmod
可以修改用户/组对文件/目录的权限chmod +/-rwx 文件名|目录名
su
是substitute user的缩写,表示使用另一个用户的身份sudo
命令用来以其他身份来执行命令,预设的身份为root
sudo
时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码序号 | 命令 | 作用 |
---|---|---|
01 | groupadd 组名 | 添加组 |
02 | groupdel 组名 | 删除组 |
03 | cat/etc/group | 确认组信息 |
04 | chgrp -R 组名 文件/目录名 | 递归修改文件/目录的所属组 |
序号 | 命令 | 作用 |
---|---|---|
01 | id[用户名] | 查看用户 UID 和 GID 信息 |
02 | who | 查看当前所有登录的用户列表 |
03 | whoami | 查看当前登录用户的账户名 |
etc/passwd
文件存放的是用户的信息,由6个分号组成的7个信息,分别是:
Shell
,就是登录之后,使用的终端命令,ubuntu
默认是dash
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 用户名
/etc/passwd
是用于保存用户信息的文件/usr/bin/passwd
是用于修改用户密码的程序which
命令可以查看执行命令所在的位置,例如:which ls
# 输出
# /bin/ls
which useradd
# 输出
# /usr/sbin/useradd
cd
这个终端命令是内置在系统内核中的,没有独立的文件,因此用which
无法找到 cd
命令的位置
在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
)超级用户的一些管理程序序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su - 用户名 | 切换用户,并且切换目录 | - 可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前登录账户 |
su
不接用户名,可以切换到root
,但是不推荐使用,因为不安全exit
示意图如下:序号 | 命令 | 作用 |
---|---|---|
01 | chown | 修改拥有者 |
02 | chgrp | 修改组 |
03 | chmod | 修改权限 |
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
# 递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
# 直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他
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
序号 | 命令 | 作用 |
---|---|---|
01 | date | 查看系统时间 |
02 | cal | calendar查看日历,-y 选项可以查看一年的日历 |
序号 | 命令 | 作用 |
---|---|---|
01 | df -h | disk free 显示磁盘剩余空间 |
02 | du -h [目录名] | disk usage 显示目录下的文件大小 |
选项说明:
参数 | 含义 |
---|---|
-h | 以人性化的方式显示文件大小 |
所谓进程,通俗地说就是当前正在执行的一个程序
序号 | 命令 | 作用 |
---|---|---|
01 | ps aux | process status 查看进程的详细状况 |
02 | top | 动态显示运行中的进程并且排序 |
03 | kill [-9] 进程代号 | 终止指定代号的进程,-9 表示强行终止 |
ps
默认只会显示当前用户通过终端启动的应用程序
ps
选项功能说明
选项 | 含义 |
---|---|
a | 显示终端上的所有进程,包括其他用户的进程 |
u | 显示进程的详细状态 |
x | 显示没有控制终端的进程 |
- 使用
kill
命令时,最好只终止由当前用户开启的进程,而不要终止root
身份开启的进程,否则可能导致系统崩溃- 要退出
top
可以直接输入q
find
find
命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件
序号 | 命令 | 作用 |
---|---|---|
01 | find [路径] -name “*.py” | 查找指定路径下扩展名是 .py 的文件,包括子目录 |
find -name "*1*"
# 搜索桌面目录下,文件名包含 1 的文件
find -name "*.txt"
# 搜索桌面目录下,所有以 .txt 为扩展名的文件
ln
序号 | 命令 | 作用 |
---|---|---|
01 | ln -s 被链接的源文件 链接文件 | 建立文件的软链接,用通俗的方式讲类似于Windows下的快捷方式 |
- 没有
-s
选项建立的是一个硬链接文件(两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接)- 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
在Linux中,文件名和文件的数据是分开存储的
硬链接数 == 0
才会被删除ls -l
可以查看一个文件的硬链接的数量(硬链接——有多少种方式可以访问文件或者目录)tar
打包压缩是日常工作中备份文件的一种方式,tar
是Linux中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件
在不同的操作系统中,常用的打包压缩方式是不同的:
Windows
常用rar
Mac
常用zip
Linux
常用tar.gz
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径...
# 解包文件
tar -xvf 解包文件.tar
选项 | 含义 |
---|---|
c | 生成档案文件,创建打包文件 |
v | 解开档案文件 |
x | 列出归档解档的详细过程,显示进度 |
f | 指定档案文件名称,f后面一定是 .tar 文件,所以必须放选项最后 |
tar
与gzip
命令结合可以使用实现文件打包和压缩
tar
只负责打包文件,但不压缩gzip
压缩tar
打包后的文件,其扩展名一般用xxx.tar.gz
在tar
命令中有一个选项-z
可以调用gzip
,从而可以方便的实现压缩和解压缩的功能
# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...
# 解压缩文件
tar -zxvf 解包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 解包文件.tar.gz -C 目标路径
选项 | 含义 |
---|---|
-C | 解压缩到指定目录,注意:要解压缩的目录必须存在 |
tar
与bzip2
命令结合可以使用实现文件打包和压缩(用法和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
ubuntu
中安装软件,更加快速,可以通过设置镜像源,选择一个访问网速更快的服务器,来提供软件下载/安装服务所谓镜像源,就是所有服务器的内容是相同的(镜像),但是根据所在位置不同,国内服务器通常速度会更快一些!