Linux文件管理和输入输出重定向

文件管理

Bash执行命令

passwd

复制代码
passwd

普通用户修改密码

复制代码
passwd robinkool

root用户管理账户密码

复制代码
passwd -d robinkool

root用户删除普通用户密码

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

复制代码
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则为不能登录

手动创建用户

复制代码
#添加账户
vim /etc/passwd
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash

#添加组
vim /etc/group
zhangsan:x:1002:

#添加密码
vim /etc/shadow
#最后一行添加 明文为redhat
$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::

#准备家目录
cp -r /etc/skel/ /home/zhangsan
#修改张三家目录所属有zhangsan用户和组
chown zhangsan:zhangsan /home/zhangsan
ll -d /home/zhangsan

#测试
ssh zhangsan@localhost

/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-1

cp /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默认创建硬连接

Linux的输入和输出重定向

输出重定向到文件

独立输出

复制代码
find /etc -name 'passwd'

查找etc目录下文件名是passwd的所有文件

复制代码
find /etc -name 'passwd' 1>passwd.list
cat passwd.list
1>passwd.list可以省略1写为 >passwd.list
1和>之间不能有空格

将找到的名覆盖写入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 命令找到的匹配文件路径(如 /etc/passwd

错误信息(标准错误)

  • 位置 :被重定向丢弃(2>/dev/null 表示丢弃所有错误)

  • 内容 :权限不足、目录不存在等错误(如 find: /etc/ssh: Permission denied

    find /etc -name 'passwd' > passwd.all 2>&1

将错误信息和正确信息覆盖写入到相同文件

复制代码
find /etc -name 'passwd' >> passwd.all 2>&1

将错误信息和正确信息追加写入到相同文件

输出重定向到程序

管道符

管道符(|)实现,将上一个命令的输出作为标准输入传递给下一个命令

复制代码
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.list
cat passwd.list
将空覆盖写入passwd.list 清空文件内容
复制代码
find /etc -name 'passwd' 2>/dev/null | tee passwd.list
cat passwd.list

tee命令覆盖保存到文件

复制代码
find /etc -name 'passwd' 2>/dev/null | tee -a passwd.list
cat passwd.list

tee命令追加保存到文件

标准输入重定向给程序

复制代码
cat /etc/hosts
cat < /etc/hosts
复制代码
cat << EOF
> hello
> world 
>EOF

shell读取到EOF时,代表标准输入完成

判断一个命令是否接受标准输入:最简单的方式就是将文件内容作为标准输入重定向给程序。

相关推荐
old_power1 小时前
Docker加入用户组
运维·docker·容器
想睡hhh1 小时前
Linux基础开发工具——vim工具
linux·vim·指令
月星过亿1 小时前
虚拟机搭建
运维
阿加犀智能1 小时前
快速在高通芯片手机&平板本地部署大模型DeepSeek
android·linux·deepseek
牛奶咖啡131 小时前
配置Linux的网络为静态IP地址的一些方法
linux·配置linux的网络为静态ip·查看linux的网络是否畅通·桥接模式配置网络的方法步骤·连接linux系统的常用工具
xuanwojiuxin1 小时前
Linux 阻塞非阻塞
linux·运维·服务器
n33(NK)1 小时前
Linux从入门到精通
linux·运维·服务器
Invinciblenuonuo1 小时前
Linux【1】-----虚拟内存
linux·运维·服务器
2501_915373881 小时前
linux 更新ollama服务
linux·运维·服务器
Yana.nice1 小时前
Linux向文件每行结尾追加指定内容的方法
linux