Linux 学习笔记
最近重新开了一遍韩顺平老师B站的liunx教程,这里是一些比价的纪录。方便自己以后查看
Linux文件和目录管理
为了方便管理文件和目录,Linux 系统将它们组织成一个以根目录 / 开始的倒置的树状结构。Linux 中的目录,和 Windows 系统中的文件夹类似,不同之处在于,Linux 系统中的目录也被当做文件看待。
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin src srv sys tmp usr var
| 一级目录 | 功能(作用) |
|---|---|
| /bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
| /boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
| /dev/ | 设备文件保存位置 |
| /etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
| /home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liyf |
| /lib/ | 系统调用的函数库保存位置 |
| /media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
| /mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
| /misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定 |
| /opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
| /root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
| /sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
| /srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
| /tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
Linux /usr目录
usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。
| 子目录 | 功能(作用) |
|---|---|
| /usr/bin/ | 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
| /usr/sbin/ | 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。 |
| /usr/lib/ | 应用程序调用的函数库保存位置 |
| /usr/XllR6/ | 图形界面系统保存位置 |
| /usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 |
| /usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 |
| /usr/src/ | 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中 |
| /usr/include | C/C++ 等编程语言头文件的放置目录 |
Linux /var 目录
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。
Linux命令的基本格式
[root@localhost ~]# 命令 [选项] [参数]
- Linux 的选项又分为短格式选项(-l)和长格式选项(--all)。短格式选项是英文的简写,用一个减号调用
ls -l
ls --all
- 参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作
ls -l /home
vi/vim
三种模式:一般模式、编辑模式、命令行模式
-
正常模式:以vim打开一个档案就是直接进入了一般默认(这是正常的模式),在这个模式中,可以通过上下左右来移动光标,你也可以使用【删除字符】【删除整行】,也可以使用【复制】【粘贴】来处理你的文件数据;
-
编辑模式:按下i,l,o,O,a,R,r等任意一个字母之后才会进入编辑模式,一般情况按下i即可
-
命令行模式:在这个模式当中,可以提供你相关指令,完成读取,存盘,替换vim,显示行号等操作是在此模式下完成的
stateDiagram-v2
一般模式 --> 编辑模式
编辑模式 --> 一般模式
一般模式 --> 命令行模式
命令行模式 --> 一般模式
| 执行动作 | 所在模式 | 具体快捷键操作 |
|---|---|---|
| 1.拷贝 | 一般模式 | 拷贝当前行== yy ; 拷贝当前行向下5行 ==5yy ; 黏贴用 p |
| 2. 删除 | 一般模式 | 删除当前行 dd ; 删除当前行向下5行 5dd |
| 3.文件中查找 | 一般模式 、命令行模式 | /关键字 ; 回车 查找; n 下一个; |
| 4. 设置行号 | 命令行模式 | :set nu ; :set nonu ; |
| 5. 撤销 | 一般模式 | u = 撤销 |
| 6. 快速定位 | 一般模式 | gg=首行 ; G = 末行 ; |
| 7.快速定位某行 | 一般模式 | 20 , shift + g == 快速定位到20行 |
开机重启、用户登录与注销
开机和重启
# shutdown
shutdown - Halt(停止), power-off(关机) or reboot(重启) the machine
| 执行动作 | 所在模式 |
|---|---|
| shutdown -h now | 立刻进行关机 |
| shutdown | 1分钟后会关机(等同下面) |
| shutdown -h 1 | 1分钟后会关机 |
| shutdown -r now | 现在重新启动计算机 |
| halt | 关机,作用和上面一样 |
| reboot | 现在重新启动计算机 |
| sync | 将内存数据同步到磁盘 |
用户登录和注销
# su切换用户
[tom@VM-0-8-centos ~]$ su liyf
# 显示当前登录用户
[liyf@VM-0-8-centos tomHome]$ whoami
liyf
# 注销用户
[liyf@VM-0-8-centos tomHome]$ exit
exit
[tom@VM-0-8-centos ~]$
用户管理
用户操作
1.添加用户
- 语法: useradd 用户名
- useradd -d 给创建的用户指定家目录
- useradd -g 指定用户组
[root@VM-0-8-centos milan]# useradd milan
[root@VM-0-8-centos milan]# cd /home/milan/
[root@VM-0-8-centos milan]# useradd -d /home/milanHome milan2
[root@VM-0-8-centos ~]# su milan2
[milan2@VM-0-8-centos root]$ cd ~
[milan2@VM-0-8-centos ~]$ pwd
/home/milanHome
2.指定/修改密码
基本语法:passwd 用户名
3.删除用户
- userdel 用户名 删除用户但保留家目录
- userdel -r 用户名 删除用户同时删除用户的家目录
[root@VM-0-8-centos ~]# userdel milan
[root@VM-0-8-centos ~]# userdel -r milan2
[root@VM-0-8-centos home]# ls /home
liyf milan tomHome
4.查询用户信息
id 用户名
[root@VM-0-8-centos home]# id root
uid=0(root) gid=0(root) 组=0(root)
用户组
1.增加用户组
groupadd 组名
2.删除用户组
groupdel 组名
用户相关的文件
1.用户的配置文件:/etc/passwd
learn:x:1002:1003::/home/learn:/bin/bash
tom:x:1004:1005::/home/tomHome:/bin/bash
2.口令的配置文件:/etc/shadow
learn:$1$YcRGecOO$nEBZRAFqT4t1k3me2Lhpi0:18943:0:99999:7:::
tom:!!:18956:0:99999:7:::
3.组的配置文件:/etc/group
FE:x:1006:
RD:x:1007:
运行级别
运行级别:
- 0:关机
- 1:单用户
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用
- 5:图形界面
- 6:系统重启 常用运行级别:3和5
init [0123456] 切换不同的运行级别
帮助命令
man 查看帮助信息
文件目录
cd
切换目录
pwd
显示当前路径
ls
查看目录下文件
mkdir
创建目录
rmdir
删除空目录
touch
创建文件及修改文件时间戳
ln
建立链接(硬链接和软链接)文件 ln -s target link_name
cp
复制文件和目录
cp source dest
# -r 递归赋值整个文件夹
rm
删除文件或目录
选项:
-r 递归的删除
-f 强制删除
mv
移动文件或改名
mv source dest
cat
查看文件内容
# cat 文件名
# -n 显示行号
# 通常与管道指令 | 一起使用
more
以全屏的方式按页显示文件内容 more 文件名
| 操作 | 说明 |
|---|---|
| 空格键 | 向下翻一页 |
| Enter键 | 向下翻一行 |
| q | 退出 |
| ctrl + F | 向下滚动一屏 |
| ctrl + B | 返回上一屏 |
| = | 输出当前的行号 |
| :f | 输出文件名和当前的行号 |
less
分屏查看文件内容 比more指令更加强大 less 文件
| 操作 | 说明 |
|---|---|
| 空格键 | 向下翻一页 |
| pagedown | 向下翻一页 |
| pageup | 向上翻页 |
| q | 退出 |
| /字符串 | 向下搜寻「字符串」的功能:n向下查找,N向上查找 |
| ?字符串 | 向上搜寻「字符串」的功能:n向下查找,N向上查找 |
echo
输出内容到控制台
head 指令
用于显示文件开头的内容
head 文件 查看文件头10行的内容
head -n 5 文件 查看文件头5行的内容
tail
用于显示文件尾部的内容
tail 文件 查看文尾部10行的内容
tail -n 5 文件 查看文件末尾5行的内容
tail -f 实时跟踪文件的所有更新
> 指令和 >> 指令
>输出重定向
>> 追加
时间和日期相关指令 p34
date
显示当前日期
date -s 时间字符串 设置时间
[liyf@VM-0-8-centos ~]$ date
2021年 11月 29日 星期一 22:39:38 CST
[liyf@VM-0-8-centos ~]$ date +%Y
2021
[liyf@VM-0-8-centos ~]$ date +%m
11
[liyf@VM-0-8-centos ~]$ date +%d
29
[liyf@VM-0-8-centos ~]$ date '+%y-%m-%d %H:%M:%S'
21-11-29 22:39:17
cal
查看日历 不加选项显示本月情况
cal 2021 显示整年日历
查找指令
find
从指定目录向下递归的遍历各个子目录,将满足条件的文件或目录显示在终端
find是很强大的查找命令,但是花费的时间多,每一次查询都要直接去硬盘进行查找。
find [搜索范围] [选项] 1.与时间有关的参数
-mtime n: n 为数字,意思是几天之前的"一天之内"被更改过的文件
-mtime +n: 列出n天之前(不包含n本身)被更改过的文件名
-mtime -n: 列出n天之内(包含n本身)被更改过的文件名
-nerer file: file为存在的一个文件,列出比file还要新的文件名
2.与用户或用户组有关的参数
-uid n:n 为数字,就是用户的UID,记录在/etc/passwd文件中与用户名对应的数字
-gid n: n 为数字,就是用户组的UID,记录在/etc/group文件中与用户组名对应的数字
-user name: name 是用户账号的名称
-group name: name 是用户组的名称
-nouser: 寻找文件的所有者不在/etc/passwd的文件
-nogroup: 寻找文件的用户组不在/etc/group的文件
3.与文件权限有关的参数
-name filename:查找文件名为filename的文件
-size [+-]SIZE:查找比SIZE还要大(+)或小(-)的文件,SIZE的规格:
c:代表byte k:代表1024byte,查找比50kb还大的文件就是"-size +50k"
-type TYPE: 查找文件类型为TYPE的文件,类型一般有:
一般正规文件(f)、设备文件(b、c)、目录(d)、socket(s)等
-perm mode: 查找文件权限正好是mode的文件,这个mode为类似chomd的属性值,下同
-perm -mode:查找文件权限“必须全部包含mode的权限”的文件,当我们要查找一个权限为"-rwxr--r--",
即0744的文件,使用-perm -0744 ,当一个文件为"-rwsr-xr-x",即0755时也会被列出来,因为"-rwsr-xr-x"的属性已经包含了"-rwxr--r--"的属性
-perm +mode:查找文件权限“包含任一mode的权限”的文件
locate
locate可以快速定位文件路径
依赖于事先构建的索引,在文件系统上查找符合条件的文件;
手动更新索引数据库:
- updatedb
使用方法:
locate [OPTION] KEYWORD
//查找etc目录下以sh开头的文件
locate etc/sh
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s) 。如果省略参数,则返回所有信息。同locate一样,查询数据库(/var/lib/locatedb)文件。所以和locate一样,查找新增加的文件前,需要先使用updatedb命令,手动更新数据库。
$whereis [选项] [程序名]
[liyf@VM-0-8-centos ~]$ whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz
[liyf@VM-0-8-centos ~]$ whereis -b find
find: /usr/bin/find
[liyf@VM-0-8-centos ~]$
which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which passwd
/usr/bin/passwd
grep
过滤查找通常和管道符一起使用 -n 显示行号 -i 忽略大小写
压缩和解压
gzip/gunzip
用于压缩和解压文件
[liyf@VM-0-8-centos ~]$ gzip test.txt
[liyf@VM-0-8-centos ~]$ ls
test.txt.gz
[liyf@VM-0-8-centos ~]$ gunzip test.txt.gz
[liyf@VM-0-8-centos ~]$ ls
test.txt
zip/unzip
zip用于压缩文件 unzip用于解压文件
zip [选项] xxx.zip 要压缩的内容 unzip [选项] xxx.zip zip常用选项:
-r递归压缩 即压缩目录 unzip xxx.zip -d [] unzip常用选项:-d指定解压后文件的存放目录
tar
tar指令是打包语句,最后打包后的文件是.tar.gz文件
tar [选项] xxx.tar.gz 打包的内容
| 选项 | 说明 |
|---|---|
| -c | 产生.tar打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 捷报.tar文件 |
[root@VM-0-8-centos ~]# tar -zcvf a.tar.gz a.js b.js test/
a.js
b.js
test/
[root@VM-0-8-centos ~]# ls
a.js a.tar.gz b.js test
# 解压到指定目录
[root@VM-0-8-centos ~]# tar -zxvf a.tar.gz -C ./dist/
a.js
b.js
test/
[root@VM-0-8-centos ~]# ls
a.js a.tar.gz b.js dist test
[root@VM-0-8-centos ~]# cd dist/
[root@VM-0-8-centos dist]# ls
a.js b.js test