experiment
实验指导 1 - 命令行操作基础
学习目标
- 熟悉 bash 的 通配符、命令补全、命令历史、命令别名 的使用
- 掌握 ln
,
file` 等文件操作命令- 掌握输出、输入重定向
- 掌握
cat
,more
,less
,head
,tail
等文本文件显示命令
提示: 请以普通用户student登录完成下面的操作
任务1*:命令别名
1.显示当前可用的所有别名
l.
ll
which ll
alias
2.使用 ls 命令而非 ls 别名
ls
\ls
3.设置别名 ren
alias ren=mv
cd /etc
cd..
alias cd..='cd ..'
3.设置别名 cd.. ,等号右侧若包含空格应使用引号括起
cd..
cd
unalias cd..
4.取消别名 cd..
cd..
任务2: 特殊文件名
1.命令操作对象包含空格,可使用单引号括起来
cd
mkdir My Document
ll
rmdir My Document
mkdir 'My Document'
2.使用转义符\ 将空格还原为空格字符本意而非Shell命令行中的命令参数间隔符
ll
rmdir 'My Document'
mkdir My\ Document
ll -d My\ Document
touch un gars, une fille
ll
rm un gars, une fille
touch 'un gars, une fille'
ll
mkdir TVseries
mv 'un gars, une fille' TVseries
3.& 在 Shell 中有特殊含义,表示后台执行
$ 在 Shell 中有特殊含义,表示引用变量的值
* 在 Shell 中有特殊含义,表示通配任意个任意字符
touch 'a&b' b\&a
touch 'a$b' b\$a
touch 'a*b' b\*a
ls
4. 以-开头的文件应使用路径前缀(绝对路径、相对路径均可)
touch ./-abc
5.以-开头的目录应使用路径前缀(绝对路径、相对路径均可)
mkdir ~/-ABC
ls
任务3: 文件通配符
fruits="coconut cherry grape fig lemon pear plum peach papaya cranberry blueberry"
touch $fruits
touch apple banana orange raspberry
touch apple1 banana2 orange3 raspberry4
touch $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM
mkdir apple$RANDOM banana$RANDOM orange$RANDOM raspberry$RANDOM
touch applePI bananaPI orangePI raspberryPI
touch a${RANDOM}x b${RANDOM}y c${RANDOM}x d${RANDOM}x e${RANDOM}z
ls
ls * # 列出所有文件或目录,不包含隐含文件(即以.开头的文件)
ls .* # 列出所有隐含文件或目录
ls *berry # 列出所有以berry结尾的文件
ls ????? # 列出名字为5个字符的文件或目录
ls ?p* # 列出名字中第二个字符为p的文件或目录
ls ??p*[0-9] # 列出名字中第三个字符为p且最后一个字符为数字的文件或目录
ls [abc]* # 列出名字以a或b或c开头的文件或目录
ls [!abc]* # 列出名字不以a或b或c开头的文件或目录
ls *PI # 列出名字以PI结尾的文件或目录
ls *e* # 列出名字中包含e的文件或目录
ls *[123] # 列出名字以1或2或3结尾的文件或目录
ls *[0-9]* # 列出名字中包含数字的文件或目录
ls [a-z]*[xyz] # 列出名字以小写字母开头且以x或y或z结尾的文件或目录
ls *[!0-9] # 列出名字不以数字结尾的文件或目录
ls [a-z0-9]*[!0-9] # 列出名字以小写字母和数字开头且不以数字结尾的文件或目录
mv *[0-9] files
cp [A-Za-z0-9]*[a-z] files
rm *[0-9]*
rm $fruits
rm -rf *\$* *\&* *\** ./-*
任务4:文件类型
注意输出各行的第一个字符
ll -d /bin /var /etc/passwd /usr/bin/passwd /bin/zcat
ll /dev/sda{,1} /dev/{console,tty0,ttyS0,null,zero,urandom}
file /bin /var /etc/passwd /usr/bin/passwd /bin/zcat
file /dev/sda{,1} /dev/{console,tty0,ttyS0,null,zero,urandom}
file *
任务5: 链接文件
1.创建名为 bonjour 的硬链接
touch hello
ll hello
ln hello bonjour
2.注意输出第二列(以空格为间隔)数字的变化
ll hello bonjour
3.创建名为 ciao 的硬链接
ln bonjour ciao
4. 注意输出第二列(以空格为间隔)数字的变化
ll hello bonjour ciao
5.注意输出第二列(以空格为间隔)数字的变化
rm hello
ll hello bonjour ciao
rm bonjour
6.注意输出第二列(以空格为间隔)数字的变化
ll hello bonjour ciao
rm ciao
ll hello bonjour ciao
7.创建名为 salut 的符号链接
touch hi
ln -s hi salut
8.创建名为 ciao 的符号链接
ln -s hi ciao
9.注意输出中第一个文件类型字符
ll hi salut ciao
10.删除符号 salut 链接文件
rm salut
ll hi salut ciao
11.删除被符号链接的文件 hi
rm hi
12.符号链接文件 ciao 将成为死链
ll hi salut ciao
13.对目录创建符号链接
ll -d doc
mv doc mydoc
ln -s /usr/share/doc doc
cd doc
ll
cd
任务6:输出重定向
## 覆盖式
1.标准输出重定向
ls -Rl /etc > /tmp/saved-output
less /tmp/saved-output
2.标准错误输出重定向
ls -Rl /etc 2> /tmp/saved-outerr
cat /tmp/saved-outerr
3.多个命令放在一行上顺序执行用;间隔
ls -Rl /etc > /tmp/saved-output 2> /dev/null ; less /tmp/saved-output
4.标准输出和错误输出同时重定向
ls -Rl /etc &> /tmp/saved-outputanderr ; less /tmp/saved-outputanderr
## 追加式
echo "****************" >> /tmp/saved-output
ll >> /tmp/saved-output
echo "****************" >> /tmp/saved-outerr
ls -Rl /etc 2>> /tmp/saved-outerr ; cat /tmp/saved-outerr
echo "****************" >> /tmp/saved-outputanderr
ls -Rl /etc &>> /tmp/saved-outputanderr
ls -Rl /etc >> /tmp/saved-outputanderr 2>&1
任务7:输入重定向
1.将文件内容输出到屏幕
cat < /etc/passwd
2.在/tmp/mymail里输入该内容
echo "This system's name is $(hostname)." > /tmp/mymail
echo "I am `whoami`" >> /tmp/mymail
3.在 /tmp/mymail 尾部加添空行
echo >> /tmp/mymail
ll >> /tmp/mymail
4.发送指定的主题邮件
mail -s test $USER < /tmp/mymail
5.以系统随机字符设备作为tr命令的输入,生成一个32位的随机口令
tr -dc [:print:] < /dev/urandom | head -c 32
6.将 END 之间的内容作为 cat 命令的输入
cat <<END
aimer
love
END
<Ctrl+D>
7.将 _END 之间的内容作为 cat 命令的输入,并以追加方式输出重定向到文件
su -
cat >> /etc/hosts <<_END
192.168.0.77 web1
192.168.0.88 db1
192.168.0.99 win1
_END
exit
8.变量值做输入重定向
line=$(ls)
cat <<< $line
任务8: 文本显示
1.滚屏显示文本
cat /etc/passwd
2.滚屏显示文本并显示行号,等同于 cat -n /etc/passwd
nl /etc/passwd
3.纵向反转文本并显示
tac /etc/passwd
4.横向反转文本并显示
rev /etc/passwd
5.分屏显示文本(不可回翻)【回车向下滚动一行,空格向下滚动一屏】
more /etc/passwd
6.分屏显示文本(可回翻)【回车向下滚动一行,空格向下滚动一屏】
less /etc/passwd
7.显示前10行
head /etc/passwd
8.显示前5行,可简写为 head -5 /etc/passwd
head -n 5 /etc/passwd
9.显示前5个字符
head -c 5 /etc/passwd
10.显示最后10行
tail /etc/passwd
11.显示最后5行,可简写为 tail -5 /etc/passwd
tail -n 5 /etc/passwd
12.显示从第5行到文件尾
tail -n +5 /etc/passwd
13.显示最后5个字符
tail -c 5 /etc/passwd
习题:
1.写出下列命令含义
./run.sh <cc.txt 1>aa.txt 2>>bb.txt
head –n 5 a.txt |grep student
cat /etc/passwd |more
2.根据要求写出命令
运行当前目录下的a.sh,使用in.txt文件作为标准输入,将标准输出输出到out.txt并覆盖原文件内容,标准错误输出输出到err.txt并保留原文件内容。
3.more和less命令有何区别