30

Linux 系统操作

 4 years ago
source link: https://chorer.github.io/2020/04/25/OS-Linux 系统操作/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

FBN7Rr2.png!web

上了近六周的操作系统理论课,最近终于开始做实验了。关于 Linux 这块,不想学得太深入,但是以后部署项目到服务端也会涉及到这部分的知识,所以一些基本的概念和操作还是有必要学一学的。这篇笔记就作为平时查看的手册。

以下操作基于 Ubuntu 。

帮助指令

1. man

用法:man + 参数

查看相关命令、相关文件等的使用手册。Ctrl+f 上一页,Ctrl+b 下一页,Ctrl+Home 第一页,Ctrl+End 最后一页,q 退出回到终端

输入 man man 查找 man 命令本身的使用手册:

iQnYJjR.png!web

可以看到数字代表相关类型的帮助所在的章节,比如数字 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. 目录结构

2Qfqmma.png!web

/:根目录

/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行。 bspace 控制上下翻页

less -5 filea :支持翻页查看文本内容,一屏显示5行。 pageuppagedown 控制上下翻页

wc filea :统计文件内容信息

PS:常用参数 -f ,同步追踪并显示正在发生更改的文件内容。 moreless 支持翻页,适合用来查看那些内容超过一屏的文本。

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 :查看目录权限

3yUjmqM.png!web

查看到信息的时候只需关注前面的部分:

  • chor chor 中,第一个 chor 代表文件所有者,第二个 chor 代表所有者所在组。
  • - rw-rw-r-- 中 ,第一个 - 指示文件是普通类型。第一个 rw- 代表文件所有者对该文件的权限,第二个 rw- 代表文件所有者所在组对该文件的权限, r-- 代表其他用户对该文件的权限。同样的, d rwxrwxr-x 也是一样的,只不过 d 指示文件是目录类型(文件夹)
  • 对于普通类型, rwx 分别代表对文件拥有 可读可写可执行 的权限, - 代表未指定
  • 对于目录类型, rwx 分别代表对目录拥有 可显示目录内文件(ls)可修改目录内文件(rm)可进入目录(cd) 的权限, - 代表未指定
  • rwx 可以分别用数字 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 的意思是所有的用户对该文件都拥有可读可写可执行的权限。

注意:

软件安装

Linux 下安装软件,可以通过源码包安装,也可以通过软件包安装,这里介绍后面一种。软件包的安装相关概念如下:

系列 发行版 包管理机制 安装包格式 包管理器(无法处理依赖) 包管理器(可以处理依赖) RedHat 系列 Fedora,CentOS rpm .rpm rpm yum Debian 系列 Ubuntu,Debian dpkg .deb dpkg apt

因为个人用的是 Ubuntu,这里仅介绍 apt 的相关用法。

新版 Ubuntu 中,建议用 apt 代替旧的 apt-get

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 实战技能100讲》


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK