重定向
重定向又称输入、输出重定向。
为什么叫重定向?
因为原本的输入、输出方向是:stdin(键盘输入)
→
\rightarrow
→命令
→
\rightarrow
→ stdout(屏幕输出)
-
重定向可以改变原本的输入或输出方向
重定向 结果 重定向标准输出 stdin(键盘输入)
→ \rightarrow →命令 → \rightarrow → 其他(文件)输出重定向标准输入 其他(文件)输入 → \rightarrow →命令 → \rightarrow → stdout(屏幕输出)
重定向标准输出
覆盖模式 >
command > file
- 将
command
的屏幕输出写入file
中 - 写入相当于文件操作中的
w
模式:即file
若已存在,则删除原有内容再进行写入。若不存在,创建再写入。
如:
如果直接
ls
,将在屏幕上打印出code文件夹的内容信息。这就是标准输出。
ls > codedir.txt
将创建文件codedir.txt并将原本的输出内容写入文件,实现了重定向输出到文件中。
附加模式>>
command >> file
- 将
command
的屏幕输出附加到file
当中 - 写入相当于文件操作中的
a
模式:即file
若已存在,则将command
的屏幕输出附加到file
中。若不存在,创建再附加。
如:
附加效果
echo 回声打印
echo '字符串'
echo "字符串"
echo 字符串
- 输出输入的内容,并在最后自动换行
- 选项
选项 | 来源 | 说明 |
---|---|---|
-e | escape | 支持转义字符 |
-E | 不支持转义字符 | |
-n | newline | 取消最后的自动换行 |
- 可与
>
、>>
结合将字符串输出到文件当中
重定向标准输入
文件查看命令
cat查看小型文件
cat file
cat file -n(--number) #每行加行号
- 在终端屏幕上显示
file
小型文件中的内容 - 来源自concatenate(连接),其连接作用体现在与重定向符号结合使用
more分屏查看大型文件
more file
more file -n(--number) #每行加行号
- 当文件较大,内容较多时,
more
可以让我们能够分屏查看文件内容
操作键 | 说明 |
---|---|
空格 | 显示下一屏信息 |
回车 | 显示下一行信息 |
b | 显示上一屏信息 |
f | 显示下一屏信息 |
q | 退出 |
gedit查看编辑文件
gedit file
- 直接打开文本编辑器
如:
文件输入<
command < file
- 将
file
作为command
所需要的输入
如:
管道拼接|
outputcommand | inputcommand
- 将
outputcommand
的输出作为inputcommand
的输入
如:
普通 tree显示信息过长
将tree的输出作为more的输入,分页显示
链接
在Linux中,链接文件是一种文件类型。
- 链接又分软链接、硬链接
ls -l
的每一个文件显示项中,有一个代表硬链接数的数字
ls -l
显示的信息中,-
代表普通文件,d
代表目录文件,l
代表软链接文件(soft link).
软链接(soft link)
- 软链接相当于Windows系统中的快捷方式。它链接到某个文件的文件名。当打开软链接文件时,系统会找到它链接到的文件名,进而找到链接的文件本体。软链接相当于文件名的指针。
- 软链接极其依赖于它指向的文件的文件名(路径),若该文件被删除/移动/重命名,则软链接失效。但删除软链接文件,并不会影响软链接指向的的文件。
- 软链接文件与被链接的文件内容同步(因为软链接文件指向文件名)
- 可为目录文件创建软连接
命令
ln -s src_path dst_path
-s
代表--soft
src_path
为软链接指向的源文件的路径(务必使用绝对路径,因为软链接极其依赖于源文件)dst_path
为链接文件要放到的路径
如:
ls -l
显示出了软链接文件的指向打开
dir.txt
相当于打开codedir.txt
删除源文件,软链接失效
硬链接(hard link)
- 硬链接与软链接不同,它直接指向链接到的文件在内存中的本体,具有与原来的文件名相同的地位。硬链接相当于文件指针。
- 删除硬链接指向的文件,并不会使硬链接失效。通过硬链接,依旧可以访问到文件本体。
- 硬链接文件与被链接的文件内容同步(因为硬链接文件指向文件本体)
- 不能为目录文件创建硬链接
命令
ln src_path dst_path
- 各参数意义同软链接命令
src_path
可使用相对路径- 创建完硬链接之后,文件硬链接数+1
- 硬链接数:文件本体数据被不同文件名引用的次数。
如:
删除源文件,硬链接不会失效。硬链接数-1
总结
- 软链接起到快捷方式的作用
- 硬链接起到防止文件误删,多处备份的作用
文本查找
在文本文件中查找对应内容
grep命令
基本
grep string file
- 在
file
的内容中查找包含string
的行并输出到屏幕
如:
选项
命令选项 | 来源 | 说明 |
---|---|---|
-i | ignore case | 忽略大小写 |
-n | line number | 显示行号 |
-v | invert match | 显示不包含string的所有行 |
如:
结合正则表达式
-
正则表达式(regular expression),字符串模式匹配表达式
-
简单的有
正则表达式 | 说明 |
---|---|
^ | 以指定字符串开头 |
$ | 以指定字符串结尾 |
. | 匹配一个非换行符的字符 |
string
可结合正则表达式
如:
文件查找
在目录中查找对应文件
find命令
基本
find dirpath -name filename
- 按照文件名查找
- 在
dirpath
路径下(包括子目录)查找文件名为filename
的文件,在屏幕上输出查找到的文件路径
如:
结合通配符
通配符 | 说明 |
---|---|
* | 代表0个或多个任意字符 |
? | 代表任意一个字符 |
如:
压缩与解压缩
压缩格式
Linux默认支持的压缩格式有:
.gz
.bz2
.zip
其中.gz
,.bz2
对应tar
命令,zip
对应zip
、unzip
命令
tar
tar [-options] source_files
选项
选项 | 来源 | 说明 |
---|---|---|
-c | create | 打包 |
-x | extract | 解包 |
-f filename | file | 指定打包后或解包前的文件名称, 必须放到所有选项后面 |
-z | gzip | 压缩或解压缩(.gz) |
-j | bzip2 | 压缩或解压缩(.bz2) |
-C dirname | change | 解包到指定目录 |
-v | verbose | 显示打包或者解包的详细信息 |
如:
将abc.txt、cdf.txt、cef.txt 直接打包到 team文件中
将abc.txt、cdf.txt、cef.txt 压缩后分别以
.bz2
,.gz
格式打包
分别将team,teamj.bz2,teamz.gz解包到dir1,dir2,dir3中
zip/unzip
zip zipfile source_files
unzip zipfile
- zipfile为压缩包,source_files为源文件
选项
选项 | 来源 | 说明 |
---|---|---|
-d dirname | directory | 解压缩到指定目录 |
如:
将python目录下的txt文件压缩打包成teamzip.zip
再解压到dir4中
总结
- 压缩文件尽量使用
.gz
格式,因为占用空间较少 - 使用zip命令压缩的文件占用空间比较多, 但是比较通用,操作更加简单。
- 压缩目的是节省磁盘占用空间
文件权限修改
文件权限
ls -l
显示格式:
[类型][当前用户权限rwx][同组用户权限rwx][其他用户权限rwx] 硬链接数 用户 用户组 文件大小 修改时间 文件/目录名
- 文件权限有r(读取)、w(写入)、x(执行),-(无)
- 用户类型有user(当前用户),group(同组用户),other(其他用户)
chmod命令
字母法
- 用户类型
字母 | 全称 | 含义 |
---|---|---|
u | user | 当前用户 |
g | group | 同组用户 |
o | other | 其他用户 |
a | all | all,所有用户 |
- 修改符
符号 | 含义 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设置权限 |
- 权限类型
字符 | 全称 | 含义 |
---|---|---|
r | read | 读取权限 |
w | write | 写入权限 |
x | execute | 执行权限 |
- | 无任何权限 |
命令
chmod [用户类型][修改符][权限类型] file
- change mode全称
- 可以同时设置各用户权限,如:
u=rwx,g=r-x,o=---
如:
首先撤销了当前用户对abc.txt的读取权限(u-r),发现现在cat读不了abc.txt了:权限不允许(permission denied)
添加读取权限之后(u+r),当前用户又能够读取abc.txt了
数字法
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
- | 0 |
命令
chmod [u权限数字和][g权限数字和][o权限数字和] file
如:
系统管理命令
sudo命令
super user do简称
sudo -s
- 切换到root用户,获取管理员权限
- 切换到了root用户后,请谨慎执行操作
sudo command
- 临时以管理员权限执行某条
command
- 执行完毕后失去权限
whoami命令
whoami
- 显示当前用户
exit命令
exit
- 退回上一次登录的用户
- 如果没有,退出终端
who命令
who
- 显示正在登录的用户(可能有远程登录的用户)
passwd命令
password简称
passwd 修改当前用户的密码
sudo passwd user 修改指定用户的密码
which命令
which command
- 显示
command
命令的路径
如:
关机重启命令
shutdown –h now 立刻关机
reboot 重启
用户与用户组
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
每个用户账号都拥有一个唯一的用户名和密码。
每个用户账号创建时都会加入一个用户组,称之为主用户组。后续可以让用户加入其他用户组,称之为附加用户组。主用户组唯一,附加用户组可以有多个。
创建用户组
groupadd命令
sudo groupadd group
用户组文件
/etc/group 系统用户组配置文件
cat /etc/group
查看文件内容:
muzixikali:x:1000:
一:二:三:
- 一:用户组名
- 二:用户组密码占位符,一般Linux系统的用户组都没有密码的
- 三:组id
修改用户组
groupmod命令
sudo groupmod -n oldname newname
- 修改用户组组名
gpasswd命令
gpasswd -a user GROUP
- 在GROUP中加入user,即为user添加附加用户组GROUP
gpasswd -d user GROUP
- 从GROUP中删除(delete)user,即GROUP不再是user的附加用户组
删除用户组
groupdel命令
sudo groupdel group
- group为空才能删除
创建用户
useradd命令
sudo useradd user
选项 | 来源 | 说明 |
---|---|---|
-m | create home | 自动在/home中创建用户主目录。用户主目录名称就是用户名。不加默认是不会自动创建。 |
-g | group | 指定user的主用户组。不加该选项,默认自动为user创建同名主用户组。 |
用户信息文件
/etc/passwd
cat /etc/passwd
查看文件内容:
muzixikali:x:1000:1000:muzixikali,,,:/home/muzixikali:/bin/bash
一:二:三:四:五:六:七
- 一:用户名
- 二:密码占位符
- 三:uid, 用户id
- 四:gid, 用户所在组id
- 五:用户描述, 可选
- 六:用户的主目录所在位置
- 七:用户所用 shell 的类型,一般为bash或者sh,默认不设置是sh类型
id命令
id user
- 查看用户信息
如:
信息的含义
uid=用户id(用户名)
gid =主用户组id (主用户组名)
groups=主用户组id(主用户组名),附加用户组id(附加用户组名)…
设置用户密码
passwd命令
sudo passwd user
切换登录用户
su命令
switch user简称
su - user
如果user并不以sudo为附加用户组,那么就不能在以user的身份执行
sudo -s
切换到管理员用户如果想解决这个问题,那么就要给user添加附加用户组sudo
修改用户信息
usermod命令
sudo usermod user
选项 | 说明 |
---|---|
-G | 设置附加用户组 |
-g | 修改主用户组。如果是修改了自动创建的同名用户组,则该用户组消失。 |