linux基础

Entropy Tree Lv4

关于Linux的通用操作

基于Ubuntu22.04发行版的环境,本文整理了一些在Linux系统下基本通用的操作,使初学者能初步学会Linux系统的操作或使老用户重新回顾一下常用操作

参考文章 Linux - 幕布 (mubu.com) 作者:时光&逝

准备工作

远程连接工具XSHELL - NetSarang Website

远程文件传输工具 XFTP - NetSarang Website

配合XFTP可以较为直观地观察文件及目录的变化

注:一些发行版可能需要手动安装部分命令。另外,在执行命令时请确认自己所处的当前目录

提示

一些命令可能需要在root权限下执行,或者在执行命令的前面都加上sudo的前缀,表示临时使用root权限执行这条命令

如果忘记了root密码可以通过以下方法重新设置

1
2
3
4
5
6
sudo passwd # 进入密码设置
# 输入当初安装时设置的非root普通用户密码
# 输入新的root密码
# 重复输入root密码
su # 切换到root
# 输入刚刚设置的root密码,就能切换到root用户

vim文本编辑器

查看vim配置信息

1
vim --version

简易配置一下vim

用vim打开用户vimrc文件

1
vim $HOME/.vimrc

写入以下内容(后面的注释不需要)

syntax on # 开启语法高亮

set ts = 4 # 设置tab的缩进显示为四个空格的宽度

set expandtab # 设置tab字符替换为等宽的4个空格字符

set autoindent # 开启自动缩进

set number # 开启行号显示

set relativenumber # 使用相对行号

关于vim的基本操作可以参考其它文章 Linux vi/vim | 菜鸟教程 (runoob.com) 或者视频【保姆级入门】Vim编辑器

用户管理

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

linux的用户至少要属于一个组

基本命令

useradd命令:创建一个用户

1
2
3
4
5
6
# useradd [参数] 用户名
useradd normal # 创建一个名为normal的用户,用户目录默认家目录
useradd -d /myuser normal # 创建一个名为normal的用户,指定用户目录

# useradd [参数] 组名 用户名
useradd -g visitor vis # 创建一个名为vis的用户的同时指定用户组为visitor

passwd命令:指定或修改用户的密码

1
2
# passwd 用户名
passwd normal # 指定或修改normal用户的密码

userdel命令:删除用户

1
2
3
# userdel 用户名
userdel normal # 删除normal用户
userdel -r normal # 同时删除该用户的目录

usermod命令:修改用户信息

1
2
3
4
5
6
# usermod [参数] 新用户名 旧用户名
usermod -l vis normal # 修改normal用户名为vis、

# usermod [参数] 组名 用户名
groupadd demo
usermod -g demo vis # 修改vis用户所在的用户组为demo组

id命令:查询用户信息

1
2
# id 用户名
id normal # 查询normal用户信息

su命令:用户切换

1
2
3
# su [参数] 用户名
su common # 切换到一个名为common的用户
su - common # 将环境变量一并切换为common用户的环境变量

groupadd命令:添加一个名为visitor的用户组

1
2
# groupadd 组名
groupadd visitor

groupdel命令:删除visitor用户组

1
2
# groupdel 组名
groupdel visitor

groupmod命令:修改用户组

1
2
3
# groupmod [选项 参数] 组名
groupmod -n demo test # 修改test组名为demo
groupmod -g 9999 test # 修改test组ID为9999
用户信息文件
  • /etc/passwd是用户(user)的配置文件,记录用户的各种信息

  • /ect/shadow是口令的配置文件

  • /etc/group是组(group)的配置文件,记录组的各种信息

常用命令

进程命令

init命令:Linux下的进程初始化工具,用于切换运行级别

1
2
3
4
5
6
7
init 0 # 停机(不要将initdefault设置为0)
init 1 # 单用户模式,一般用于系统级维护
init 2 # 多用户模式,无法使用NFS(网络文件系统)挂载,没有网络支持
init 3 # 多用户模式,标准的运行级,有网络支持
init 4 # 保留,未使用
init 5 # X11(xwindow)图形化界面模式,多用户,有网络支持,一般用于远程连接时使用Linux图形化界面
init 6 # 重新启动(不要将initdefault设置为6)
帮助命令

man命令:用于获取帮助手册

help命令:获取shell内置命令的帮助信息

1
2
3
4
man vim # 获取vim的帮助手册
help cd # 获取cd命令的帮助信息
help mv # 获取mv命令的帮助信息,但会失败,因为mv不是内置命令
type mv # 查看mv命令的类型(内置命令或外部命令)
文件目录命令

pwd命令:查看当前所在目录的绝对路径

1
pwd

ls命令:查看当前所在目录的所有文件和目录

1
2
3
# ls [参数] [目录或文件名]
ls -a # 显示当前所有文件和目录,包括不可见的
ls -l # 以列表的形式显示信息

cd命令:切换到指定目录

1
2
3
4
# cd [目录路径]
cd ~ # 进入默认初始目录
cd .. # 返回上一级目录
cd /opt # 进入opt目录

mkdir命令:创建指定目录,可根据绝对路径或相对路径创建

rmdir命令:删除指定的空目录

1
2
3
4
5
6
7
# mkdir [参数] 目录名
mkdir test # 在当前目录下创建一个test目录
mkdir -p a/b/c # 在当前目录下创建a/b/c的嵌套多级目录

# rmdir [参数] 目录名
rmdir test # 删除test目录,test目录下不能有其它内容
# 删除有其它内容的目录时需要使用rm -rf命令

touch命令:创建空文件,可根据绝对路径或相对路径创建

1
2
# touch 文件名
touch demo.txt # 在当前目录下创建demo.txt文件

cp命令:拷贝文件到指定目录

1
2
3
# cp [参数] 源目录 指定目录
cp demo.txt test # 复制demo.txt文件到当前同级的test目录下
cp -r source test # 将source文件夹以及文件夹下所有内容复制到同级的test文件夹下(递归复制)

rm命令:删除文件或目录(文件夹)

1
2
3
4
# rm [参数] 文件名
rm demo.txt # 删除demo.txt文件
rm -r source # 递归删除整个source目录
rm -rf test # 无提示地强制删除整个test目录

cat命令:只读地查看文件内容

1
2
3
# cat [参数] 文件名
cat demo.txt # 查看demo.txt的内容
cat -n demo.txt # 查看文件时显示行号

more命令:基于vi编辑器的文本过滤器,以全屏方式按页显示文件内容,适合阅读长内容的文本

快捷键具体功能
空格(space)向下翻一页
Enter向下翻一行
q退出
Ctrl+F向下滚动一屏
Ctrl+B返回上一屏
=输出当前行行号
:f输出文件名和行号

less命令: 来分屏查看文件内容,与more命令类似,但功能更加强大。能根据显示需要加载文件内容,而不是一次性加载,对于显示大型文件有较高的效率

快捷键具体功能
空格(space)向下翻一页
[pagedown]向下翻一页
[pageup]向上翻一页
/字串向下搜寻字串 n向下 N向上
?字串向上搜寻字串 n向上 N向下
q退出

>指令:输出重定向,会覆盖文件的内容

>>指令:追加内容到文件尾部,不会覆盖文件的内容

1
2
3
ls > info.txt # 将当前目录的信息写入info.txt
ls -l > info.txt # 覆盖info.txt的内容为列表形式的目录信息
ls >> info.txt # 将目录信息追加到文件末尾

echo命令:输出内容到控制台,可与**>指令或>>指令**组合使用

1
2
3
4
# echo [参数] [字符串]
echo hello world # 输出hello world到控制台
echo happy >> info.txt # 此时控制台不会输出内容,内容追加到info.txt中,具体内容可以自定义
echo $PATH # 获取PATH变量,PATH是原本就存在于Linux下的环境变量

head命令:查看文件前n行内容,n默认为10

tail命令:查看文件后n行内容,n默认为10

1
2
3
4
5
6
7
# head [参数] [行数] 文件名
head info.txt # 查看info.txt的前10行内容
head -n 3 info.txt # 查看info.txt的前3行内容

# tail [参数] [行数] 文件名
tail info.txt # 查看info.txt的后10行内容
tail -n 3 info.txt # 查看info.txt的后3行内容

ln命令:给源文件创建一个软链接。软链接也称符号链接,类似于快捷方式,主要存放了链接其他文件的路径。可以通过ln命令软链接的方式设置全局环境变量(这是一种方式)

1
2
# ln -s 源文件路径 目标路径
ln -s info.txt test/ # 将info.txt软链接到同级的test目录下
时间日期命令

date命令:显示或设定系统的日期和时间

1
2
3
4
5
6
7
# date [参数] [格式]
date # 显示当前系统时间
date -u # 显示UTC时间
date -d "+1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期

date -s "2022-11-18 06:30:00" # 设置系统时间为2022年11月18日 6时30分0秒,重启系统后会失效

cal命令:显示月历,需要手动安装命令

1
2
3
4
5
apt install ncal # 安装命令

# cal [参数] [月份] [年份]
cal # 查看本月月历
cal 12 2022 # 查看2022年12月月历
搜索查找命令

find命令:从指定目录向下递归地遍历各个子目录,将满足条件的文件或目录显示在终端

1
2
3
4
5
# find [搜索范围] [参数] ...
find . -name "*.txt" # 查找当前目录及子目录下文件名后缀为txt的文件
find . -type f # 查找当前目录及子目录下普通类型的文件
find . -user root # 查找当前目录及子目录下属于root用户的文件
find . -size 0 # 查找当前目录及子目录下长度为0的文件

locate命令:可以快速定位文件路径,需要手动安装命令。利用事先建立的包含系统中所有文件名称路径的locate数据库实现快速定位,无需遍历整个文件夹,查询速度较快。

locate数据库不是实时更新的(默认情况下每天自动更新一次),无法查询当天新建的文件,但可以手动更新locate数据库

注意:测试命令需要新建文件时,记得随时手动更新locate数据库

1
2
3
4
5
6
7
8
apt install plocate # 安装命令
updatedb # 手动更新locate数据库

# locate [参数] [文件名]
locate passwd # 查找passwd文件
locate /etc/sh # 查找etc目录下所有以sh开头的文件
locate -n 2 passwd # 最多显示2个输出
locate -i ~/r # 忽略大小写查找当前用户目录下r开头的文件

grep命令:在指定文件里查找指定的内容

1
2
3
4
# grep [内容] [文件名]
grep root info.txt # 在info.txt里查找root字符所在的行并输出到控制台
grep -n root info.txt # 显示在完整文本中对应匹配的行号
grep -i root info.txt # 忽略大小写进行查找
压缩与解压命令

gzip命令:压缩文件,格式只能为*.gz,它的设计目标是为了处理单个文件

gunzip命令:解压文件,只能解压*.gz后缀的文件

1
2
3
4
5
# gzip 文件
gzip info.txt # 压缩info.txt文件为info.txt.gz文件

# gunzip 文件
gunzip info.txt.gz # 解压info.txt.gz文件为info.txt文件

zip命令:压缩文件和目录,适用于多个文件和目录

unzip命令:解压文件和目录

1
2
3
4
5
6
7
# zip [参数] 文件名.zip 要压缩的文件名
zip info.zip info.txt # 将info.txt压缩到info.zip中
zip -r test.zip test/ # 将test目录下所有文件和子目录递归压缩,用于处理多文件多目录的压缩

# unzip [参数] 文件名.zip
unzip test.zip # 直接解压test.zip
unzip -d beta/ test.zip # 指定解压test.zip到同级的beta目录下

tar命令:打包目录或解包tar文件,并且能附加压缩和解压功能

注意:打包和压缩包不是一个概念,解包和解压也不是

1
2
3
4
5
6
7
8
9
10
# tar 必填参数[选填参数] 打包文件名 源文件名
tar -cvf info.tar info.txt # 打包info.txt到info.tar中
tar -zcvf info.tar.gz info.txt # 打包的同时使用gzip进行压缩

tar -xvf info.tar # 解包info.tar
tar -zxvf info.tar.gz # 解压并解包info.tar.gz

tar -tvf info.tar # 不解压,仅查看包中的文件信息
# 指定解包到哪个目录
tar -xvf info.tar -C /tmp # 解包到tmp目录下
路由表命令

route命令: 显示和操作IP路由表

1
2
3
# route [参数]
route # 查看路由表
route -n # 不解析名字
文本操作命令

sed命令:能够在不打开文件的情况下处理、编辑文本文件, 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

1
2
# sed [参数] 文件名
sed -e 's/-/*/g' info.txt >> info.txt # 将info.txt中所有的字符-替换为*,并应用修改到info.txt中

组管理与权限管理

组管理

在linux中的每个用户必须属于一个组,不能独立于组外,一般在创建用户时就默认生成了一个同名的用户组

在linux中每个文件有所有者、所在组、其它组的概念

文件的所有者就是创建该文件的用户

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组

一个用户可以属于多个组,用户组又分为主组(主要组)和附加组(次要组),其中主组不能被删除,除非用户指定了新的主组,而附加组可以随意修改。

提示:查看文件权限、所有者等信息可以使用ls -l 指定的文件名实现;查看用户相关信息可以使用id 指定的用户名实现

基本命令

chown命令:修改文件所有者和所有组,若缺省组名,则不会改变所有组

chgrp命令:修改文件所在组

usermod命令:改变用户所在主组(-g参数)或追加附加组(-aG参数,若不加a参数则会覆盖原来的附加组)

1
2
3
4
5
6
7
8
9
10
11
12
# chown 用户名:组名 文件名
chown common info.txt # info.txt所有者改为common用户
ls -l info.txt # 查看info.txt的信息
# chgrp 组名 文件名
chgrp common info.txt # info.txt所在组改为common组

# usermod -g 组名 用户名
usermod -g ok common # common用户所在主组改为ok组
# usermod -aG 组名 用户名
usermod -aG two,tree,four common # common用户追加多个附加组

id common # 查看common用户的信息
权限管理

文件权限内容,通过ls -l 指定文件名查看

1
2
# 一个示例
-rw-r--r-- 1 root root 320 11月 18 17:49 info.txt

-rw-r–r–解读(下标从0开始)

  1. 第0位确定文件类型(d, - , l , c , b)
  2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限
  3. 第4-6位确定所属组(同用户组的)拥有该文件的权限
  4. 第7-9位确定其他用户拥有该文件的权限

rwx权限说明

  1. r表示可读read

  2. w表示可写write

  3. x表示可执行execute

  4. 对于文件来说

    • r表示可以读取查看文件

    • w表示可以修改,但不能删除文件,删除一个文件必须拥有父文件夹的rwx权限(存在一个特例,在提前知道目录里的具体内容的情况下,手动指定对应的完整文件名进行删除)

    • x表示文件可执行

  5. 对于目录来说

    • r表示可以读取,查看目录内容
    • w表示可修改,目录内创建+删除+重命名目录
    • x表示可以进入该目录
基本命令

chmod命令:修改文件或目录的权限

1
2
3
4
5
6
7
8
9
10
11
# 参数
# u:所有者 g:使用组 o:其他人 a:所有人
# +:添加权限 -:删除权限 =:设置权限

chmod a=--- info.txt # 取消所有人对info.txt的rwx权限
chmod u=rwx,g=rw-,o=r info.txt
chmod g+x,o-r info.txt

# 通过rwx权限对应的数字设置权限
# r=4 w=2 x=1 rwx=4+2+1=7
chmod 611 info.txt

进程管理

在linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号

每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程

每个进程都可能以两种方式存在的:前台与后台

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机

fg和bg命令:进程前后台调度命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在前台结束一个进程
Control+c
# 在前台暂停一个进程
Control+z
# 查看后台执行进程的进程号
jobs
# 运行命令时,在命令末尾加上&可让命令在后台执行
&
# 将命令进程号码为N的命令进程放到前台执行
fg N
# 或者
%N
# 将命令进程号码为N的命令进程放到后台执行
bg N
ps命令查看系统进程
1
2
3
4
# ps [参数]
ps -a # 显示当前终端的所有进程信息
ps -u # 以用户的格式显示进程信息
ps -x # 显示后台进程运行的参数
kill命令终止进程
1
2
3
4
5
6
7
8
# kill [参数] 进程号PID
# 参数(基本都使用9)
# 1:重新加载 9:强制停止 15:正常停止
# kill命令需要与ps命令配合使用
kill -9 9899 # 9899是通过ps获取的PID号,强制停止9899的进程

# killall命令能终止指定名称的所有进程,适合系统负载过大时使用
# killall -9 进程名称
pstree命令查看进程信息
1
2
3
4
# pstree [参数]
# pstree相对ps可以更直观地查看进程信息
pstree -p # 额外显示进程的PID
pstree -u # 额外显示进程的所属用户
service命令操作进程(后台服务)

服务(service) 本质就是进程,但是是运行在后台的一个特殊进程。这个特殊进程通常都会监听某个端口等待其它程序的请求,比如(mysql , sshd 防火墙等)。因此这个进程又称为守护进程

telnet命令可以用于远程登录主机,也可以测试某个端口

查看服务

1
chkconfig --list | grep 8989 # 该命令已被弃用

top命令持续监听运行状态

1
2
3
4
5
6
7
8
9
10
11
# top [参数]
# 参数
# -d 秒数:指定每隔几秒更新,默认3秒
# -i:不显示任何闲置或僵死进程
# -p 进程PID:监控指定的PID的进程状态

# top命令会进入一个交互页面,可以通过以下操作进行交互
# P:以CPU使用率排序,默认
# M:以内存的使用率排序
# N:以PID排序
# q:退出top交互页面
  • 标题: linux基础
  • 作者: Entropy Tree
  • 创建于 : 2022-11-17 19:58:38
  • 更新于 : 2023-08-10 20:55:59
  • 链接: https://www.entropy-tree.top/2022/11/17/linux-base/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论