Linux 学习日志
本文旨在记录Linux学习记录。
拿起以前安装的CentOS 进行学习时,使用Xsheel7 时出现“要继续使用此程序,您必须应用最新的更新或使用新版本”提示,其解决方案借鉴 : link。
// 使用命令ifconfig用来获取Linux ip地址:
[zhuixun@zhuixun01 ~]$ ifconfig
使用xsheel7远程连接CentOS。
Linux系统的目录结构
Linux是一个树状结构,只有一棵树。路径之间的层次结构关系,使用:/ 来表示(右斜杠,而Windows是左斜杆)。根目录用 / 表示,描述路径只有斜杠开头。出现在开头时,表示:根目录,后面的则表示层次关系。例如:/test/hello.txt 。
Linux命令
命令行:即Linux终端(Terminal)记住这个单词。
命令的通用格式:
// command :命令本身
//-options:[可选,非必填] 命令的一些选项,可以通过选项控制命令的行为细节
//parameter :[可选,非必填] 命令的参数,多用于命令的指向目标等
command [-options] [parameter]
ls命令:用于列出目录下的内容,语法细节如下
// -a - l -h 是可选的选项 -a:all 列出全部文件(包括隐藏的文件,以 . 开头的文件)
// -l : 以列表(竖向排列)的形式展示内容,并展示更多信息
// -h : 表示以易于阅读的形式,列出文件大小,如k, m, g
//不用选项,以平铺的形式,列出当前工作目录(终端启动时,默认为HOME目录)下的所有文件
//例如:/home/用户名(zhuixun,tom)
ls [-a - l -h] [Linux路径]
cd命令:cd命令来自English :Change Directory ,用于更改当前所在的工作目录。
// cd 命令无需选项,只有参数,表示要切换到那个目录下
// cd 命令直接执行,不写参数,表示回到用户的HOME目录
cd [Linux路径]
pwd命令:Print Work Directory ,用于查看当前所在工作目录
// 无选项,无参数,直接pwd搞定
pwd
mkdir命令:Make Directory,用于创建新的目录(文件)
// 参数必填,表示Linux 路径,即要创建的文件夹的路径,相对路径或绝对路径均可
//-p选项可选,表示自动创建不存在的的父目录,适用于创建多层次的目录
//-p 可以创建一个链条式的目录,中间没有的自动创建
mkdir [-p] linux路径
注意,创建文件夹要在自己有权限的目录下才可以操作,在没有权限的目录下,无法操作。
touch命令:创建文件
// 无选项,参数必填,表示要创建的文件路径,相当,绝对,特殊路径符均可使用
touch Linux路径
cat命令:查看文件内容
// 无选项,参数必填,表示要查看的文件路径,相当,绝对,特殊路径符均可使用
cat Linux路径
more命令:也是查看文件内容,more也是,只不过是可以翻页,翻页的时候按空格,退出按q。
// 无选项,参数必填,表示要查看的文件路径,相当,绝对,特殊路径符均可使用
more Linux路径
cp命令:copy ,可以用于复制文件\文件夹
// -r选项,可选,用于复制文件夹使用,表示递归
//参数1,Linux路径,表示被复制的文件或者文件夹
//参数2,Linux路径,表示要复制去的地方
cp [-r] 参数1 参数2
注意,复制文件夹时,要带 -r 选项。
mv命令:用于移动文件\文件夹
//参数1,Linux路径,表示被移动的文件夹或者文件
//参数2,Linux路径,表示要复制去的地方,如果目标不存在,则进行改名,确保目标存在
mv 参数1 参数2
rm命令:可以用于删除文件、文件夹(remove)
// 同cp命令一样,-r 选项用于删除文件夹
//-f 表示force,强制删除(不会弹出提示确认信息)
普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提升
所以一般用户用不到-f选项
//参数1、参数2、.....表示要删除的文件或者文件夹路径,按照空格隔开
rm [-r -f] 参数1 参数2 ......参数n
rm命令支持通配符 * ,用来做模糊匹配
符号 * 表示通配符,即匹配任意内容(包含空),实例:
test *, 表示匹配任何以test开头的内容
*test , 表示匹配任何以test结尾的内容
*test *, 表示匹配任何包含test的内容
如果在root管理员用户下执行,
rm -rf/ rm -rf/*
等同于删库跑路,切记。
which命令:查找所使用的一系列命令的程序文件存放在哪里
which 要查找的命令
find命令:搜索指定的文件
find 起始路径 -name "被查找的文件名"
find命令也支持通配符 * ,用来做模糊匹配
符号 * 表示通配符,即匹配任意内容(包含空),实例:
test *, 表示匹配任何以test开头的内容
*test , 表示匹配任何以test结尾的内容
*test *, 表示匹配任何包含test的内容
// + - 表示大于和小于
// n表示大小数字
// kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB
find 其实路径 -size +|-n[kMG]
停止快捷键ctr + c 。
grep命令:从文件夹中通过关键字过滤文件行
// 选项-n,可选,表示在结果中显示匹配的行的行号
// 参数,关键字,必填,表示过滤的关键字,带有空格或者其他特殊符号,建议使用""将关键字包围起来
// 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
grep [-n] 关键字 文件路径
wd命令:用于统计文件的行数、单词数量等
// 选项,-c,统计bytes数量
// 选项,-m,统计字符数量
// 选项,-l,统计行数
// 选项,-w, 统计单词数量
// 参数, 文件路径,被统计的文件,可作为内容的输入端口
wc [-c -m -l -w] 文件路径
搭配grep命令,经常使用的有一个新的特殊符号,管道符:| ,可以将管道符左边命令的结果,作为右边命令的输入。例如:
cat test.txt | grep hello
而且可以无限套娃,一个套一个,无限套。例如:
//统计test文件中hello有多少行
cat test.txt | grep hello | wc -l
echo命令:在命令行内输出指定内容
// 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用" "包围
echo 输出的内容
反引号 `` :被包围的内容会作为命令被执行,并且输出执行的结果。
重定向符:>和>>
>:将左侧命令的结果,覆盖写入到符号右侧指定的文件中;
>> :将左侧命令的结果,追加写入到符号右侧指定的文件中;
例如:
// 第一种是覆盖掉,第二种会覆盖在后面
echo "hello world!" > text.txt
echo "hello world!" >> text.txt
tail命令:可以查看文件尾部内容,跟踪文件的最新更改
// 选项 ,-f ,表示持续跟踪
// 选项 ,-num,表示查看尾部多少行,不填默认10行
// 参数,linux路径,表示被跟踪的文件路径
tail [-f -num] Linux路径
相对路径和绝对路径
绝对路径:以根目录为起点,描述路径的一种写法,路径以 / 开头
相当路径:以当前目录为起点,描述路径的一种写法,路径描述无需以 / 开头
很容易理解,无需多言。
特殊路径符:
- . 一个点,表示当前目录,比如:cd ./Desktop 表示切换到当前目录下的Desktop目录内,和cd Desktop效果一致。
- … 两个点,表示上一级目录,比如:cd … 即可切换到上一级目录,cd …/… 切换到上二级目录,一个点点表示回一级,所以回两级。
- ~ 表示HOME目录,比如:cd ~ 即可切换到HOME目录或cd ~/Desktop,切换到HOME内的Desktop目录。其实有一种链式编程的思想。
VI\VIM 编辑器
vi或者vim是visual interface的简称,是Linux中最经典的文本编辑器。
有三种工作模式:
命令模式(Command mode): 命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模式下,不能自由进行文本编辑。
输入模式(insert mode):就是编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑。
底线命令模式(last line mode):以:开始,通常用于文件的保存、退出。
vim进入的时候,默认是命令模式,按 i 键就可以进入输入模式,再esc就可以退回到命令模式,命令模式下按:就可以进入底线命令模式。下面介绍各种模式下的命令:
命令模式下:
模式 | 命令 | 描述 |
---|---|---|
命令模式 | i | 在当前光标位置进入输入模式 |
输入模式 | esc | 任何情况下输入esc都能回到命令模式 |
命令模式 | PgUp | 向上翻页 |
命令模式 | PgOn | 向下翻页 |
命令模式 | / | 进入搜索模式 |
命令模式 | n\N | 向下\向上搜索 |
命令模式 | dd | 删除光标所在行的内容 |
命令模式 | ndd | n是数字,表示删除当前光标向下n行内容 |
命令模式 | yy | 复制当前行 |
命令模式 | p | 粘贴复制的内容 |
命令模式 | u | 撤销修改 |
命令模式 | Ctrl+r | 反向撤销修改 |
命令模式 | gg | 跳到首行 |
命令模式 | dG | 从当前行开始,向下全部删除 |
命令模式 | dgg | 从当前行开始 |
命令模式 | d$ | 从当前光标开始,删除到本行的结尾 |
命令模式 | dO | 从当前光标开始,删除到本行的开头 |
底线命令模式 | :wq | 保存并退出 |
底线命令模式 | :q | 仅退出 |
底线命令模式 | :q! | 强制退出 |
底线命令模式 | :w | 仅保存 |
底线命令模式 | :set nu | 显示行号 |
底线命令模式 | :set paste | 设置粘贴模式 |
以上只是一些有用的,掌握这些即可。 |
Linux用户和权限
root用户拥有最大的系统操作权限。
su命令:Switch User ,用于账户系统切换的系统命令。
// - 符号是可选的,表示是否在切换用户后加载环境变量
//参数:用户名,表示要切换的用户,省略表示切换到root
//切换用户后,可以通过exit命令退回到上一个用户,也可以使用快捷键Ctrl+d
su [-] [用户名]
使用普通用户,切换到其他用户时需要输入密码,比如切到root用户
使用root用户切到其他用户,不要密码,可以直接切换。
sudo命令:为普通的命令授权,临时以root身份执行。
// 在其他命令之前,带上sudo,即可为这一条命令临时赋予root授权
//但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证
sudo 其他命令
那么怎么配置sudo用户呢,首先,在root用户下,执行visudo命令,会自动打开一个文件,然后在文件的最后添加:
用户名 ALL=(ALL) NOPASSWD:ALL
最后通过wq保存。怎么取消?打开文件,删掉那一行就行了。
Linux系统中可以配置多个用户、配置多个用户组、用户可以加入多个用户组中,Linux中关于权限管控级别有2个级别,分别是:针对用户的权限控制,针对用户组的权限控制。下面介绍相关命令:
以下命令需要root用户执行:
//创建用户组
groupadd 用户组名
//删除用户组
groupdel 用户组名
// 创建用户
useradd [-g -d] 用户名
//选项:-g 指定用户的组,不指定 -g 会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
//选项:-d 指定用户HOME路径,不指定,HOME目录默认在:/HOME/用户名
// 删除用户
userdel [-r] 用户名
//选项:-r 删除用户的HOME目录,不使用-r,删除用户时,会保留HOME目录
// 查看用户所属组
id [用户名]
//参数:用户名,被查看的用户,如果不提供则查看自身
// 修改用户所属组
usermod -aG 用户组 用户名
//将指定用户加入指定用户组
// 查看当前系统中有那些用户
getent passwd
Linux文件认知权限
通过ls -l 可以以列表形式查看内容,并显示权限细节。
-rwxrwxr-x 1 zhuixun zhuixun 8360 4月 2 16:12 a.out
-rwxrw-r-- 1 zhuixun zhuixun 177 4月 3 15:20 hello.cpp
-rwxrw-r--. 1 zhuixun zhuixun 94 7月 28 2022 hello.sh
-rw-rw-r-- 1 zhuixun zhuixun 0 4月 3 00:02 test1.txt
drwxrwxr-x 2 zhuixun zhuixun 4096 4月 2 23:39 zhuin
drwxr-xr-x. 2 zhuixun zhuixun 4096 6月 6 2022 公共
drwxr-xr-x. 2 zhuixun zhuixun 4096 6月 6 2022 模板
drwxr-xr-x. 2 zhuixun zhuixun 4096 6月 6 2022 视频
第一列:表示文件、文件夹的权限控制信息。其中以-开头表示是一个文件,以d开头表示是一个文件夹,以i开头的表示软链接。后面的每三个一组,分别表示所属用户权限,所属用户组权限,其他用户权限。每一组又分别有:r或- 、 w或-、x或-,r表示可读,w表示可写,x表示可执行。
第三列:表示文件、文件夹所属用户
第四列:表示文件、文件夹所属用户组
chmod命令:用于修改文件、文件夹的权限信息。注意,只有文件、文件夹的所属用户或root用户可以修改。
// 选项:-R,对文件夹内的全部内容应用同样的操作
chmod [-R] 权限 文件或文件夹
// 例如 :
chmod u=rwx,g=rx,o=x hello.txt
// 表示将文件权限修改为:rwxr-x--x,其中:u表示user所属用户权限,g表示group组权限,o表示other其他用户权限
// 除此之外,还有快捷写法:
chomd 751 hello.txt
权限也可以用3位数字表示,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其他用户权限。数字的细节如下:
r记为4,w记为2,x记为1,可以有:
0:— ,无任何权限
1:–x,仅有x权限
2:-w-,仅有w权限
3:-wx,有w和x权限
4:r–,仅有r权限
5:r-x,有r和x权限
6:rw-,有r和w权限
7:rwx,有r和w和x权限
其中,可任意组合,例如751、 230等等。
chown命令:可以修改文件、文件夹的所属用户和用户组。普通用户无法修改所属为其他用户或组,所以只适用于root用户执行。
// 选项,-R,同chmod,对文件夹内全部内容应用相同规则
// 选项,用户,修改所属用户
// :,用于分割用户和用户组
// 选项,用户组,修改所属用户组
chown [-R] [用户] [:] [用户组] 文件或文件夹
//例如:
// 将hello.cpp所属用户修改为root
chown root hello.cpp
Linux使用操作
下面介绍一些,常用的快捷键。
Ctrl + c :强制停止。
Ctrl + d :退出账户的登录,或者退出某些特定程序的专属页面。但不能退出vi、vim编辑。
history :查看历史输入过的命令。可以加入管道,例如:history | grep pwd。
!命令前缀:自动执行上一次匹配前缀的命令。太久了,就别用了。
Ctrl + r:输入内容去匹配历史命令。
光标移动快捷键:
Ctrl + a :跳到命令开头
Ctrl + e :跳到命令结尾
Ctrl + 键盘左键,向左跳一个单词
Ctrl + 键盘右键,向右跳一个单词
Linux系统的应用商店
yun命令:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。
// 选项,-y,自动确认,无需手动确认安装或卸载过程
// install:安装
// remove:卸载
// search :搜索
yun [-y] [install] [remove] [search] 软件名称
//例如:
yun [-y] install wget
systemctl命令:Linux系统很多软件(内置或者第三方)均支持使用systemctl命令控制:启动、停止、开机自启。能够被systemctl管理的软件,一般也称之为:服务。
// A code block
systemctl start | stop | status | enable | disable 服务名
系统内置的服务比较多,比如:
- NetworkManager,主网络服务
- network,副网络服务
- firewalld,防火墙服务
- sshd,ssh服务
ln命令:用于在系统中创建软链接,可以将文件、文件夹链接到其他位置。类似Windows系统中的快捷方式。
// 选项,-s,创建软链接
//参数1,被链接的文件或文件夹
//参数2,要链接去的目的地
ln -s 参数1 参数2
Linux系统的日期、时区
date命令:可以在命令行中查看系统的时间。
// 选项,-d,按照给定的字符串显示日期,一般用于日期计算
// 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
// 特定的字符串格式:%Y 年 , %y 年份后两位数字<00,99>,%m 月份<01,12>,%d 日<01,31>
%H 小时 <00,23> ,%M 分钟<00,59>,%S 秒 <00,60>,
%s 自1970-01-01 00:00:00 UTC到现在的秒数
date [-d] [+格式化字符串]
Linux的ip地址,主机名
ifconfig命令:查看本机的ip地址。
// 查看本机ip地址
ifconfig
hostname:查看主机名
// 查看主机名
hostname