当前位置 博文首页 > 猫耳山在天边:《Linux命令行与shell脚本编程大全》(第三版)读
例子:
man cat
空格翻页、回车下一行、左右键看右侧(左侧)内容、q退出
info info
展示info页面,没看出有什么特别的
设置hostname
hostname mycomputer
切换目录
cd /home/a 切换到/home/a目录,绝对路径
cd b 切换到当前目录下的b目录
cd .. 切换到上级目录
cd ../../ 切换到上级目录的上级目录
cd ~ 切换到用户家目录
cd 切换到用户家目录
cd - 切换到上次切换的目录
打印当前目录
列出当前目录下的文件和目录
ls 输出当前目录下文件和目录
ls -F 同上,目录名后会有/方便区分
ls -a 同ls,同时展示隐藏文件
ls -R 递归显示子目录
ls -l 显示长列表,会有更多文件相关的信息
ls myscript 展示名字为myscript的文件或目录
ls myscri?t 过滤展示内容,问号代表一个任意字符
ls mysc* 过滤展示内容,星号代表多个任意字符
ls -l --time=atime 展示文件,时间列展示内容改为访问时间(默认是修改时间)
touch a.log 创建a.log文件,如果该文件存在,更新该文件的修改时间
touch -a a.log 更新该文件的访问时间而非修改时间
cp test_1 test_2 把当前目录下的test_1复制到test_2
cp -i test_1 test_2 复制时如果有文件已经存在,会询问是否覆盖
cp ../test_3 . 复制上级目录的test_3到当前目录
cp ../test_3/*.log . 把上级目录中的test_3目录下的所有以.log结尾的文件复制到当前目录
cp -R test_1 test_2 拷贝时递归拷贝子文件夹
在输入命令、目录名、文件名时制表符可以自动补全
创建链接
ln -s test.log s1_test.log 创建test.log的软链接(符号链接)s1_test.log
ln test.log h1_test.log 创建test.log的硬链接h1_test.log
readlink -f /usr/bin/python 如果/usr/bin/python是个链接文件,读取他的原始文件
移动文件或重命名文件
mv a.log b.log 重命名a.log文件,改为b.log
mv ../a.log . 将上级目录中的a.log移动到当前目录
删除文件或目录
rm a.log 删除a.log
rm -i a.log 删除a.log,删除前询问是否删除
rm -f a.log 强制删除a.log,不询问
rm -r somedir 递归删除somedir中的内容
创建目录
mkdir adir 创建adir目录
mkdir -p adir/bdir/cdir 递归创建目录(不存在的父级目录会自动创建)
删除目录,只有目录为空时才会删除,所以要先删除目录中的内容再删除目录
rmdir adir 删除adir目录
打印目录树,默认可能没有安装
tree . 打印当前目录的树状结构
查看文件类型(文本、目录、链接、可执行文件等)
file a.log 查看a.log的文件类型
查看整个文件
cat a.log 查看a.log文件的内容
cat -n a.log 查看a.log文件内容,带行号
cat -b a.log 查看a.log文件内容,非空行带行号
cat -T a.log 查看a.log文件内容,不显示制表符(用^I代替)
逐页查看文件内容
more a.log 逐页查看a.log的文件内容,翻页方法和man相同
逐页查看文件内容,可以倒退
less a.log 逐页查看a.log的文件内容,翻页方法和more相同,但是在原有基础上增加了上下翻页的功能键(PgUp和PgDn)
查看文件末尾(默认10行)的内容
tail a.log 查看a.log末尾的内容
tail -n 20 a.log 查看a.log末尾20行的内容
tail -f a.log 动态查看a.log末尾的内容(即如果其他程序写入了a.log,这里会实时显示出来)
查看文件开始(默认10行)的内容
head a.log 查看a.log文件开头的内容
head -n 20 a.log 查看a.log文件开头20行的内容
ps的基本输出显示了程序的进程id(PID)、运行在哪个终端(TTY)、以及进程已用的CPU时间
完成输出格式中,UID:启动进程的用户,PID:进程ID,PPID:父进程ID,C:进程生命周期中的CPU利用率,STIME:进程启动时的系统时间,TTY:进程启动时的终端设备,TIME:累积CPU时间,CMD:启动的程序名称
ps 显示运行在当前控制台下的属于当前用户的进程
ps -e 显示所有进程
ps -f 显示完整格式的输出
Ps -l 显示长列表(不常用)
ps --forest 显示进程层级
ps -ef --forest 前几个的组合使用
实时监测进程,q退出,d修改轮询间隔,f选择显示哪些字段字段d,F选择按哪个字段排序
top 实时监测进程
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
kill命令通过进程id给进程发信号。默认情况发送TERM信号
kill 123 尽可能杀死pid是123的进程
kill -9 123 无条件杀死pid是123的进程
通过进程名而不是PID来结束进程,支持通配符
killall http* 杀死所有以http开头的进程
给出两个简单例子
mount 输出当前系统上挂载的设备列表,每行展示:媒体设备文件名、虚拟目录挂载点、文件系统类型、已挂载媒体的访问状态
mount -t vfat /dev/sdb1 /media/disk 将vfat格式的u盘/dev/sdb1挂载到/dev/sdb1目录
umount [directory|device] 这个命令可以通过设备文件或挂载点来指定要卸载的设备
显示设备上还有多少磁盘空间
df 显示每个有数据的已挂载文件系统使用情况
df -h 同上,但是按照用户易读的形式显示数值
du显示某个特定目录的磁盘使用情况
du 当前目录下所有文件、目录、子目录的磁盘使用情况
sort a.log 排序输出a.log内容,默认按照字典顺序
sort -n a.log 排序输出a.log的内容,将他们识别成数字排序
sort -M a.log 如果a.log以Jan等形式的三字符月份名开头,可以按照月份排序
sort -t ':' -k 3 -n /etc/passwd 排序/etc/passwd文件,按冒号分段,然后按第三段排序,并且将其作为数字进行排序
du -sh * | sort -nr 这里用了管道,查看当前目录下所有子文件、子文件夹的大小,然后当做数字倒排序(-r为倒排序)
查找文件内容
grep [options] pattern [file] 查找某个文件中匹配pattern模式的字符的行
grep three a.log 查找a.log文件中包含three的行
grep -v three a.log 查找a.log文件中不包含three的行
grep -n three a.log 查找a.log文件中包含three的行,并添加行号
grep -c three a.log 统计a.log文件中包含three的有多少行
grep -e three -e two a.log 查找a.log中包含three或two的行,-e可以用来指定多个匹配模块
grep [tf] a.log 查找a.log中包含t或包含f的行
grep的衍生,支持POSIX扩展正则表达式
grep的衍生,支持将匹配模式指定为用换行符分割的一列固定长度的字符串
用来压缩文件
gzip a.log 压缩a.log文件
gzip my* 压缩my开头的所有文件(不压缩目录)
用来查看压缩过的文本文件的内容
用来解压文件
tar -cvf test.tar test/ test2/ 创建test.tar的归档文件,还有test和test2目录内容
tar -tf test.jar 列出test.jar的内容
tar -xvf test.jar 从test.tar中提取内容
bash 从当前shell启动一个shell
bash 从刚启动的shell再启动一个shell
ps --forest 展示进程树,可以看出父子关系
pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL 这是一个命令列表,最后一行显示0,表示没有生产子shell
(pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL) 这是一个进程列表,最后一行显示1,表示生产了一个子shell
(pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; (echo $BASH_SUBSHELL)) 这是一个进程列表,最后一行显示2,表示生产了两个子shell
sleep 10 休息10秒
sleep 10 & 在后台休息10秒,马上输入后台作业号和进程id
jobs 显示当前运行在后台模式中的所有用户的进程
jobs -l 显示当前运行在后台模式中的所有用户的进程以及它们的pid
协成可以同时做两件事:在后台生产子shell,并在这个子shell中执行命令
coproc sleep 10 在后台创建shell并执行休眠10秒
coproc My_Job { sleep 1000; } 在后台创建shell并执行休眠1000秒,为这个后台程序起名为My_Job,注意,格式要求严格,空格和分号需要严格按照格式
外部命令也被称为文件系统命令,是存在于bash shell之外的程序。执行他们时回创建出一个子进程,这种操作被称为衍生(forking)。
ps -f 命令可以很清楚的看出,他创建了一个子进程,ps是一个外部命令
这个命令可以找出可执行命令的位置
which ps 可以找出ps命令的位置(一般情况下是在/bin/ps)
內建命令和shell编译在一起,不需要子进程执行,效率更高。
內建命令,可以查看命令的类型
type cd 显示可执行命令cd的类型(会显示类似于shell builtin,说明是內建命令)
type -a echo 显示可执行命令echo的类型,如果有多个,全部列出
內建命令,bash shell会记录用过的命令,可以唤回并重新使用
history 显示最近用过的命令列表
!! 执行理事列表中最近的命令
history -a 强制将理事记录写入.bash_history文件,默认情况下退出时才会写入
!1082 执行命令历史记录编号为1082的命令
內建命令,可以为长远命令及其参数创建别名,减少输入量。别名仅在它所被定义的shell进程中才有效
alias -p 查看当前可用别名
alias li='ls -li' 为ls -li 命令创建别名li,以后直接执行li即可
全局环境变量会对shell会话和所有生成的子shell都是可见的。
printenv 打印全局环境变量
env 打印全局环境变量
printenv HOME 打印名为HOME的全局变量
echo $HOME 打印名为HOME的全局变量
cd $HOME 进入HOME所指的目录
局部环境变量只能在定义他们的进程中可见。
set 输出局部变量、全局变量及用户定义变量(比env、printenv更详细)
用户定义变量需要用小写,避免重新定义系统环境变量(系统环境变量都是大写)带来的灾难
my_var=Hello 定义my_var变量的值Hello;注意不能有空格
my_var2='hello world' 定义my_var2变量的值为hello world;注意不能有空格,值中若有空格,用单引号括起来
在设定全局环境变量的进程所创建的子进程中,该变量都是可见的。
使用export将用户已经定义好的局部环境变量导出到全局环境中。
my_var=hello 创建局部环境变量my_var
export my_var 将my_var导出到全局环境中
unset my_var 删除名为my_var的环境变量
PATH=$PATH:/home/raul/Scripts 把PATH环境变量加上/home/raul/Scripts(PATH环境变量中用冒号分割)
PATH=$PATH:. 把PATH环境变量加上当前目录
/etc/profile 系统默认的主启动文件,每个用户登录时都会执行这个启动文件
$HOME/.bash_profile 用户专属启动文件
$HOME/.bashrc 用户专属启动文件
$HOME/bash_login 用户专属启动文件
$HOME/.profile 用户专属启动文件
如果bash shell不是登录系统时启动的(比如是在命令行提示符下敲bash时启动),那么启动的这个shell叫做交互式shell。它不会访问/etc/profile,只会检查$HOME/.bashrc文件
通过BASH_ENV环境变量来配置需要执行的启动文件
全局性的环境变量可以在/etc/profile.d目录中创建一个以.sh结尾的文件,将全局环境变量设置放入其中
个人环境变量放到$HOME/.bashrc中
非交互式shell的设置文件配置到BASH_ENV环境中
环境变量可以作为数组使用
mytest=(one two three four five) 把一个数组存入mytest环境变量中
echo $mytest 只会显示第一个值one
echo ${mytest[2]} 显示数组的第三个值
echo ${mytest[*]} 显示数组的所有值
mytest[2]=seven 修改数组第三个值,改为seven
unset mytest[2] 去掉数组第三个值(数组长度并未改变,该位置存放了‘空’)
unset mytest 删除整个数组
用户账户存在/etc/passwd文件,展示:用户登录名、用户密码、用户账户的UID、用户账户的组ID(GID)、用户账户的文本描述、用户HOME目录的位置、用户的默认shell
用户密码存在/etc/shadow文件,暂时:用户登录名、加密后的密码、自上次修改密码后过去的天数(自1970.1.1开始计算)、多少天后才能更改密码、多少天后必须更改密码、密码过期前提前多少天提醒用户更改密码、密码过期后多少天禁用用户账户、用户账户被禁用的日期(自1970.1.1到当天的天数)、预留字段给将来使用
useradd -D 查看添加新用户的默认配置
useradd test 添加test用户
useradd -D -s /bin/tsch 修改添加新用户时shell的默认值为/bin/tsch
userdel test 删除test用户
userdel -r test 删除test用户,并且删除他的home目录和邮件目录
修改用户账户的字段
参数有
-l 修改用户账户的登录名
-L 锁定账户,使用户无法登录
-p 修改账户的密码
-U 解除锁定,使用户能够登录
passwd 修改自己的密码
passwd test 修改test账户的密码
chpasswd < users.txt 用users.txt中的内容来修改密码,该文件中的内容应该是userid:passwd的键值对
chsh -s /bin/csh test 修改test用户的默认shell为/bin/csh
修改用户在/etc/passwd文件中的备注字段中的存储信息
chfn test 修改test的备注信息,会提示输入
finger test 查看test用户的信息
用来帮助管理用户账户的有效期
组存在/etc/group文件下,分别展示:组名、组密码、GUID、属于该组的用户列表
groupadd shared 创建名为shared的组
usermod -G shared test 将test用户添加到shared组中
groupmod -n sharing shared 修改组shared的名字,改为sharing
默认权限由umask设置,比较复杂
umask 展示创建文件时的默认权限
umask 026 设置创建文件时的默认权限为640(666-026),创建目录时的默认权限751(777-026)
两种方式,8进制权限码或符号模式
chmod 760 newfile 设置newfile的权限为 -rwxrw----
chmod [ugoa...][+-=][rwxXstugo...]
其中第一组定义了权限作用的对象:u代表用户、g代表组、o代表其他、a代表上述所有
第二组定义了是想 在现有权限上增加权限(+),还是现有权限上移除权限(-),或是将权限设置成后面指定的值(=)
第三组代表作用到设置上的权限:
X:如果对象是目录或者它已有执行权限,赋予执行权限
s:运行时重新设置UID或GID
t:保留文件或目录
u:将权限设置为跟属主一样
g:将权限设置为跟属组一样
o:将权限设置为跟其他用户一样
chmod o+r newfile 给newfile的其他用户增加读权限
chmod u-x newfile 移除newfile的属主的执行权限
chown raul newfile 改变newfile的属主为raul
chown raul.shared newfile 改变newfile的属主为raul,属组为shared
chown .rich newfile 改变newfile的属组为rich
chown raul. newfile 将newfile的属主和属组都改为raul
chown -R raul newdir 递归的将newdir下的所有文件和目录的属主都改为raul
chgrp shared newfile 修改newfile的属组为chgrp
可以创建共享文件夹,如果有需要了解细节再仔细学习,下面给出方法
mkdir testdir 创建共享目录
chgrp shared testdir 将属组改为需要共享文件的组shared
chmod g+s testdir 修改权限
umask 002 所有用户的umask都需要改成002
cd testdir 进入目录
touch testfile 创建文件,这个文件的属组会是shared
fdisk /dev/sdb 给存储设备/dev/sdb分区
进入后,有如下有用的操作
p 显示这个存储设备的详细信息
n 创建新分区
w 保存更改
分区数据使用前,应先用某种文件系统对其进行格式化,每个文件系统相对应的格式化工具不同。
mkefs 创建一个ext文件系统
mke2fs 创建一个ext2文件系统
mkfs.ext3 创建一个ext3文件系统
mkfs.ext4 创建一个ext4文件系统
mkreiserfs 创建一个ReiserFS文件系统
jfs_mkfs 创建一个JFS文件系统
mkfs.xfs 创建一个XFS文件系统
mkfs.zfs 创建一个ZFS文件系统
mkfs.btrfs 创建一个Btrfs文件系统
示例
sudo mkfs.ext4 /dev/sdb1 在/dev/sdb1分区上创建一个ext4文件系统
格式化后,需要将这个文件系统挂载到虚拟目录中才能使用
ls /mnt
sudo mkdir /mnt/my_partition
ls -al /mnt/my_partition/
ls -dF /mnt/my_partition
sudo mount -t ext4 /dev/sdb1 /mnt/my_partition
ls -al /mnt/my_partition
这种挂载方式是临时的,如果想linux启动时自动挂载,可以将其添加到/etc/fstab文件中
fsck可以检查和修复大部分类型的Linux文件系统(包含ext、ext2、ext3、ext4、ReiserFS、JFS、XFS)。需要先卸载目录再检查,检查完后再挂载。
fsck options filesystem 对文件系统进行fsck命令
-a 如果检测遇到错误,自动修复
-A 检查/etc/fstab/文件中列出的所有文件系统
-C 如果支持进度条功能,显示进度条
-N 不进行检查,只显示哪些检查会执行
-r 出现错误时提示
-R 使用-A选项时跳过根文件系统
-s 检查多个文件系统时,依次进行检查
-t 指定要检查的文件系统类型
-T 启动时不显示头部信息
-V 在检查时产生详细输出
-y 检测到错误时自动修复文件系统
fsdisk中分区类型8e即表示这个粪污将会被用作Linux LVM系统的一部分,而不是一个直接的文件系统。
fsdisk 命令,输入t,然后输入8e
下一步是用分区创建实际的物理卷
sudo pvcreate /dev/sdb1 创建实际的物理卷
sudo pvdisplay /dev/sdb1 查看创建进度
sudo vgcreate Vol1 /dev/sdb1 创建卷组
sudo vgdisplay Vol1 查看刚创建的卷组的细节
sudo lvcreate -l 100%FREE -n lvtest Vol1 创建逻辑卷lvtest(参数细节查看lvcreate --help或man lvcreate)
sudo lvdisplay Vol1 查看刚创建的逻辑卷的详细情况
逻辑卷创建后,还需要创建文件系统,挂载到虚拟目录中
sudo mkfs.ext4 /dev/Vol1/lvtest 为逻辑卷创建ext4文件系统
sudo mount /dev/Vol1/lvtest /mnt/my_partition 把逻辑卷挂载到/mnt/my_partition目录下
其他命令
vgchange 激活和禁用卷组
vgremove 删除卷组
vgextend 将物理卷加到卷组中
vgreduce 从卷组中删除物理卷
lvextend 增加逻辑卷的大小
lvreduce 减小逻辑卷的大小
aptitude工具本质上是apt工具和dpkg的前端,使用它有助于避免常见的软件安装问题,如软件依赖关系缺失、系统环境不稳定及其他一些不必要的麻烦。
aptitude 进入aptitude的全屏模式
aptitude show mysql-client 显示mysql-client的详情(以及是否已经安装等信息)
dpkg -L vim-common 列出vim-common软件包所安装的全部文件
dpkg --search /user/bin/xxd 查找某个特定文件属于哪个软件包
aptitude search wine 查找所有名字中包含wine的软件包(如果行首显示i u则表示已经安装,显示p v说明这个包可用,但还没安装)
sudo aptitude install wine 安装名字包含wine的软件包
sudo aptitude safe-upgrade 将所有已安装的包更新到软件仓库中的最新版本,会检查包之间的依赖关系,有利于系统稳定。
aptitude full-upgrade 同safe-upgrade,但不会检查包与包之间的依赖关系。
aptitude dist-upgrade 同safe-upgrade,但不会检查包与包之间的依赖关系。
sudo aptitude remove wine 只删除软件包而不删除数据和配置文件
sudo aptitude purge wine 同时删除软件包以及相关的数据和配置文件
/etc/apt/sources.list aptitude默认的软件仓库配置文件,如果需要自定义,修改这里(最好不要自定义,原始配置中的软件包版本不会互相冲突)
yum list installed 查看系统上已经安装的包
yum list xterm 查看xterm软件包的详细信息
yum list installed xterm 查看xterm软件包是否已经安装
yum provides /etc/yum.conf 查看/etc/yum.conf文件是属于哪个软件包
yum install xterm 安装xterm软件包
yum localinstall package_name.rpm 手动安装下载好的package_name.rpm文件
su hadoop 切换hadoop用户
su - hadoop 切换hadoop用户,并进入hadoop的家目录
su - 切换到root用户,并进入root的家目录
yum list updates 列出所有已安装包的可用更新
yum update package_name 更新指定的软件包
yum update 更新所有可更新的包
yum remove package_name 只删除软件包而保留配置文件和数据
yum erase package_name 同时删除软件包和相关的配置和数据
有时在安装多个软件包时,某个软件包的依赖关系可能会被另一个包的安装覆盖,这叫做损坏的包依赖关系。解决办法如下
首先尝试
yum clean all
yum update
如果不行
yum deplist package_name 可以查看这个软件包所需要的库由那些软件提供,然后可以安装他们。
如果还是不行
yum update --skip-broken 更新所有软件包,忽略依赖关系损坏的那个包。这个虽然不能解决问题,但至少可以减少影响。
软件仓库的配置文件在/etc/yum.repos.d目录下
yum repolist 查看现有软件仓库
首先下载源码包
tar -zxvf name.tar.gz 解压缩软件包
cd name 进入刚刚解压的软件包目录,查看README文件或AAAREADME文件。该文件中包含了软件安装所需要的操作
下面三条为常用的从源码安装的步骤
./configure 这个命令检查Linux系统,确保有合适的编译器可以编译源代码,另外确保有正确的库依赖关系
make 编译源码,创建可执行文件
make install 安装编译好的可执行文件到系统中
vim myprog.c 打开文件,如果文件不存在,则打开临时文件
进入vim后有两种模式:普通模式和插入模式。刚打开时vim编辑器会进入普通模式。普通模式中,vim编辑器会将案件解释成命令。在插入模式下,vim会将在当前光标位置的输入插入到缓冲区。
i 进入插入模式,若要退出插入模式回到普通模式,按下退出键(ESC)
h 左移一个字符
j 下移一行
k 上移一行
l 右移一个字符
PageDown(或Ctrl+F) 下翻一屏
PageUp(或Ctrl+B)上翻一屏
G 移动到缓冲区的最后一行
num G 移动到缓冲区中的第num行
gg 移动到缓冲区的第一行
在普通模式下输入冒号,会进入普通模式下的一个特别功能:命令行模式。在命令行模式中有如下命令:
q 如果未修改缓冲区数据,退出
q! 取消所有对缓冲区的修改并退出
w filename 将文件保存到另一个文件中
wq 将缓冲区数据保存到文件中并退出
在普通模式下,vim编辑器提供了一些命令来编辑缓冲区中的数据。
x 删除当前光标所在位置的字符
2x 删除从当前光标所在位置开始的2个字符
dd 删除当前光标所在行
5dd 删除从当前光标所在行开始的5行数据
dw 删除当前光标所在位置的单词
d$ 删除当前光标所在位置至行尾的内容
J 删除当前光标所在行行尾的换行符(拼接行)
u 撤销前一编辑命令
a 在当前光标后追加数据
A 在当前光标所在行行尾追加数据
r char 用char替换当前光标所在位置的单个字符
R text 用text覆盖当前光标所在位置的数据,直到按下esc键
删除命令默认都会把删除内容放到一个单独的寄存器中,类似于剪切。
p 取出寄存器中的数据并追加到当前光标位置
yw复制一个单词
y$复制到行尾
v 移动光标到要开始复制的位置,按下v,光标所在位置已经高亮,这时可以移动光标覆盖想要复制的区域,最后按y来激活复制命令。
/ 在普通模式下按斜线,就是查找命令,输入查找的命令后按回车。如果没有找到,会报错,如果找到了,会显示光标后第一个(如果光标后没有,则从缓冲区第一行开始搜索),如果要查看下一个,键入n或者键入/后键入回车。
:s/old/new/ 命令行模式中使用,vim编辑器会调到old第一次出现的地方,并用new替换
:s/old/new/g 将当前行的所有old替换成new
:n,ms/old/new/g 替换行号n和m之间的所有old
:%s/old/new/g 替换整个文件中的所有old
:%s/old/new/gc 替换整个文件中的所有old,但在每次出现时提示
nano编辑器窗口的地步显示了各种命令及简要描述。脱字符(^)表示Ctrl键,组合键大小写不敏感。
CTRL+C 显示光标在文本编辑缓冲区中的位置
CTRL+G 显示nano的主帮助窗口
CTRL+J 调整当前文本段落
CTRL+K 剪切文本行,并将其保存在剪切缓冲区
CTRL+O 将当前文本编辑缓冲区的内容写入文件
CTRL+R 将文件读入当前文本编辑缓冲区
CTRL+T 启动可用的拼写检查器
CTRL+U 将剪切缓冲区中的内容放入当前行
CTRL+V 翻动到文本编辑缓冲区中的下一页内容
CTRL+W 在文本编辑缓冲区中所搜单词或短语
CTRL+X 关闭当前文本编辑缓冲区,退出nano,返回shell
CTRL+Y 翻动到文本编辑缓冲区中的上一页内容
emacs编辑器使用包括控制键(PC键盘上的Ctrl键)和Meta键的按键组合。Meta一般被映射到Alt键。emacs官方文档将Ctrl键缩写为C-,而Meta键缩写为M-。