Linux:Day4(上) 文件管理、管道
文件管理:cp、mv、rm
复制命令:cp
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
(1) 源为单个文件
【1】目标不存在:新建目标文件,将源文件内容复制到目标文件中。
【2】目标存在:
目标为文件:用源文件中的内容覆盖目标文件中的内容,无提示!如果想有提示,使用选项 -i。
目标为目录:在目录新建文件名为源文件文件名的文件(如果存在此文件名,则覆盖),然后将源文件中的内容复制到新文件中。
(2) 源为单个目录
复制目录需要使用-r选项,不然报错!
【1】目标不存在:创建指定目录,复制源目录中的所有文件至目标目录。
【2】目标存在:
目标为文件:报错!
目标为目录:在目标目录中创建同源目录名相同的目录,并将文件复制到此目录中
(3) 源为多个文件,不论文件或目录:目标必须存在,且必须是目录。
【1】目标不存在:报错! cp: target `/tmp/test3' is not a directory
【2】目标存在:
目标为文件:报错!
目标为目录:将源复制到目标目录,如果多个源文件中有目录,则要使用-r选项,不然目录复制不过去,但文件复制正常。
常用选项:
-i:交互式
-r, -R:递归复制目录及内部的所有内容;
-a:归档,相当于-dR --preserve=all
-d:--no dereference --preserve = links 不追踪符号链接,只保留链接
--preserve [=ATTR_LIST]
mode:权限
ownership:属主属组
timesamp:时间戳
links:
xattr:扩展属性
context:上下文
all:所有元数据
移动文件:mv
(1) 如果源为单个文件,行为和cp一样。
(2) 如果源为单个目录:行为也和CP一样。
目标不存在:和CP一样
目录存在:
目标为文件:报错!提示不能用目录改写非目录文件。
目标为目录:和CP一样
(3) 如果源为多个文件,无论文件或目录:
目标不存在:和CP一样
目标存在:
目标为文件:和CP一样
目村为目录:和CP一样
总结:mv命令和CP是一样,唯一区别是mv不需要使用-r选项。
删除文件:rm,删除文件或目录
删除的是目录:(1) 目录为空,可以删除。 (2) 目录不为空,要用-r或-R选项。
删除的是文件:可以直接删除。
文本编辑器:nano
全屏幕的文件编辑器。
bash的基础特性(2):
1、命令别名(alias)
(1)alias
显示当前shell进程中所有可用的命令别名;
(2)alias NAME="VALUE" 注:后面的值一定要加引号
定义另名NAME,其相当于执行命令VALUE; 例:alias cdnet="cd /etc/sysconfig/network-scripts"
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
Note:编辑配置给出的新配置不会立即生效;
bash进程重新读取配置文件:
source /path/to/config_file
或. /path/to/config_file
撤消别名:unalias
Note:如果别名同原命令的名称,则如果要执行原命令,可使用 \COMMAND
2、glob (globbing)
bash中用于实现文件名“通配”
通配符:*, ?, [ ]
(1) * :代表任意长度的任意字符
(2) ? :任意单个字符
(3) [ ] :匹配指定范围内的任意单个字符
[a-z]:不区分字符大小写
[A-Z]:大写字母
(4) [^ ]:取反
专用字符集合:
[:digit:]:任意数字,相当于0-9,并不是相当于[0-9]
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字和字母
[:space:]:匹配空格
[:punct:]:匹配标点符号
[:graph:]:匹配图形
练习:
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
2、显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
3、显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;
4、复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中;
5、复制/etc目录下,所有以.d结尾的文件或目录至/tmp/magedu.com目录中;
6、复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/mageedu.com目录中;
3、bash的快捷键
Ctrl + l :清屏,相当于clear命令;
Ctrl + a :跳转至命令开始处;
Ctrl + e :跳转至命令结尾处;
Ctrl + c :取消命令人执行;
Ctrl + u :删除命令行首至光标所在处的所有内容;
Ctrl + k :删除光标所在处至命令行尾部的所有内容;
Ctrl + f:光标往后挪一个字符;
Ctrl + b:光标往前挪一个字符;
4、bash的I/O重定向及管道
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyoard,0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
输出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的原有内容会被清除;(如果文件不存在则创建)
>>:追加重定向,新内容会追加至目标文件尾部;(如果文件不存在则创建)
# set -C:禁止将内容覆盖输出至已有文件中;文件不存在是可以执行成功的(创建一个新文件),文件存在即使是空的,也是不可以的。
强制覆盖:>|
# set +C:打开可覆盖功能。
2>:覆盖重定向错误输出数据流;
2>>:追加重定向错误输出数据流;
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误 输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
另一种合并输出命令:(这种方式比上面那种更灵活)
COMMAND > /path/to/file.out 2> &1
COMMAND > /path/to/file.out 2>> &1
COMMAND >> /path/to/file.out 2> &1
COMMAND >> /path/to/file.out 2>> &1
输入重定向:< 注:输入重定向只有这个符号,而且一般输入重定向只跟一个文件,如果想多个,要写脚本用循环实现。
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
例:tr -d abc < /etc/fstab
tr "a-z" "A-Z" < /etc/fstab
注:重定向只能重定向文件,不能将另一个命令的输出结果重定向到另一个命令,如果需要将一个命令的输出结果送给另一个命令,要用下面的管道。(在LINUX中每一个命令都是一个程序,执行后就是一个进程,而进程之间是无法通信的,如果想通信,需要借助于管道。)
例如下面这样是不可以的:
[root@localhost tmp]# tr 'a-z' 'A-Z' < echo "$PATH"
-bash: echo: No such file or directory
HERE Documentation:<< 注:这个和输入重定向关系不大,是用来创建文档的。
# cat << EOF
# cat > /path/to/somefile << EOF
关于此处的<<的使用一点疑问? 此处的<<表示此处为文档,这样和cat使用可以追加指定内容到文件中,例如: [root@localhost tmp]# cat > /tmp/cat.out << EOF
> this is new line?
> yes,it is.
> EOF
[root@localhost tmp]# cat /tmp/cat.out
this is new line?
yes,it is. 可以看到,内容被写到了指定的文件中,这个没错,但是不用<<也可以实现: [root@localhost tmp]# cat >> /tmp/cat.out
this is another method!
is it OK?
^C
[root@localhost tmp]# cat /tmp/cat.out
this is new line?
yes,it is.
this is another method!
is it OK? 通过上面命令可以看出,使用第二种方法也是OK的,既然不用这种方法也可以实现,为什么还要用第一种方法?感觉这比第一种还简洁一点。 两种方法对比:
()第一种在输入的时候前面是有>这个符号,而第二种没有;
()第一种是用EOF结束,而第二种用ctrl+c结束;
()两种方法输错的时候都需要按shitf+backspace才能删除; 可能由于现在学习还不够深入,对于两种内在的优劣还不明白,留下此问,待以后解决(2018年9月2日)
管道:
COMMAND1 | COMMAND2 | COMMAND3 | ...
Note:最后一个命令会在当前shell进程的子shell进程中执行;
tee命令:从标准输入读数据,输出至标准输出和指定文件。
功能:tee可以放在任何你想截取内容的地方,然后将内容保存到文件中。(但tee的输出是覆盖输出,并不是追加输出)
tee [OPTION]... [FILE]...
示例:
[root@localhost tmp]# echo "$PATH" | tee /tmp/path.out | tr 'a-z' 'A-Z' 不能用单引号
/USR/LIB64/QT-3.3/BIN:/USR/LOCAL/SBIN:/USR/LOCAL/BIN:/SBIN:/BIN:/USR/SBIN:/USR/BIN:/ROOT/BIN
[root@localhost tmp]# cat /tmp/path.out
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost tmp]# echo "$SHELL" | tee /tmp/path.out | tr 'a-z' 'A-Z'
/BIN/BASH
[root@localhost tmp]# cat /tmp/path.out
/bin/bash
练习:
1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
2、将登录至当前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中;
文本文件处理工具:wc, cut, sort, uniq
wc命令:word count
wc [OPTION]... [FILE]...
-l:lines,只显示行数
-w:words,只显示单词数
-c:characters,只显示字节数
示例:
[root@localhost tmp]# wc /etc/passwd
33 52 1576 /etc/passwd -----分别是行数,单词数,字节数(注意:这里的单词仅指用空格分开的字符串,并不是真正的单词)
cut命令:
cut OPTION... [FILE]...
-d DELIMITER:指明分隔符
-f FILEDS:
#:第#个字段
#,#[,#]:离散的多个字段,例如:1,3,6
#-#:,连续的多个字段,例如1-6
混合使用:1-3,7
--output-delimiter=STRING:指明输出时字段之间的分隔符
sort命令:
sort [OPTION]... [FILE]...
-f:忽略字符大小写
-r:逆序显示
-t DELIMITER:指明字段分隔符
-k #:以指定字段为标准进行排序
-n:以数值大小进行排序,默认以字符大小显示的。
-u:uniq,排序后去重
示例:
[root@localhost tmp]# sort -t: -k3 -n /etc/passwd | cut -d: -f3
uniq命令:
uniq [OPTION]... [INPUT [OUTPUT]]
-c:显示每行重复出现的次数;
-d:仅显示重复过的行;
-u:仅显示不曾重复的行;
Note:连续且完全相同方为重复;
练习:以冒号分隔,取出/etc/passwd文件的第6行至第10行,并将这些信息按第3个字段的数值大小进行排序;最后仅显示各自的第1个字段。
Linux:Day4(上) 文件管理、管道的更多相关文章
- day58:Linux:BashShell&linux文件管理&linux文件下载上传
目录 1.BashShell 2.Linux文件管理 3.Linux文件下载和上传 BashShell 1.什么是BeshShell? 命令的解释,用来翻译用户输入的指令 2.BashShell能做什 ...
- Linux进程间通信——使用匿名管道
在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值.这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据. 一 ...
- Linux 的进程间通信:管道
本文由云+社区发表 作者:邹立巍 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID ...
- Linux中的pipe(管道)与named pipe(FIFO 命名管道)
catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常 ...
- 10个在UNIX或Linux终端上快速工作的建议
你有没有惊讶地看到有人在Unix/ Linux中工作得非常快,噼里啪啦的敲键盘,快速的启动命令,飞快地执行命令? 在本文中,我共享了一些在Linux中快速.高效工作所遵循的Unix/ Linux命令实 ...
- linux more 上一页,下一页
linux more 上一页,下一页 使用more命令可以分页查看内容: 如: more install.txt 分页查看文本内容: 按回车:默认下一行数据: 按空格键盘,默认下一页,以当前屏幕为单位 ...
- [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)
0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...
- Linux不管上一条命令成功还是失败都执行下一个命令的方法
转载请注明来源https://www.cnblogs.com/sogeisetsu/p/11407830.html Linux不管上一条命令成功还是失败都执行下一个命令的方法 Linux不管上一条命令 ...
- Linux标准IO和管道
Linux标准IO和管道 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.标准输入和输出 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: ...
随机推荐
- Flask 系列之 Bootstrap-Flask
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 Bootstrap-Flask 来进行页面美化 ...
- Flask 系列之 SQLAlchemy
SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了. 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环 ...
- virtualbox中 Kali Linux安装增强功能
1. 将VBoxLinuxAdditions.run文件copy出来 2. 赋予执行权限 chmod +x VBoxLinuxAdditions.run 3. 安装 ./VBoxLinuxAdditi ...
- RBAC 几种常见的控制权限模型
1. 几种常见的权限模型 2. ACL 和 RBAC 对比 3. RBAC 权限模型的优势 (1)简化了用户和权限的关系 (2).易于扩展 易于维护 4.优势(给权限和收回权限) 5.架构
- 索引堆(Index Heap)
首先我们先来看一个由普通数组构建的普通堆. 然后我们通过前面的方法对它进行堆化(heapify),将其构建为最大堆. 结果是这样的: 对于我们所关心的这个数组而言,数组中的元素位置发生了改变.正是因为 ...
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- python base64 decode incorrect padding错误解决方法
个人觉得原因应该是不同的语言/base64库编码规则不太统一的问题. python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足 如下代码: da ...
- Android Thread 官方说明
Thread官方说明 https://developer.android.google.cn/reference/java/lang/Thread Thread是程序中执行的线程.Java虚拟机允许应 ...
- Linux 防火墙
目录 iptables配置 1. iptables 控制类型 2. 链表规则 3. iptables表 CentOS和RedHat 6.x CentOS和RedHat 7.x ufw ubuntu u ...
- Function、Object、Prototype 之间的关系解析
前提:js中所有的内置对象都是Function 的实例. 例如:Array\String\Number... 等 原理剖析: 对象属性搜索的原理就是按照对象的 __proto__ 属性进行搜索,直到_ ...