Linux学习笔记
文件系统架构
- Linux文件或者目录起始于根目录 " / " 成为树状结构,最顶层由 / 开始
- 文件和目录名是区分大小写的
- 路径通过 " / " 分开
- " .. " 表示上层目录
- " . " 表示当前目录
- 隐藏目录或者隐藏文件名以 " . " 开始
重要目录说明
- home目录(root用户的home目录是/root,普通用户的目录是/home/userx)
- bin目录(常用的可执行文件,/bin /usr/bin /sbin 等)
- 外部设备mountpoint(/media /mnt ,当检测到设备接入会自动产生挂载点)
- /etc 系统的配置文件
- /tmp 临时文件
- /boot 系统内核和开机必要的文件
- /dev 系统所有的设备文件
- /usr 应用程序存放目录(/usr/bin 存放应用程序, /usr/share 存放共享数据 , /usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件 , /usr/local:存放软件升级包 , /usr/share/doc: 系统说明文件存放目录 , /usr/share/man: 程序说明文件存放目录 )
- /lost+found 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。 (每个分区都会自动创建)
- /var 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录, /var/run: 程序或服务启动
- /srv 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
- /proc 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
- /lib /usr/lib /usr/local/lib 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules
目录和文件的命名规则
- 不超过 255 个字符
- 区分大小写 (shiyan,ShiYan 这两个是不同的文件)
- 除了 / 外,所有字符都合法
- 文件名首字符应避免使用 + - . 等
- 避免使用空格,制表符和 @ # $ % [] () 等
- 最好使用有意义的名称来命名
ls 指令的操作
命令标准格式:命令 [-参数] [选项]
Linux 中,字母参数用-表示(如:-a),单词参数用--表示(如:--help)
- ls 列出当前目录内容
- ls / 显示根目录的内容
- ls -a 列出当前目录下的所有文件(显示所有文件,包括隐藏文件)
- ls -l 使用长模式列出当前目录下文件的信息(详细信息显示)
- ll 使用长模式列出当前目录下文件的信息(详细信息显示,易读性的显示)
- ls -ld 显示目录本身的属性
- ls -la 使用长模式列出当前目录下所有文件的信息(详细信息显示,包括隐藏文件)
文件和目录操作,cd
- 绝对路径必须是 / 开头,相对路径一般比较短
- 相对路径一般比较短
- 目录切换常用 cd + 路径 进行切换
- pwd 显示当前路径
- cd .. 返回上级目录
- cd ~ 返回到用户的账号目录下
- cd - 返回上一个操作的目录
复制文件和目录,cp
- 复制文件或者目录(如:cp-参数 [源文件或目录][目标目录],例:cp-r/etc/tmp)
- cp wj1 ../2 复制当前目录下的 wj1 文件到上层目录下的 2 这个文件夹里
- cp -p wj1 ../2 保留文件属性(保留源文件的所有权和时间戳信息)
- cp wj1 wj2 wj3 ../2 当前目录下 wj1 wj2 wj3 到上层目录下的 2 这个文件夹里
- cp -r 1 2 复制 /home/shiyan/Code 目录下的文件夹 1 到文件夹 2 里
移动和重命名文件和目录,mv
- mv 剪切/重命名文件(cp[源文件/目录][目标文件/目录])
- mv 1 a1 将 /home/shiyan/Code 目录下的文件夹 1 重命名为 a1
- mv a1/ a2/ 将当前目录下文件夹 a1 移动到 当前目录下的 a2 文件夹里
删除文件和目录,rm
- rm /home/shiyan/Code/1/1.txt 删除该绝对路径下的 1.txt 文件
- rm -f 1.txt 删除当前目录下的 1.txt 文件,且不提示确认操作,直接删除
- rm -r a1/ 使用递归的方式删除当前目录下的 a1 文件夹和里面的全部文件
- rm -rf a1 使用递归方式删除当前目录下的 a1 文件夹和里面的全部文件,且不提示操作确认,直接删除(慎用)
新建文件和目录,touch 新建文件,mkdir 新建目录
- mkdir a1 在当前目录下创建一个名为 a1 的目录
- touch 1.txt 在当前目录下创建一个名为 1.txt 的文件
- mkdir s1 s2 在当前目录下分别创建名为 s1 和 s2 这两个目录
- touch 1.txt 2.txt 在当前目录下分别创建名为 1.txt 和 2.txt 的两个文件
确定文件的格式
- 当一个文件被随意更改后,我们无法知道他是什么格式,可以使用 file 这个命令来查看
- file 1 查看当前目录下的 1 这个文件,然后它会提示 1:directory 这是一个目录
- file 1.txt 查看当前目录下的 1.txt 这个文件,然后它会提示 1.txt:ASCII text 这是一个文本文件
显示文件内容 ,cat
- cat 1.txt 显示当前目录下 1.txt 这个文件的内容
- cat -b 1.txt 以每行段落进行编号显示(非空输出)
- cat -n 1.txt 对所有内容以行为单位全部输出加编号
- cat -s 1.txt 不输出多行为空的内容
分页显示文件内容 ,less
- ’空格’/paup 向上翻页
- Padn/”空格” 向下翻页
- “Enter”/”下方向键” 下一行
- “上方向键” 上一行
- 按/符号,输入关键词,可进行关键词搜索,关键词高亮显示
用户概述,用户群组概述
- 每个用户都有一个唯一的User ID
- User 的信息储存在 /etc/passwd 中
- shiyan:x:5000:5000::/home/shiyan:/usr/bin/zsh 用户名为 shiyan ,有密码,用户 ID 为 5000 ,用户组ID为 5000 ,没有备注,位于家目录下的 shiyan 目录 ,调用 /usr/bin/zsh
- 每个 User 都有一个 home 目录
- User 未经授权将禁止读写执行其他 User 的文件
- root 用户为超级管理员,最高权限(慎用)
- /etc/shadow 文件储存用户账号密码
- 每个 User 都属于一个 Group ,都有唯一的标识 gid
- Group 信息储存于 /etc/group 中
- 系统会为每一个 User 关联一个和 User 同名的 Group
- 在同一个 Group 中的成员可以共享其他成员的文件
Linux 权限种类
- 只读权限,用 r 表示(read)
- r 权限可以读取文件或者列出目录的内容(ls)
- 可写权限,用 w 表示(write)
- w 权限可以写,删除文件或者目录
- 可执行权限,用 x 表示(execute)
- x 权限可以执行可执行文件,可以进入目录并使用 cd 切换进入目录
- 没有任何权限,用 - 表示
Linux 文件和目录权限解读
1,d | rwx | rwx | rwx |
---|---|---|---|
d:目录-:文件 | u 用户权限 | G 群组权限 | o 其他所有人权限 |
2, d rwx-w----
- 目录
- shiyan 权限为可读可写可执行
- group 权限为可写
- others 没有任何权限
3, - rwxrwxr-x
- 文件
- shiyan 的权限为可读可写可执行
- group 权限为 可读可写可执行
- others 权限为可读可执行
设置 Linux 文件和目录的权限
1,字符表示法
chmod [-R] mode file
who (设置谁) | operator(操作符) | permission(权限) |
u(owner,当前用户) | + | r |
g(group,用户组群) | - | w |
o(others,其他用户) | = | x |
a(ugo,以上全部) |
- chmod u-w 1.txt 取消当前目录下 1.txt 的个人用户对该文件的写权限
- chmod -R a+rwx a1 以遍历的形式把目录 a1 包括 a1 目录下所有文件或者目录的任何用户组别的权限设置为可读可写可执行
2,数字表示法
数字表示法是用一组三位数分别对应 u g o ,第一位表示当前组别,第二位表示用户组,第三位表示其他用户的权限
permission | r | w | x | - |
Digit | 4 | 2 | 1 | 0 |
rwx | r-x | r-- |
4+2+1=7 | 4+0+1=5 | 4+0+0=4 |
- chmod 754 1.txt 设置当前目录下 1.txt 当前用户权限为可读可写可执行,用户组权限为可读可执行,其他用户为可读
- chmod -R 777 a1 设置当前目录下 a1 目录和该目录下所有文件或者目录的权限都是可读可写可执行
用户的主要群组和次要群组
- 主要群组,每个文件必须有一个组的所有者,因此必须有一个与每个组户相关的默认组,这个默认组就是新建文件的组的所有者,被称为用户的主要群组。用户的主要群组在 passwd 文件中的第四个字段中定义
- shiyan:x:5000:5000::/home/shiyan:/usr/bin/zsh 从这里可以看出,shiyan 所属的群组ID为 5000
- 在主要群组之外,用户还可以加入其他群组,这些其他加入的群组可以被称为次要群组,在 group 文件中的第四个字段中定义
- shiyan:x:5000:root 从这里我们可以看出,shiyan 的次要群组是 root 这个群组
- groups 这个指令可以查看当前用户所在的群组和所属的次要群组,第一位为主要群组,第二位至后面的都是次要群组
用户的管理
useradd [ -u UID ] [ -g 初始群组 ] [ -G 次要群组 ] [ -mM ] [ -c 说明 ] [ -d 家目录 ] [ -s shell ]
- useradd shiyan 创建一个名为 shiyan 的用户
- useradd -u 1314 shiyan 创建一个UID为 1314 的名为 shiyan 的用户
- useradd -g root shiyan 创建一个主要群组在 root 组的名为 shiyan 的用户
- useradd -G test shiyan 创建一名为 shiyan 并且次要群组在 test 的用户
- useradd -M shiyan 强制创建一个名为 shiyan 的系统权限账号
- useradd -m shiyan 创建一个普通权限的名为 shiyan 的用户
- useradd -c 仅仅只是测试账号 shiyan 创建一个名为 shiyan 的用户,并且添加说明:仅仅只是测试账号
- useradd -d /home/ceshi shiyan 创建一个名为 shiyan 的用户,并且指定该用户的家目录为 /home/ceshi
- useradd -s /bin/bash 创建一个名为 shiyan 的用户,并且指定该用户调用 /bin/bash 这个 shell
passwd [ 用户名 ] 修改用户密码
- passwd shiyan 输入修改密码的命令
- 更改 shiyan 的密码。 提示进入修改密码命令行
- (当前)UNIX 密码:123456 输入当前用户的密码 123456
- 输入新的 UNIX 密码:shiyan 修改新密码为 shiyan
- 重新输入新的 UNIX 密码:shiyan 确认新密码为 shiyan
- passwd:已成功更新密码 提示已成功修改密码
usermod [-c ] [ -d ] [ -e ] [ -g ] [ -G ] [ -l ] [ -u ] [ -L ] [ -U ] username 修改用户信息
- usermod -c 这不是测试账号 shiyan 修改用户名为 shiyan 的说明文字,修改成这不是测试账号
- usermod -d /home/noceshi shiyan 修改用户名为 shiyan 的家目录,修改成 /home/noceshi
- usermod -e 17-07-16 shiyan 设置用户名为 shiyan 的用户,使用期限至2017年7月16日
- usermod -G test1 shiyan 修改用户名为 shiyan 的用户的次要群组为 test1
- usermod -g root shiyan 修改用户名为 shiyan 的主要群组为 root 群组
- usermod -aG test1 shiyan 给用户名为 shiyan 的用户添加次要群组 test1
- usermod -l shiyan1 shiyan 修改用户名 shiyan 为 shiyan1
- usermod -u 520 shiyan 修改用户名为 shiyan 的 UID 为 520
- usermod -L shiyan 冻结用户名为 shiyan 的用户无法登陆
- usermod -U shiyan 解封用户名为 shiyan 的用户,其实就是删除了 shadow 的 ! 字符
userdel [ -r ] username 删除用户
- userdel shiyan 删除名为 shiyan 的用户(只删除用户,不删除家目录下的用户目录)
- userdel -r shiyan 删除名为 shiyan 的用户,并且包括用户的家目录
用户信息检查
- finger username 查阅用户相关的信息
- finger -s username 仅仅列出用户的账号,全名,登录时间等
- id 可以查阅某人或者自己相关的 UID,GID 信息
- whoami 查看当前用户的名称
- who&w 当前登录用户和最后一次操作的指令
- users 查询当前在线用户
- groups 查看用户所属主次群组
用户群组的管理
groupadd [ -g gid ] [ -r ] 组名
- groupadd -g 520 shiyan 创建 GID 为 520 的名为 shiyan 的群组
- groupadd -r shiyan 创建一个管理权限的群组
- GID一般500以上的为普通权限,以下的为管理权限
groupmod [ -g gid ] [ -n group_name ] 群组名
- groupmod -g 520 shiyan 修改群组名为 shiyan 的 GID 为 520
- groupmod -n test shiyan 修改群组名 shiyan 为 test
groupdel [ groupname ] 删除群组
- groupdel shiyan 删除名为 shiyan 的这个群组
文件压缩和解压(这里以实验楼的教程为笔记, zip , rar , tar )
zip [ -r ] [ -q ] 压缩后的文件名 被压缩的文件
- zip ceshi.zip mulu 压缩 mulu 文件,新建压缩文件名为 ceshi.zip (只是压缩的 mulu 这个目录,里面的内容没有压缩)
- zip -r ceshi.zip mulu 以遍历的方式压缩 mulu 文件,新建压缩文件为 ceshi.zip
- zip -r -q ceshi.zip mulu 不显示压缩过程,遍历的压缩 mulu 文件,新建压缩文件为 ceshi.zip
- zip -r -q ceshi.zip home/shiyan/mulu 压缩该路径下的文件到当前目录
unzip [ -l ] 压缩文件
- unzip ceshi.zip 解压 ceshi.zip 到当前目录
- unzip -l ceshi.zip 查看该压缩文件内容
安装 rar 和 unrar
sudo apt-get update
sudo apt-get install rar unrar
注意:rar 的命令参数没有 -
,如果加上会报错
rar [ a ][ l ] [ e ] 压缩文件名 被压缩文件
- rar a ceshi.rar mulu 添加 mulu 到压缩文件 ceshi.rar 压缩包中
- rar l ceshi.rar 查看该压缩文件
- rar e ceshi.rar 把该压缩包里所有文件解压到当前目录下,只解压文件,不解压目录,呈零散状(不推荐使用)
unrar [ e ] [ x ] 压缩文件
- unrar e ceshi.rar 把该压缩包里所有文件解压到当前目录下,只解压文件,不解压目录,呈零散状(不推荐使用)
- unrar e ceshi.rar 123/ 把所有文件都解压到 123这个目录下
- unrar x ceshi.rar 解压完整文件到当前目录
tar (太复杂了,不杂记了,就光弄几个常用的吧)
- tar -zcvf ceshi.tar mulu 添加压缩文件
- tar -zxvf ceshi.tar 解压压缩文件到当前目录
vi 编辑器 / vim 编辑器
vi 适合用来修改配置文件等简单的操作,vim 适合用来编写代码等文本
- vi a1.txt 打开 a1.txt 这个文件
- 通过输入 a(在内容第一行插入) i(在光标所处的地方插入) o(在下一行插入) 进入插入模式
- Esc 清空操作,输入 : 然后在后面输入命令
- h (左) j (下) k (上) l (右)
- w 下一个字符,b 上一个字符
- cc 删除整行,然后进行插入
- dd 删除整行
- dl 删除光标选择的字母或者其他
- u 撤销最近一次的修改 undo
- ctrl - r 取消最后一次的撤销 redo
- U 撤销所有修改
- /text 向后搜索
- ?text 向前搜索
- n ,搜索下一个同样的内容
- N ,搜索上一个同样的内容
- yy 复制一行
- yl 复制单个
- yw 复制单个句子
- p 粘贴
- 对于行,小写 p 粘贴在行上,大写 P 张贴在行下
- 对于字符,小写 p 张贴在字符右侧,大写 P 张贴在字符左侧
- dt[任意字符] 删除从光标到任意字符之间的所有字符
- r[任意字符] 将光标下的字符替换为任意字符
- dw 删除光标下这段字符
- [任意数字]dd 删除下方任意数字的行数数据
- [任意数字]yy 复制任意下方数字的行数
- R ,进入替换状态,esc退出,保存,退出,进入扩展模式
- :w ,保存
- :q , 退出
- :wq,保存并退出
- :w!,强制保存
- :q!,强制退出
- :wq!,强制保存退出
vi高级操作命令
1.文件内定位
- G,跳转到文件最后一行,首个字母那里
- 2G,跳转到文件的第二行
- ctrl + d 往下滚动半屛
- ctrl + u 往上滚动半屛
2.屏幕定位相关
- H,跳转到本屏显示的第一行
- M,跳转到本屏显示的中间一行
- L,跳转到本屏显示的最后一行
- z + 回车 ,使当前的光标所在的一行成为屏幕显示的第一行
3.查找并且批量替换
- 通过 Sed来查找
- :s/a/- 使光标这一行的第一个 a 替换为 -
- :s/h/-/g 使光标这一行的 h 全部替换为 -
- 1,10s/h/-/g 文本第一行到第十行之间的 h 全部替换为 -
- 1,$s/h/-/g 全文所有 h 替换为 -
4.读取和保存
- :r file ,将另外一个 file 内容读取入到当前文件
- :r 2.txt 把 2.txt 里的文字,字符串复制到当前文件光标后面
- 1,$ w 4.txt 把当前文件内的所有内容全部复制到新建的 4.txt 里
- 1,3 w >> 2.txt 把当前文件中的前三行内容追加到2.txt文件里后面
5.设置
- :set,显示常用的配置选项
- :set all ,显示所有的配置选项
- :set number ,设置行号