结束程序运行: ctrl + c
共享目录(工作目录): /kyo /Videos
访问共享目录流程:
是否能连通服务器 ping 3.3.3.9
是否服务器开启共享 showmount -e 3.3.3.9
挂载共享目录到本地:
mount 3.3.3.9:/kyo /mnt
复制共享目录内容到家目录:
cp /mnt/* ~/
取消挂载:
umount /mnt
通过git获取教师课件:
首次使用:
echo '3.3.3.1 g.iprintf.com' >> /etc/hosts
cd 工作目录
git clone http://g.iprintf.com/iprintf/linux-note.git
以后使用更新linux-note项目:
cd 工作目录/linux-note
git pull
开机登录用户名及密码:root/123123
桌面快捷键:
ctrl + alt + d 返回桌面
alt + tab 切换程序
alt + f10 放大窗口
alt + f9 最小化窗口
alt + f8 调整窗口大小
alt + f7 移动窗口
ctrl + alt + Backspace 注销
alt + f2 打开运行
gnome-terminal 终端
ktouch 打字程序
ctrl + alt + f2 - f6 进入虚拟终端
ctrl + alt + f1 返回图形界面
ctrl + alt + 方向键 切换屏幕
alt + shift
ctrl + space 切换输入法
alt + f4 关闭程序
终端快捷键:
ctrl + shift + n 创建新的终端
ctrl + shift + t 创建新的标签
alt + 1 - 9 切换标签
ctrl + + 放大终端字体
ctrl + - 缩小终端字体
ctrl + c/ctrl + d 结束程序
shift + pageUp/pageDown 滚动终端
ctrl + shift + w 关闭标签(或者输入exit)
tab 命令补全
两次tab列出相关命令
ctrl + l 清屏
终端默认为vim操作模式
i 输入命令
v 进入vim进行编辑批量执行程序
j/k 调用命令历史
基本命令:
严格区分大小写
命令划分:
ls /
ls代表命令
/代表命令参数
命令与参数 参数与参数之间必须有空格
reboot 重启电脑
poweroff 关机
init 0 关机
init 6 重启
exit 退出当前终端
gnome-terminal 打开图形终端
ktouch 打字程序
ktouch & 后台运行打字程序
命令分类(bash shell)
内部命令 bash自带的命令
外部命令 独立bash的应用程序
man cd 获取bash的所有内部命令
type 命令名 区别命令类别
"shell builtin" 显示代表此命令为内部命令
帮助命令
help 获取命令简单使用信息
man 获取命令详细帮助信息
man 内部命令可以获取bash提供的所有命令
文件系统的目录架构:
/ 根,文件系统开始
bin 存储可执行命令(外部命令源文件) *
boot 启动文件 *
dev 存储设备文件 *
etc 存储配置文件 *
home 用户家目录
lib/lib64 存储库 *
lost+found ext日志目录(ext3/ext4)
media 用于挂载可移动设备的目录
misc 用于自动挂载的目录
mnt 用于用户自定义挂载目录
net 用于网络相关的目录
opt 用于第三方软件安装目录
proc/sys 用于操作系统核心程序相关目录 *
root root用户家目录
sbin 存储系统管理员的命令
selinux selinux相关目录
srv 服务自定义目录
tmp 临时目录 *
usr 用户程序相关目录
var 系统日志目录
路径概念:
文件系统从根开始 /
绝对路径 从根开始的路径
相对路径 相对当前工作路径的路径
查看当前路径 pwd
切换路径 cd
cd 绝对路径
cd 相对路径
cd ~ 切换当前用户家目录
cd .. 切换到上一级目录
cd - 切换到上一次的目录
创建目录 mkdir
mkdir 文件夹名
mkdir 绝对路径
mkdir 绝对路径 -p 创建目录树
删除目录 rmdir (只能空文件夹)
rmdir 文件夹名
查看目录内容 ls
ls 查看当前目录内容
ls 绝对路径...
ls -l 列表显示详细信息
ls -a 显示隐藏文件
ls -d 显示目录详细信息
文件操作命令:
创建 touch
touch file
文件不存在创建文件,文件存在会更新文件的时间(最后修改时间)
编辑 vim
vim file 使用vim打开文件
普通模式 默认
编辑模式 i/ESC
命令行模式 在普通模式下按:
i 进入插入模式
ESC 返回普通模式
:wq 保存退出
:w 保存
:q 退出
:q! 强制退出
查看 cat/more/less/head/tail
cat 文件路径 直接文件内容显示在终端
more 文件路径 一行一行显示文件内容
less 文件路径 按vim模式查看文件
head 文件路径 只查看文件内容前10行
head -n 5 文件路径 只查看文件内容前5行
tail 文件路径 只查看文件内容后10行
tail -n 5 文件路径 只查看文件内容后5行
复制 cp
cp 源文件路径 目标路径 复制文件
cp 源文件路径 目标路径 -r 复制目录
剪切/重命名 mv
mv 源文件路径 目标路径
mv 源文件名 新文件名
删除 rm
rm 文件路径
rm 文件路径 -f 强制删除不会提示
rm 文件路径 -rf 强制删除目录
重定向
标准输入 0
标准输出 1
错误输出 2
> 标准输出重定向, 清空原文件内容
1> 标准输出重定向, 清空原文件内容
2> 错误输出重定向, 清空原文件内容
&> 所有输出重定向, 清空原文件内容
>> 标准输出重定向,追加原文件
1>> 标准输出重定向, 追加原文件
2>> 错误输出重定向, 追加原文件
&>> 所有输出重定向, 追加原文件
< 标准输入重定向, 覆盖
<< 标准输入重定向,追加
管道 |
|前命令的标准输出作为|后命令的标准输入
取文件中第7行内容:
head -n 7 file.txt | tail -n 1
VIM操作:
三种模式:
普通模式 默认 接受命令进行操作
可视模式 v
编辑模式
插入模式 i
替换模式 R
返回普通 ESC
命令行模式 在普通模式下输入:
普通模式的命令:
j 将光标往下移动一行
k 将光标往上移动一行
l 将光标往右移动一格
h 将光标往左移动一格
G 将光标移动到最后一行
gg 将光标移动到第一行
v 进入可视模式
V 进入行可视模式
y 复制选取一段
p 粘贴
x 删除选取一段
x 删除一个字符
i 在当前光标位置前进入插入模式
a 在当前光标位置后进入插入模式
I 在当前光标行首进入插入模式
A 在当前光标行尾进入插入模式
普通模式先输入数字再输入命令代表重复此数字的命令
10j 将光标往下移动10行
100x 删除100个字符
命令行模式的命令
:w 保存
:q 退出
:x 保存退出
:144 将光标移动到144行
分屏编辑
垂直分屏
vim file1 file2 -O
水平分屏
vim file1 file2 -o
切换屏幕
ctrl + w + w
ctrl + w + j/k/l/h
编辑时垂直分屏显示其它文件
:vsp 文件路径
编辑时水平分屏显示其它文件
:sp 文件路径
退出所有文档
:qall
运行shell命令
:! ls
运行shell命令将运行结果插入文档
:r! ls
进入vim帮助
:h
进入链接文档: ctrl + ]
返回链接文档: ctrl + t
vim初步教程命令: vimtutor
用户管理
每个用户都有一个唯一用户ID(大于等于零的整型数)
二进制 0-1
十进制 0-9
八进制 0-7
十六进制 0-9 a-f
超级管理员用户 root 0
系统用户 1 - 500
普通用户 501 - 65535
查看当前登录用户的ID:id
切换用户: su
不完全切换: su kyo
完全切换: su - kyo
Linux特点: 一切皆于文件
用户信息配置文件:
/etc/passwd
root:x:0:0:root:/root:/bin/bash
第一个字段: 用户名
第二个字段: 早期密码字段
第三个字段: 用户ID(UID)
第四个字段: 所属组的ID(GID)
第五个字段: 描述
第六个字段: 用户家目录
第七个字段: 登录运行程序(SHELL)
用户密码配置文件:
/etc/shadow
用户组配置文件:
/etc/group
root:x:0:
第一个字段: 组名
第二个字段: 用户组密码
第三个字段: 组ID
第四个字段: 组成员列表
用户组密码配置文件:
/etc/gshadow
对用户操作的命令:
useradd 添加用户
userdel 删除用户
passwd 修改密码
手动创建用户:
vim /etc/passwd
kyo:x:500:500:kyo:/home/kyo:/bin/bash
vim /etc/group
kyo:x:500:
vim /etc/shadow
grub-md5-crypt 生成密码
kyo:$1$qK.xw$YmywT0cXEqF49C5TKTqOc/:17036:0:99999:7:::
vim /etc/gshadow
kyo:!::
mkdir /home/kyo
cp /etc/skel/.bash* /home/kyo/
chown kyo:kyo /home/kyo -R
chown 700 /home/kyo -R
===================================================
权限
ls -l /etc/passwd
-rw-r--r-- 1 root root 1618 8月 25 14:39 /etc/passwd
第一段代表文件类型和权限
第二段代表硬链接数
第三段代表文件所属用户
第四段代表文件所属用户组
第五段代表文件大小 字节
1G = 1024M
1M = 1024K
1K = 1024字节
第六段代表文件最后修改时间
第七段代表文件名
-rw-r--r-- 文件类型和权限
- 文件类型
- 普通文件
d 文件夹
l 软链接
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
rw-r--r-- 文件权限
分成三段:
rw- 所属用户对此文件的操作权限(u)
r-- 所属用户组对此文件的操作权限(g)
r-- 其它用户对此文件的操作权限(o)
r 读
针对文件, 是否能对此文件进行读取内容
针对目录, 是否能ls列出目录内容
w 写
针对文件,是否能对此文件进行修改
针对目录,是否能在此目录里创建文件或子目录
x 执行
针对文件,可执行文件没有x权限是不能运行
针对目录,是否能切换进目录(cd)
设置的权限对超级管理员用户没有意义
修改权限:chmod
chmod u=r-x,g=r-x,o=r-- file
chmod u+x,g+w,o-w file
chmod 0755 file
chmod u=r-x,g=r-x,o=r-- 目录路径 -R
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
修改文件所属用户: chown
chown 用户名:组名 文件路径
chown 用户名:组名 目录路径 -R
权限掩码:umask
打印当前权限掩码: umask
修改当前权限掩码: umask 新的权限掩码
创建文件的默认权限:
普通文件:0666 rw-rw-rw-
目录: 0777 rwxrwxrwx
实际文件权限默认权限减去权限掩码
权限掩码为: 0002
普通文件: 0664
目录: 0775
linux系统管理习惯:
强制普通用户登录
如何将普通用户加入到sudoers文件,使普通用户能使用系统管理员命令(用法: 在命令前加sudo )
首先切换root用户,visudo
自动打开文件编辑,找到root ALL=(ALL) ALL并且复制修改用户名为普通用户即可
特权位
默认执行命令,命令的运行权限是当前登录用户
有了特权位的命令,运行权限是命令的所属用户
chmod u+s 可执行文件
chmod g+s 可执行文件
ls -l列表显示用户权限有s, 小写s代表文件有执行权限,大写s代表文件没有执行权限
例:切换用户要验证密码,但/etc/shadow没有任何权限(不能给权限,否则任何用户都可以去修改别人密码)
把su命令所属用户设置为root并且设置用户特权位,让su运行权限为root
粘贴位 让用户不能操作其它用户的东西
应用场景:目录具备所有权限,可以让任何用户操作此目录, 但用户创建的文件不能被其它用户操作(编辑/删除)
只能针对目录的其它用户权限(o)
chmod o+t 目录路径
===================================================
网络基本配置
ping 检查与其它主机是否连通
ifconfig 查看/配置网卡信息
ifconfig 列出所有网卡信息
lo 回环网卡,代表本机本身
eth0 第一张有线网卡
wlan0 第一张无线网卡
ifconfig eth0 获取指定网卡信息
ifdown eth0 关闭网卡
ifup eth0 开启网卡
dhclient 自动获取IP地址
dhclient eth0 让eth0网卡自动获取IP地址
自动获取过再获取需要重启网络
mii-tool 检查网卡网线是否连通
mii-tool eth0
手动设置IP地址:
临时:
ifconfig eth0 3.3.3.199 netmask 255.255.255.0
永久:
eth0网卡的配置文件
vim /etc/sysconfig/network-script/ifcfg-eth0
DEVICE="eth0" #网卡设备名
BOOTPROTO="static" #代表静态IP
BOOTPROTO="dhcp" #代表动态IP
HWADDR="68:B5:99:F1:FB:4D" #代表网卡硬件地址
ONBOOT="yes" #代表网卡是否开机启动
TYPE="Ethernet" #代表网卡类型 以太网
IPADDR=3.3.3.9 #代表网卡IP地址
NETMASK=255.255.255.0 #代表网卡子网掩码
GATEWAY=3.3.3.1 #网关
重启电脑或重启网络才能生效
service network restart
hostname 主机名(尽量使用域名格式)
临时修改主机名: hostname 新主机名
永久修改主机名: vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=新的主机名(域名形式)
域名或主机名的本地解析文件: vim /etc/hosts
格式:ip地址 域名或主机名
::1 主机名(代表图形界面, 如果图形界面慢,检查::1对应的主机名是否正确)
域名解析配置文件: vim /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 8.8.8.8
网络排错:
第一步: 检查网线 mii-tool eth0
第二步: 检查IP地址 ifconfig eth0
本机IP不通(网卡出错, 操作系统的TCP/IP协议栈错误, 多张网卡设置同网段IP)
第三步: 检查与网关是否连通 ping 网关(3.3.3.1)
第四步: 检查外网是否连通 ping 223.5.5.5(阿里云域名解析服务器(DNS))
提示: connect: 网络不可达(网关问题)
route -n 检查是否设置网关
route add default gw 3.3.3.1(网关地址)
第五步: 检查域名解析是否正常 ping www.baidu.com
提示:unknown host(没有添加DNS)
vim /etc/resolv.conf
nameserver 223.5.5.5
作业:
1. 将主机设置静态IP地址
2. 手动创建一个用户
3. vimtutor看完
定时任务: crontab
ubuntu: service cron status
centos: service crond status
编辑当前用户的定时任务: crontab -e
当出当前用户的定时任务: crontab -l
当出指定用户的定时任务: crontab -l -u root
删除当前用户的所有定时任务: crontab -r
删除当前用户的所有定时任务(提示是否删除): crontab -i
设定全局配置文件: /etc/crontab
分钟 小时 日 月 星期 执行用户 执行命令
* * * * * root echo "hello" > /dev/pts/24
* 代表每分钟、每小时、每日、每月、每星期
, 分隔时间 19,24 * * * * 每小时的19和24执行
- 时间段 19-24 * * * * 每小时的19分到24之间每分钟都执行
/n 每隔n个单位 */2 * * * * 每小时的每两分钟去执行
星期与日期是或的关系
*/30 */2 15 6 7
======================================================================
ssh远程管理:
服务器必须开启sshd服务
ubuntu: apt install openssh-server
centos: yum install sshd
ssh sshd的客户端
ssh you@3.3.3.135 远程使用you用户登录3.3.3.135
远程登录的前提:
知道远程管理电脑的IP
知道远程管理电脑的用户名及密码
远程管理电脑必须开启sshd服务
远程管理电脑的端口号(默认为22)
为了提高安全: 使用证书登录
生成证书(公钥/私钥)
公钥可以给任何人,使用公钥必须使用私钥进行解密
ssh-keygen 默认生成在家目录的.ssh目录下 也可以指定私钥密码(默认为空密码)
把公钥复制到服务器上
scp id_rsa.pub 3.3.3.135:~
登录3.3.3.135机执行下面命令:
mkdir -p ~/.ssh
cat ~/.id_rsa.pub >> ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys
ssh安全设置:
sshd服务的配置文件 /etc/ssh/sshd_config
1. 改变端口号
Port 22(将22改成自定义端口)
2. 不允许root登录
PermitRootLogin no
3. 只允许证书登录,不允许密码登录
PasswordAuthentication no
重启sshd服务才能生效: service sshd restart
ssh工具格式:ssh 用户名@IP地址 -p 端口号 -i 私钥路径
ssh config配置:简化ssh登录操作
vim ~/.ssh/config
Host 135 主机自定义名
HostName 3.3.3.135 主机IP或域名
Port 9999 主机端口号
User you 登录用户名
PubKeyAuthentication yes 证书登录
IdentityFile /kyo/135.key 私钥路径
输入: ssh 135 就可以登录3.3.3.135
-----------------------------------------------------------------------------
git工具 版本控制工具(svn) 代码 团队开发协作工具
github 开源中国osc
集中管理 项目代码放在服务嚣 大家与服务嚣
从服务嚣上更新代码下来
进入代码编辑
提交修改到服务嚣(如果发现服务器有更新必须先更新代码合并代码再提交)
不能离线工作
分布式管理
服务器只是作为中转站
服务器上项目是只一份拷贝,所有开发人员都对此项目有一份拷贝
独立工作,不依赖服务嚣
也可以使用集中管理模式来开发
日志查询
版本切换无成本
分支功能 基本上无成本
官网: git-scm.com
git官方中文文档:http://g.iprintf.com
git基本配置:
/etc/gitconfig 系统全局配置 git config --system
~/.gitconfig 当前用户的配置 git config --global
当前仓库目录.git/config
一般针对当前用户配置:
配置仓库提交者及email
git config --global user.name "kyo"
git config --global user.email "iprintf@qq.com"
配置git使用的文本编辑器
git config --global core.editor vim
列出当前仓库使用配置:
git config --list
列出当前仓库某个配置的值:
git config user.name
创建git命令别名:
git config --global alias.c config
git config --global alias.c 'config core.editor'
获取配置帮助信息:
git config --help
git help config
man git config
git的基本操作:
仓库创建: git init
在创建仓库目录下运行: git init
仓库克隆: git clone
默认在当前目录下创建远程仓库名
git clone file:///opt/git-srv
克隆远程仓库到当前指目录
git clone file:///opt/git-srv mygitname
仓库状态:git status
工作目录 当前工作目录
暂存区 git add
仓库 git commit
将文件添加至仓库:git add
添加当前仓库所有未暂存的文件, 不包括隐藏文件
git add *
忽略文件 在当前仓库路径创建.gitignore
vim .gitignore
fa.wmv
移除操作: git rm
git rm -f 强制删除
git rm -r 删除目录
git rm --cached 从暂存区删除
移动:git mv
git mv old_name new_name
提交修改: git commit
git commit -m "编写提交说明"
弹出vim编写提交历史: git commit
第一行为标题,第二为空行,第三行后为详细说明
修改最后一次提交
git commit --amend
查看差异: git diff
对比最后一次提交与本此工作目录的差异
查看提交历史:git log
git log -p 查看每次提交的内容差异
git log -2 查看最近两次提交
git log --oneline 简约一行显示提交历史
git log --grep add 查看有关键词add的提交历史
单行显示历史并且显示所有分支信息(图形显示分支结构)
git log --oneline --decorate -all -graph
远程仓库:
列出远程仓库
git remote
列出远程仓库的url
git remote -v
添加远程仓库
git remote add 远程仓库名 仓库地址
拉取远程仓库数据 (不会合并分支)
git fetch 远程仓库名
git merge 远程仓库名/远程仓库分支名
拉取并合并远程仓库数据
git pull 远程仓库
推送当前分支到服务器
git push 远程仓库名 推送分支
修改远程仓库地址
git remote set-url 远程仓库名 新的远程仓库地址
删除远程仓库
git remote rm 远程仓库名
服务嚣搭建git仓库:
服务器:
添加git用户,修改git用户家目录为git仓库根目录,修改git的bash为git-shell
在git用户家目录创建一新文件夹(git-srv)并且切换进目录
git init --bare
客户端:
添加远程仓库
git remote add iprintf git@3.3.3.9:/git/git-srv
git pull iprintf
标签 tag
列出仓库标签
git tag
创建标签
git tag 标签名
git tag -a 标签名 -m "标签说明"
查看标签详细信息
git show 标签名
删除标签
git tag -d 标签名
指定commit设置标签
git tag -a 标签名 commit标识
检出标签
git checkout -b 新分支名 标签名
分支 branch
列出分支
git branch
列出分支对应提交
git branch -v
创建分支
git branch 分支名
创建分支并且切换分支
git checkout -b 分支名
切换分支
git checkout 分支名
删除分支
git branch -d 分支名
合并分支
git merge 合并的分支
重置 reset
暂存区 --mixed 默认
索引区 --soft
工作目录 --hard 真正会改变实际文件,慎用
操作历史:reflog
git reflog
git reset commit --hard
-------------------------------------------------------------------------
安装chromium浏览器:
apt install chromium-browser
cd ~
git clone http://g.iprintf.com/iprintf/vimium.git
chromium-browser &
打开设置 -> 扩展 -> 开发者模式 -> 加载选择家目录下载的vimium
? 获取帮助
Shell脚本开发: SHELL 一种软件的统称,当前系统使用bash Shell Bash Shell的特点: tab键命令补全 命令历史(执行命令历史) 命令别名 bashrc配置文件 Bash Shell脚本 脚本编程语言: 变量 方便替换 流程控制 分支结构/循环结构 函数 代码打包 数组 扩展变量 学习编程流程: 找语言编程入口 打印hello world 变量的定义 - 数据类型 - 运算符 流程控制(if/case/for/while) 函数 数组 脚本对应一个普通文件,可以通过解析器来执行 Bash Shell的解析器:/bin/bash Bash Shell脚本文件的格式: 第一行指定脚本的解析嚣路径 #!/bin/bash 一行一个命令顺序向下编写与执行 通过;将多条命令隔开写在一行中 Bash Shell变量: 变量命令规则: 大小写严格区分 数字与字母组合但不能以数字开头 可以和特殊字符组合(只推荐使用下划线), 可以以特殊字符开头 变量的类型:字符串类型 变量的定义: 变量名=变量值 变量的访问: $变量名 / ${变量名} 变量的删除: unset 变量名 变量定义等于号两边不能有空格 环境变量(bash获取操作系统的信息保存到环境变量中) env 列出所有环境变量 PS1 控制命令提示符 \u 当前登录用户名 \h 当前主机名 \w 当前路径 \W 当前目录名 PATH 控制所有命令的路径, 不用输入命令的全路径 新建环境变量: export 环境变量名=环境变量值 普通变量与环境变量的区别: 环境变量会影响子进程,普通变量不会影响子进程 子进程会复制父进程的环境变量, 子进程对环境变量修改不会影响父进程 bash shell脚本是开启一个新进程运行 通过.或source命令去执行脚本是在当前进程执行 变量的特殊访问方法: ${变量名} 输出变量值 ${变量名#*分隔符} 输出变量值中第一个分隔符后面的内容 ${变量名##*分隔符} 输出变量值中最后一个分隔符后面的内容 ${变量名%分隔符*} 输出变量值中最后一个分隔符前面的内容 ${变量名%%分隔符*} 输出变量值中第一个分隔符前面的内容 ${变量名:起始数:个数} 输出变量值从起始数开始指定个数字符 ${变量名/指定/替换} 输出变量值将指定第一个关键词替换 ${变量名//指定/替换} 输出变量值将指定全部关键词替换 ${#变量名} 输出变量值的长度 练习: 编写脚本获取当前有线网卡的IP地址 Bash Shell的特殊字符: * 通配符 代表所有 ! 执行命令历史 . 代表当前路径 .. 代表上一级目录 : 永真 - 在外部命令后代表短参数 & 在后台运行程序, 程序后加& $ 访问变量 # 注释, 在命令前加不会执行此命令 / 根目录 ~ 家目录 | 管道 > 重定向 >> 追加 = 变量赋值 ; 命令结束符 \ 脱义单个字符 "" 不完全的批量脱义 $不脱义 '' 完全的批量脱义 `` 将引起来内容当作命令去执行,将命令执行的结果替换 [] 条件判断 {} 范围 {1..10}代表1到10的数字 {a..z}代表a到z字母 $() 功能与反引号一样,替代反引号 Bash Shell的内置变量: $0 代表脚本名称 $1...$n 代表脚本的参数 $# 保存脚本的参数个数 $@/$* 保存脚本的所有参数 $$ 保存当前脚本的PID $? 输出上一条命令运行是否正确(0代表正确,非0代表错误) Bash Shell的输入输出: 输出 echo/printf 输入 read -p 指定输入提示语句 -s 关闭回显, 输入不显示 -n 指定输入字符个数 -t 指定输入的时间(秒) cat如果没有跟文件会读标准输入 重定向cat到文件即标准输入重定向到文件 脚本中生成其它文件: cat > yum.repo << EOF [kyo] name=kyo baseurl=http://3.3.3.1/centos1 http://3.3.3.1/centos2 enabled=1 gpgcheck=0 EOF 双向重定向: tee 标准输出和文件两向输出 将ls -l的标准输出重定向到test文件中并且输出到终�