文件管理
在Linux中有这么一条哲学思想
一切皆文件
在Linux中,所有在系统中存放的数据都会映射为文件。
文件系统与目录结构
文件系统
- 文件和目录被组织成为一个倒树状
- 从根目录开始,用“/”表示
- 文件名称区分大小写
- 隐藏文件用“ . ”表示
- 路径分隔 “/”
- 文件有两类数据
元数据:metadata
数据:data - 文件系统分层结构 : LSB (Linux Standard Base)
- 文件存放位置推荐遵循 FHS 协议
文件名规则
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文
件 灰色-->其他文件 - 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,
有些字符需要用引号来引用它们 - 标准Linux文件系统(如ext4),文件名称大小写敏感
文件系统结构
- /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)
都存放于此目录 - /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
- /lib64:专用于x86_64系统上的辅助共享库文件存放位置
- /etc:配置文件目录
- /home/USERNAME:普通用户家目录
- /root:管理员的家目录
- /media:便携式移动设备挂载点
- /mnt:临时文件系统挂载点
-
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
- /opt:第三方应用程序的安装位置
- /srv:系统上运行的服务用到的数据
- /tmp:临时文件存储位置
还有两个特殊的目录
- /proc: 用于输出内核与进程信息县官的虚拟文件系统
- /sys: 当前系统上的硬件设备相关信息虚拟文件系统
文件类型
- - 普通文件
- d 目录文件
- b 块设备
- c 字符设备
- l 符号链接文件
- p 管道文件pipe
- s 套接字文件socket
绝对路径和相对路径
- 绝对路径
以正斜杠开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候 - 相对路径名
不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名 - 基名:basename
- 目录名:dirnam
文件相关命令
cd 命令
切换用户当前工作目录
补充说明
cd命令 用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的目录,..则表示目前目录位置的上一层目录。
语法
cd (选项) (参数)
选项
- -p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
- -L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
- - 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
实例
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。ls 命令
说明
显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。
参数 :
- -a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)
- -l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出
- -r 将档案以相反次序显示(原定依英文字母次序)
- -t 将档案依建立时间之先后次序列出
- -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-
-R 若目录下有档案,则以下之档案亦皆依序列出
实例:
- 列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :
ls -ltr s* - 将 /bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin -
列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
ls -AFstat
- 文件:metadata, data
三个时间戳:
access time 访问时间, atime 读取文件内容
modify time 修改时间, mtime,改变文件内容(数据)
change time 改变时间, ctime,元数据发生改变
文件通配符
- *匹配零个或多个字符
- ? 匹配任何单个字符
- ~ 当前用户家目录
- ~mage 用户mage家目录
- ~+ 当前工作目录
- ~- 前一个工作目录
- [0-9] 匹配数字范围
- [a-z]:字母
- [A-Z]:字母
- [wang] 匹配列表中的任何的一个字符
- [^wang] 匹配列表中的所有字符以外的字符
- [:digit:]:任意数字,相当于0-9
- [:lower:]:任意小写字母
- [:upper:]: 任意大写字母
- [:alpha:]: 任意大小写字母
- [:alnum:]:任意数字或字母
- [:blank:]:水平空白字符
- [:space:]:水平或垂直空白字符
- [:punct:]:标点符号
- [:print:]:可打印字符
- [:cntrl:]:控制(非打印)字符
- [:graph:]:图形字符
-
[:xdigit:]:十六进制字符
mkdir和touch
mkdir 创建目录
补充说明
创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
语法
mkdir (选项)(参数)
选项
- -Z:设置安全上下文,当使用SELinux时有效;
- -m<目标属性>或--mode<目标属性>建立+ 目录的同时设置目录的权限;
- -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
- --version 显示版本信息。
参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
touch
格式:touch [OPTION]... FILE...
- -a 仅改变 atime和ctime
- -m 仅改变 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] ,指定atime和mtime的时间戳
-
-c 如果文件不存在,则不予创建
cp 命令
复制文件或目录
cp [options] source dest
cp [options] source... directory
参数:
- -a 保留所有权限 相当于- dR
- -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
- -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
- -i 覆盖前提示
- -n 不覆盖
- -d 不复制源文件,只复制链接名
- --backup=numbered 目标存在,覆盖前先备份加数字后缀
mv
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份
rm 删除
rm [OPTION]... FILE...
常用选项:
- -i 交互式
- -f 强制删除
- -r 递归
- --no-preserve-root 删除/
示例:rm -rf /* (危险命令,切勿在生产环境中尝试,Enter前请三思 )
I/O重定向及管道
输入输出重定向及管道
程序: 指令+数据
读入数据: Input
输出数据: Output
打开的文件都有一个fd; file descriptor (文件描述符)
标准输入:keyborad(键盘) 0
标准输出:monitor(显示器) 1
标准错误输出:monitor 2
I/O重定向:改变标准位置
输出重定向: COMMAND > NEM_POS, COMMAND >> NEM_POS
> 覆盖重定向,目标文件中的原有内容会被清除
>> 追加重定向,新内容会追加至目标文件尾部
# set -C : 禁止将内容覆盖输出至已有文件中
强制覆盖: >|
# set +C: 允许覆盖
2>:覆盖重定向错误输出数据流
2>>追加从定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /PATH/TO/file.out 2> /path/ro/error.out
合并标准输出和错误输出至同一个数据流进行从定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /PATH/TO/file.out 2> &1
COMMAND >> /PATH/TO/file.out 2>> &1
输入重定向: <
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
-d 删除指定字符串
HERE Documentation : << (此处生成文档)
Note:单行重定向 与 多行重定向
#cat << EOF
#cat >/path/ro/somefile <
管道:
COMMAND | COMMAND | COMMAND | ...
Note:最后一个命令会在当前shell进程的子shell中执行的
tee命令:一路输入两路输出
tee [option]... [file]....
-a 追加
文件处理工具 wc cut sort uniq
wc [option] [file]...
-l: 统计行数
-c: 统计字节数
-w;统计单词数
tr: 转换字符或删除字符
tr '集合1' '集合2'
tr -d '字符集合'
tr -dc '字符合集' 除了双引号内的,都删除
\n 换行
\r 回车
\t tab键
\v 纵向tab键
cut:
This is a test line.
-d字符:指定分隔符
-f#: 指定要显示字段
单个数字:一个字段
逗号分隔的多个数字:指定多个离散字段
-:连续字段,如3-5;
sort: 按字符进行比较
sort [option] file...
-f: 忽略字符大小写;
-n: 比较数值大小;
-t: 指定分隔符
-k: 指定分隔后进行比较字段
-u: 重复的行,只显示一次;
uniq: 移除重复的行
-c:显示每行重复的次数
-d:仅显示重复过的行
-u: 仅显示不曾重复的行
总结:
1、
小技巧:
可以使用>>创建空文件,相对于来说,比较安全,防止文件存在覆盖数据,造成数据丢失
set 仅在当前shell 有效
单行从定向: cat > file
多行重定向:cat <<
ls /erro /boot 2> file.out 2> erro.out
相当于将错误的重定向如file.out中,正确的重定向至erro.out
ls /error /boot > /file.out 2>&1
不管正确还是错误都重定向至file.out
ls /error /boot 2>&1 > file.out中 将错误输出显示至屏幕,正确的重定向至fele.out
(ls /error /boot 2>&1 ) > file.out 正确和错误都重定向
ls /error /boot 2> file.out 1>&2 先将错误的重定向至file.out中,然后把正确的当做错误的重定向至同一个文件中
# 以下四个命令中哪个是结果不一样
1
2
3
4
2、
tr '[:lower:]' [:upper:] 把所有小写字母转换为大写字母
ls [:lower:]* 代表 以l,o,w,e,r 其中任意一个字符开头的行
ls [[:lower:]]* 代表 所有以字母开头的行
用户组管理
资源分派
Authentication 认证
Authorizathin 授权
Accouting 审计
token,identity(username/passwd)
linxu用户: Username/UID
管理员: root, 0
普通用户:1-65536(60000)
系统用户 1-499 (centos6) 1-999(centos7)
守护进程获取资源进行权限分配
普通用户 500+
Linux的安全上下文:
运行中的程序,进程(process)
以进程发起者的身份运行:
#root:cat
$tom:cat
进程所能够访问的所有资源的权限取决于程序运行的发起者的身份
Linux组的类别
用户的基本组(主组):
组名同用户组,且包含一个用户,私有组
用户的附加组(额外组):
Linux用户和组相关配置文件
- /etc/passwd保存用户及其属性信息
- /etc/group 组及其属性信息
- /etc/shadow 用户密码及其相关属性
- /etc/gshadow 组密码及其相关属性
/etc/passwd
name:passwd:UID:GID:GECOS:directory:shell
用户名:密码:UID:GID:GECOS:主目录:默认shell:
/etc/group
group_name:password:GID:user_list
组名:密码:组ID:用户列表(分隔符为逗号)
/etc/shadow
用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:密码的最大使用期限:账号警告时间段:密码禁用期:密码过期日期:保留字段
加密机制:
加密 明文-->密文
解密 密文-->明文
单向加密:提取数据指纹
md5: message digest,128bits
sha1: secure hash algorithm,160bits
sha224:224bits
sha256:256bits
sha384:384bits
sha512:512bits
雪崩效应:初始的条件的微小改变,将会引起结果的巨大改变
定长输出:
密码的复杂性策略;
1、使用数字,大写字母,小写字母及特殊字符中至少3中
2、足够长:
3、使用随机密码:
4、定期更换:不要使用最近曾经使用过的密码
用户和组相关命令
用户创建: useradd
SYNOPSIS
useradd [options] LOGIN
useradd -D
useradd -D [options]
OPTION:
-u UID: [UID_MIN,UID_MAX] 定义在/etc/login.defs
-g GID: 指明用户所属基本组,可为组名,也可以GID
-c "comment" :用户注释信息 (等价于 chfn username)
-d /path/tohome_dir: 以指定的路径为家目录
-s SHELL : 指明用户的默认shell程序,可用列表在/etc/shells文件中 (等同 chsh -s )
-G GROUP1[GROUP2,...[,GROUPN]]:为用户指明附加组,组必须事先存在
-n 不为用户创建私有用户组
-M : 不创建主目录
-e date :指定账户过期时间,格式为:MM/DD/YY
-f days : 帐号过期几日后永久停权。若指定为 -,则立即被停权,若为 - 1,则关闭此功能
-r : 创建系统用户,默认不创建对应的主目录
-p passwd : 为新建用户创建指定登录密码。(此项使用较少)
默认值设定: /etc/default/useradd文件中
useradd -D \\ 修改默认值
修改用户属性:usermod
SYNOPSIS
usermod [options] LOGIN
OPTION:
-a: 将用户添加到补充组。仅与-G选项一起使用
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-r : 同时删除家目录
创建用户组: groupadd
Groupadd [-r] groupname
Option:
-r:创建系统用户组,该类用户组的GID小于500或1000。
修改用户组属性: groupmod
groupmod [options] GROUP
Option
-n : 改变用户组名称 groupmod -n 新用户组名 原用户组名
-g:重新设置用户组GID groupmod -g new_GID 用户组名称
删除用户组: groupdel
注意:在删除用户组时,被删除的用户组不能某个用户的私有用户组,若要删除,则应先删除私有用户组的账户,然后再删除用户组
添加用户到指定组/从指定组移除用户: gpasswd
用法:
gpasswd -a username group 将指定用户添加到指定组
gpasswd -d username group 从用户组中移除指定用户
设置用户组管理员
gpasswd -A 用户账户 要管理的用户组
命令功能:将指定的用户设置为指定用户组的用户管理员。用户管理员只能对授权的用户组进行用户管理 (添加用户到组或从组中删除用户),无权对其他用户组进行管理。
设置账户登录密码: passwd
passwd [用户]
也可以通过标准输出来设置密码
echo "字符串" | passwd --stdin username
------------不敢原创,总结了一些笔记