上了近六周的操作系统理论课,最近终于开始做实验了。关于 Linux 这块,不想学得太深入,但是以后部署项目到服务端也会涉及到这部分的知识,所以一些基本的概念和操作还是有必要学一学的。这篇笔记就作为平时查看的手册。
以下操作基于 Ubuntu 。
帮助指令
1. man
用法:man + 参数
查看相关命令、相关文件等的使用手册。Ctrl+f 上一页,Ctrl+b 下一页,Ctrl+Home 第一页,Ctrl+End 最后一页,q 退出回到终端
输入 man man
查找 man
命令本身的使用手册:
可以看到数字代表相关类型的帮助所在的章节,比如数字 1 就代表 shell 指令的相关帮助,所以 man man
等价于 man 1 man
。之所以要用数字进行区分,是为了防止重名带来的指向不明确,比如 passwd
可能是文件或者指令,当加上数字 1 的时候,指的是指令;加上 5 的时候,指的是文件。
如果不知道指的是什么,就用 man -a xxx
,这样就默认在所有章节的手册中查找相关帮助。
使用手册默认是英文的,可以安装汉化包(先切换到 root 用户):
apt-get install manpages-zh
vi /etc/manpath.config
:1,$s#/usr/share/man#/usr/share/man/zh_CN#g
2. help
用法:
help
+ 参数:内部命令,比如help cd
参数 +
--help
:外部命令,比如ls --help
help
用于查询外部命令和内部命令的使用手册。内部命令指的是 shell 内嵌的(shell builtin),其它命令则是外部命令(is hashed)
3. info
用法:info
+ 参数
info
作为 help
的补充,会更加详细。
目录管理
1. 目录结构
/ :根目录
/bin:存放常用的二进制可执行命令,如 ls,mv 等,通常与 /usr/bin
内容一样。
/dev:存放与设备有关的特殊文件,如 /dev/fd0
代表软盘,/dev/cdrom
代表光盘。
/etc:存放系统管理和配置的文件,如用户的账号、密码以及系统的主要设置。
/home:为用户设置的主目录,每一个普通用户在 home 下都有对应的普通用户家目录,比如 chor 就有 /home/chor
,可用 ~
表示。
/root:root 用户的超级用户家目录,也可用 ~
表示。
/lib:标准程序设计库,或动态链接共享库。
/sbin:系统管理命令,存放系统管理员程序,如 fdisk、mount 等。
/boot:存放 Linux 核心与启动和关闭系统有关的文档。
/mnt:其他文件系统的挂载点。
/var:系统预先设置的工作目录,如各种服务的日志文件和收发的邮件等。
/proc:虚拟目录,是系统内存的映射,通过访问该目录获取系统信息。
/tmp:公用的临时文件存储点。
/usr:最庞大和最主要的目录之一,要用到的应用程序和文件几乎都在这个目录。
- /usr/bin :应用程序
- /usr/sbin:超级用户的管理程序
- /usr/local:存放本地增加的命令
- /usr/lib:存放常用动态链接库和软件包的配置文件
- /usr/src:保存 Linux 内核的源代码,编译内核时必须用到
- /usr/share:Linux 的说明文档
- /usr/include:Linux 下编程需要的头文件
2. 目录查看
pwd
显示当前所在目录(路径)
ls
ls
:显示当前所在路径下的文件
ls
+ 路径:显示指定路径下的文件
ls -l
:显示当前所在路径下的文件,并且带有详情(修改时间、大小、权限等)
ls -a
:显示当前所在路径下的文件,包括隐藏文件
ls -r
:按照文件名逆序显示当前所在路径下的文件
ls -t
:按照时间顺序显示当前所在路径下的文件
ls -R
:递归显示当前所在路径下的文件,包括文件里面的文件
ls -lartR
:上面几种查看方式的组合
ls xxx*
:显示当前所在路径下以 xxx 开头的文件
PS:如果要目标是指定路径下,再加上第三个参数即可
cd
用法:
cd
+ 绝对路径cd
+ 相对路径cd -
:回到上一次 cd 进去的目录cd ~
:回到用户家目录(/home/xxx
或者/root
)
切换当前工作目录。另外,shell 提供了路径补全功能,按 tab 可以自动补全路径
3. 目录创建和删除
mkdir folder1 folder2
:在当前目录下创建 folder1 目录和 folder2 目录
mkdir /etc/folder
:在 etc 目录下创建 folder 目录
mkdir -p f1/f2/f3/f4
:在当前目录下递归创建目录 f1、f2、f3、f4
rmdir folder
:删除 folder 空目录(如果 folder 里面有文件,是无法删除 folder 的)
rmdir -p folder1/folder2
:删除 folder2 空目录,如果删除之后导致 folder1 也变成空目录,则将 folder1 目录也删除
rm -r folder
:删除 folder 目录以及目录下所有文件(Centos 下会进行询问)
rm -r -f folder
(或者 rm -rf folder
):强制删除 folder 目录以及目录下所有文件(无论空还是非空)
4. 目录复制和移动
cp -r /folder2 /folder1
:将目录 folder2 复制到 folder1 目录里
mv /folder /etc
:将 folder 目录移动到 etc 目录里(目录 ——> 目录)
文件管理
1. 文件创建和删除
touch filea fileb
:创建文件 filea 和 fileb
rm filea
:删除文件 filea
2. 文件编辑
cat>filea
:直接在终端中编辑 filea 文件(ctrl+c
保存退出)。无该文件时会自动创建。
cat file1 file2>>file3
:将 file1 和 file2 内容进行拼接,再放到 file3 中。
gedit filea
:打开 filea 文件进行修改
echo 123>filea
:将输出进行重定向,把 123 输出到 filea 文件
3. 文件查看
用法:
cat filea
: 从头到尾查看文本内容
head -10 filea
:查看文本内容前十行
tail -10 filea
:查看文本内容倒数十行
more -5 filea
:支持翻页查看文本内容,一屏显示5行。b
和 space
控制上下翻页
less -5 filea
:支持翻页查看文本内容,一屏显示5行。pageup
和 pagedown
控制上下翻页
wc filea
:统计文件内容信息
PS:常用参数 -f
,同步追踪并显示正在发生更改的文件内容。more
和 less
支持翻页,适合用来查看那些内容超过一屏的文本。
4. 文件复制和移动
cp file /a
:将文件 file 复制到 a 目录里
cp -p file /a
:将文件 file 复制到 a 目录里,并且副本时间和原文件一样
cp -a file /a
:将文件 file 复制到 a 目录里,并且副本时间、权限等都和原文件一样
mv /filea /fileb
:将 filea 重命名为 fileb(文件 ——> 文件)
mv /filea /etc
:将 filea 移动到 etc 目录里(文件 ——> 目录)
mv /filea /etc/fileb
:将 filea 移动到 etc 目录里,并将文件重命名为 fileb
PS:小技巧。如果重名名前后只有局部差异,可以考虑将前后改动包裹在 {}
中。例如 filea
修改为 fileb
,可以这么写:mv file{a,b}
用户管理
1. 创建用户(组)
用法:
useradd chor
:直接创建新用户 chor,但是不生成对应的家目录 /home/chor
adduser chor
:以引导的方式创建新用户 chor,生成对应的家目录 /home/chor
groupadd group1
:创建新用户组 group1
adduser -g group1 chor
:创建新用户 chor 的同时将其分组为 group1
PS:必须以 root 身份创建用户。上述两种方式区别在于是否创建对应家目录,但都会在 /etc/passwd
下添加用户,/etc/shadow
下添加密码。更推荐用 adduser
。
2. 查看用户
id
:查看当前激活用户信息
id chor
:查看 chor 用户的信息
PS:信息中,uid 唯一标识用户,group 是用户所在组,默认以用户名单独建一个组(组的作用在于统一修改多个用户)
who
:查看当前登录用户
whoami
:查看当前终端用户
3. 修改用户
passwd
:修改当前激活用户的密码
passwd chor
:修改 chor 用户的密码
usermod -d /home/chor1 chor
:修改 chor 用户的家目录
usermod -g group1 chor
:修改 chor 用户的所在组为 group1
chage -E 2020-10-01 chor
:设置 chor 用户的生命周期,2020.10.01 时该用户不可用
4. 删除用户(组)
userdel chor
:删除 chor 用户,但保留其家目录(防止删除重要数据)
userdel -r chor
:删除 chor 用户,并且删除其家目录
deluser chor
:删除 chor 用户,但保留其家目录(防止删除重要数据)
userdel --remove-home chor
:删除 chor 用户,并且删除其家目录
groupdel group1
:删除用户组 group1
PS:更推荐用 userdel
5. 切换用户
su chor
:切换到 chor 用户,但当前目录不变
su - chor
:切换到 chor 用户,且当前目录自动切换到 chor 的家目录下
su
:切换到 root 用户
su - root
:切换到 root 用户
exit
:退出当前用户,切换为到 root 用户
权限管理
1. 指令权限
sudo shutdown -c
:以普通用户 chor 的身份执行 root 用户赋予给自己的特权指令 shutdown -c
visudo
:以 root 身份编辑赋予给普通用户的特权指令
2. 文件权限
① 查看权限
ls -l file
:查看文件权限
ls -ld folder
:查看目录权限
查看到信息的时候只需关注前面的部分:
- 在
chor chor
中,第一个chor
代表文件所有者,第二个chor
代表所有者所在组。 - 在
- rw-rw-r--
中 ,第一个-
指示文件是普通类型。第一个rw-
代表文件所有者对该文件的权限,第二个rw-
代表文件所有者所在组对该文件的权限,r--
代表其他用户对该文件的权限。同样的,d rwxrwxr-x
也是一样的,只不过d
指示文件是目录类型(文件夹) - 对于普通类型,
r
、w
、x
分别代表对文件拥有可读可写可执行的权限,-
代表未指定 - 对于目录类型,
r
、w
、x
分别代表对目录拥有可显示目录内文件(ls)、**可修改目录内文件(rm)和可进入目录(cd)**的权限,-
代表未指定 r
、w
、x
可以分别用数字 4、2、1 表示
② 修改权限
chown user1 file
:修改文件所有者
chown :group1 file
:修改文件所有者所在组
chown user1:group1 file
:修改文件所有者和所在组
chgrp group1 file
:修改文件所有者所在组
可以用字符修改权限:
chmod u+rw file
:修改文件所有者对 file 的权限,增加 rw
权限
chmod g-r file
:修改文件所有者所在组对 file 的权限,减去 r
权限
chmod o=rwx file
:修改其它用户对 file 的权限,为 rwx
权限
chmod a-w file
:修改所有用户对 file 的权限,去掉所有出现过的 w
权限
PS:u 代表文件所有者,g 代表所有者所在组,o 代表其它用户,a 代表所有用户。操作方式包括 +,-,=
也可以用数字修改权限:
chomod 777 file
:修改 file 权限为 777。7 = 4+2+1,所以 777 的意思是所有的用户对该文件都拥有可读可写可执行的权限。
注意:
- root 用户不受权限影响,即使为某文件设置
770
,root 用户依然可以读写该文件 - 为文件设置
040
,则文件所有者没有读权限,但是文件所有者所在组又有读权限,这就矛盾了。此时以所有者为准,它依然没有读权限,但是所在组除了所有者之外的其它用户有读权限。
软件安装
Linux 下安装软件,可以通过源码包安装,也可以通过软件包安装,这里介绍后面一种。软件包的安装相关概念如下:
系列 | 发行版 | 包管理机制 | 安装包格式 | 包管理器(无法处理依赖) | 包管理器(可以处理依赖) |
---|---|---|---|---|---|
RedHat 系列 | Fedora,CentOS | rpm | .rpm | rpm | yum |
Debian 系列 | Ubuntu,Debian | dpkg | .deb | dpkg | apt |
因为个人用的是 Ubuntu,这里仅介绍 apt 的相关用法。
新版 Ubuntu 中,建议用
apt
代替旧的apt-get
0. 修改安装源
在动手安装软件包之前,首先必须修改默认的安装源,改为国内的镜像地址,否则速度会非常慢。具体做法可以参考之前写的这篇文章,这里我们介绍另一种纯命令行修改镜像地址的方法。
- 通过
cat
指令查看/etc/apt/sources.list
文件,大概是这样的内容:
可以看到,默认的安装源地址是 http://archive.ubuntu.com
,这个地址安装软件是非常慢的,我们要进行替换。
- 这里使用流编辑器 sed 进行地址替换:
sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list
这里的 -i
代表直接对文件进行修改;s/aaa/bbb/g
中,s
表示替换,aaa
表示修改前的地址,bbb
表示修改后的地址;末尾的参数则表示要修改的文件。
我这里使用的是阿里云的镜像源,也可以选择其它的。
查看替换后的文件:
通过下面的指令更新软件包列表:
sudo apt update
1. 安装/更新相关
apt install
:安装软件包
apt update
:并不实际更新软件,而是更新软件包列表。具体地说,运行命令后会逐一访问 sources.list
文件中的原仓库地址,并读取最新的软件包列表,保存在本地中。
apt upgrade
:更新软件,但不会根据依赖关系的变化添加或删除软件。具体地说,运行命令后会将当前安装软件与之前通过 update
更新的软件包列表进行比对,有需要更新的就会进行更新。
apt dist-upgrade
:同上,但是会根据依赖关系的变化添加或删除软件
2. 移除相关
apt remove
:卸载软件包,但保留配置文件
apt --purge remove
:卸载软件包,且不保留配置文件
apt autoremove
:卸载为了满足其它软件的依赖而安装的、但现在已不再需要的软件包
apt clean
:删除安装软件时缓存的 .deb
文件
apt autoclean
:同上,但仅删除旧的、无用的 .deb
文件,对于已安装软件的 .deb
文件会进行保留
3. 查看相关
apt check
:检查某个软件包是否有损坏的依赖
apt-cache stats
:显示系统软件包的统计信息
apt-cache show gcc
:查看 gcc 软件包的相关信息
apt-cache showpkg gcc
:查看 gcc 软件包的常规信息、依赖关系等
apt-cache policy gcc
:查看 gcc 软件包的安装设置状态
apt-cache depends gcc
:查看 gcc 软件包所依赖的软件包
apt-cache redepends gcc
:查看 gcc 软件包被哪些软件包依赖
安装 apt-fle
后,可以查看软件包的文件:
apt-file update
:要查看软件包的文件,首先运行该命令更新软件包的文件库
apt-file list gcc
:展示 gcc 软件包的所有文件
apt-file search file1
:查找包含 file1 文件的软件包(不管软件包有没有安装)
服务相关
netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
显示所有连接和监听的端口:netstat -a
查看 tcp 监听的端口:netstat -ntlp
查看某个进程的端口: 先 ps -ef | grep 进程名
查看进程 pid,再根据 netstat -nap | grep 进程pid
查看进程的端口
查看某个端口对应的进程:netstat -nap | grep 端口号
关闭占用某个端口的进程:sudo fuser -k 端口号/tcp
连接相关
远程连接 linux 服务器的工具有很多,secureSRT、putty 等,我这里使用的是 MobaXterm。如果没有服务器,也可以将本机的虚拟机当作一台远程服务器去连接:
- 通过
ifconfig
指令查询虚拟机的 ip 地址(紧跟在inet
后面的地址) - 查看虚拟机是否安装了 ssh 工具 —— 一般都是没有的,所以通过
apt-get install openssh-server
进行安装 - 在 MobaXterm 中新建 session,输入虚拟机 ip 地址进行 ssh 连接
参考:
《Linux 实战技能100讲》