首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
运维.售后
›
性能优化
›
Linux文件管理和输入输出重定向
返回列表
发新帖
Linux文件管理和输入输出重定向
[复制链接]
发表于
昨天 09:46
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
Bash 文件管理常用命令速查:passwd/cat/head/tail/less 到重定向
这份笔记整理的是 Linux 下日常用得最多的文件管理与输入输出操作,从 passwd 改密码、cat 看文件,到 head、tail、less、wc、echo 这一组文本查看工具,再到 mkdir、cp、mv、rm 的文件操作,最后落到管道、重定向和 tee。每一条都配了实测用的命令,照着敲一遍基本就能记住,重点是理解"标准输入 / 标准输出 / 标准错误"这三件事是怎么被重定向的。
账号与密码相关命令
先说最基础的三个 passwd 用法:普通用户改自己的密码、root 管理账户密码、root 删除普通用户密码。
passwd
复制代码
普通用户修改密码
passwd
robinkool
复制代码
root 用户管理账户密码
passwd
-d robinkool
复制代码
root 用户删除普通用户密码
查看文件内容:file、cat、head、tail、less
file 用来判断文件类型,cat 一次性看多个文件,head 和 tail 管头尾,less 负责交互式翻页。
file
file /bin/file
复制代码
cat
cat option 文件
cat -A /etc/hosts
#-A选项等于-VET
复制代码
cat /etc/hosts /etc/fstab
复制代码
一次性查看多个文件
head
head option 文件
head /etc/profile
#只查看前四行
head -n 4 /etc/profile
复制代码
head -n-3 /etc/profile
复制代码
查看全部内容除了最后三行
head -n3 /etc/hosts /etc/fstab
复制代码
查看多个文件前三行
tail
tail /etc/profile #默认查看尾十行
复制代码
tail -n +4 /etc/profile
复制代码
查看从第四行到最后全部内容
head -n 15 /etc/profile | tail -n 5
tail -n +11 /etc/profile | head -n 5
复制代码
截取文件 11-15 行 /etc/profile 的两种方法
less
less /etc/profile
q=quit
上下方向键逐行查看
左右键左右翻页
pageup和pagedown上下翻页
复制代码
统计与输出:wc、echo、seq、grep
wc
wc -l 输出行数
wc -c 输出字节数
wc -m 输出字符串数
wc -L 显示最长行的长度
wc -w 显示单词计数
复制代码
echo
echo -n 不要追加换行
echo -e 启用反斜杠转义解释
echo -E 抑制对反斜杠转义的解释
复制代码
bashrc 设置文件——持久化保存
seq -s + 10 #-s用法分隔符
复制代码
grep username /etc/passwd
#假如显示nologin则为不能登录
复制代码
手动创建一个用户
下面这套是手工建账户的完整流程:改 /etc/passwd 加账户、改 /etc/group 加组、改 /etc/shadow 加密码、准备家目录、改属主,最后 ssh 登录验证。
#添加账户vim /etc/passwd
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash#添加组vim /etc/groupzhangsan:x:1002:#添加暗码vim /etc/shadow#末了一行添加 明文为redhat$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::#准备家目录cp -r /etc/skel/ /home/zhangsan#修改张三家目录所属有zhangsan用户和组chown zhangsan:zhangsan /home/zhangsanll -d /home/zhangsan#测试ssh zhangsan@localhost
复制代码
系统目录结构与文件操作命令
先把常用目录的用途记牢,后面 everywhere 找文件都靠它:
/usr 系统安装的软件、共享的库
/usr/bin 用户命令
/usr/sbin 系统管理命令
/usr/local 本地自定义软件
/etc 系统配置文件
/var 系统可变数据如数据库、缓存目录、日志
/home 主目录(家目录)普通用户存储个人数据和设置文件的位置,每个用户都有自己的位置,/home/robinkool
/root 管理员 root 的主目录
/tmp 供临时文件使用的全局可写空间
/dev 设备文件,供系统访问硬件
mkdir
mkdir dir00
mkdir dir01 dir02
mkdir -p dir00/dir01/dir02/dir03/dor04
隔两层创建不存在的目录使用-p
复制代码
cp
cp /etc/hosts .复制到当前位置cp /etc/hosts ./hosts-1复制到当前位置而且重定名为hosts-1cp /etc/passwd
/etc/host.conf .复制多个文件到当前位置cp -r /etc/yum .复制目录用-r 复制etc下的yum目录到当前位置cp -r复制目录当目标位置有雷同名称目录时,将源目录放到雷同目录下,而不是覆盖。
复制代码
mv
mv hosts-1 /lab移动单个文件mv passwd
hosts /home/robinkool/lab移动多个文件,目标位置只能是目录mv host.conf host.conf-new重定名mv lab /home/root移动目录
复制代码
rm
rm hosts
删除文件
cp /etc/pki/ca-trust/extracted/java/cacerts .
rm cacerts
强制删除具有写入保护的文件
rm -f cacerts
强制删除文件 不会询问
rm -r /home/root/lab
递归删除
rm -rf
强制递归删除
复制代码
软连接和硬链接
soft link 类似于Windows中的快捷方式,可以通过将占用空间较大源文件创建软连接到原位置,然后将源文件移动到其余位置来节省磁盘空间。
在软件包的源码编译安装中,将软件的服务创建软连接到/usr/bin目录下可以在全局启动服务。
ln -s 原位置 连接名称
复制代码
rm mytmp
删除软连接时,连接名称后面不能跟/分隔符
复制代码
硬链接为普通文件,与源文件的inode号相同,可以通过多个文件名访问同一个数据块,任何一个文件发生改变,其余的也跟着改变。
ln hosts-1 hosts-2
ln默认创建硬连接
复制代码
输入输出重定向:stdout、stderr 与管道
输出重定向到文件
独立输出(标准输出)与错误分离
第一个例子:查找 etc 目录下文件名是 passwd 的全部文件。
find /etc -name 'passwd
'
复制代码
查找 etc 目录下文件名是 passwd 的全部文件
find /etc -name 'passwd
' 1>passwd
.listcat passwd
.list1>passwd
.list可以省略1写为 >passwd
.list1和>之间不能有空格
复制代码
将找到的文件名覆盖写入 passwd.list 中
find /etc -name 'passwd
' >> passwd
.list
复制代码
将找到的文件名追加到 passwd.list 中
find /etc -name 'passwd
' 2>passwd
.err
复制代码
这里是因为用的 root 用户权限不足的问题,当使用 cat passwd.err 时显示为空,如果切换为普通用户就会看到错误信息
find /etc -name 'passwd
' 2>/dev/null设备文件/dev/null永久为空
复制代码
将错误信息扔掉
这里看不到错误是因为错误信息被定向到空,但是因为是 root 用户输入命令,所以没有权限不足的错误信息。
准确信息(标准输出)
位置
:直接显示在终端(标准输出,文件描述符 1)
内容
:find 命令找到的匹配文件路径
错误信息(标准错误)
位置
:被重定向丢弃(2>/dev/null 表示丢弃全部错误)
内容
:权限不足、目录不存在等错误(如 find: /etc/ssh: Permission denied)
find /etc -name 'passwd
' > passwd
.all 2>&1
复制代码
将错误信息和准确信息覆盖写入到同一个文件
find /etc -name 'passwd
' >> passwd
.all 2>&1
复制代码
将错误信息和准确信息追加写入到同一个文件
输出重定向到程序:管道符、xargs 与 tee
管道符
管道符(|)实现,将上一个命令的输出作为标准输入传递给下一个命令
ip a | grep 'ens160$' | awk '{print $2}'
hostname -I 也可以取ip
复制代码
获取 ens33 网卡 ip 地址
管道符后的命令必须能够接管标准输入,才可以配合管道符使用。但是 ls 不接收管道传递的标准输入。
echo /etc/passwd
| ls -l
复制代码
ls 不接收所以只执行了 ls -l
echo /etc/passwd
| xargs ls -l
复制代码
tee
> passwd
.listcat passwd
.list将空覆盖写入passwd
.list 清空文件内容
复制代码
find /etc -name 'passwd
' 2>/dev/null | tee passwd
.listcat passwd
.list
复制代码
tee 命令覆盖保存到文件
find /etc -name 'passwd
' 2>/dev/null | tee -a passwd
.listcat passwd
.list
复制代码
tee 命令追加保存到文件
标准输入重定向给程序
cat /etc/hosts
cat < /etc/hosts
复制代码
cat << EOF
> hello
> world
>EOF
复制代码
shell 读取到 EOF 时,代表标准输入完成
判断一个命令是否接收标准输入:最简单的方式就是将文件内容作为标准输入重定向给程序。
想判断某个命令能不能"吃"标准输入,直接把文件内容用 `<` 喂进去试一次就行,能读出来就是能接收。
照着上面这套顺序敲一遍,文件管理这一块基本能覆盖日常八成场景;重定向和管道是最容易忘的,建议每次实验后把输出落到 .list 文件里对比一次。
回复
使用道具
举报
返回列表
北冰洋以北
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表