Linux 面试常用总结
文件显示
1. cat:可以显示文件的内容(经常和more搭配使用),或将多个文件合并成一个文件。
cat /etc/hosts | more
2. head/tail -n 10
cat /etc/hosts | head -n 10 或 head -n 10 /etc/hosts
3. grep -v反选/支持数据重定向输入/支持正则表达式
cat /etc/hosts | grep -n 'require' 显示包含require的行
cat /etc/hosts | grep -v 'require' 显示不包含require的行
cat /etc/hosts | grep '[^]'
4. 其他相关
grep
cut -c 以字符方式 -d -f以指定分割符分割并取域
例: cut file -d '|' -f 3 则是以|分割不同域并取第3域
例: cut file -c 1-10 则是以字符文件取1-10个字符
head -n 10 file 显示前十行
tail -n 10 file 显示后十行
wc -l 统计行数
diff 找出两个文件不同之处
file 显示文件类型
find 路径 类型 字符
例如 find / -name 'bbb' 从根目录找到名称包含bbb的文件
find . -name 'bbb' 在当前目录找
mkdir 建立目录
mkdir -P /aa/bb/cc 加参数P可级联添加
more 分屏显示
ln 创建软链接即快捷方式
如ln -s /ora/oradata/ /oracle/Desktop/oradata
mkswap 创建一个linux的交换分区
rmkdir 删除空目录
磁盘命令
du -h以K,M,G格式显示 | -a显示全部文件每个文件所占磁盘空间 | s只显示档案大小的总合
例如:
du -h /etc 显示/etc下各文件的大小并转为k/m/g格式
du -sh /etc 统计显示/etc下所有文件的大小总和
su -h /etc | sort -nr | more 显示各文件大小并以数字反向排序
dd 用指定大小的块复制一个文件并同时进行转移
if 输入(源)
of 输出(目标)
bs 一次读防的块
count读取数量
例:创建一个文件磁盘并像文件系统那样管理
dd if=/dev/zero of=test.disk bs=1M count=100 创建一个100M的磁盘文件
mkfs -t ext3 test.disk 格式化并对其创建ext3格式文件系统
mount tesk.disk /mnt/testfile 挂载
例:将/ets/passwd备份给/tmp/passwd.bk
dd if=/etc/passwd of=/tmp/passwd.bk
例:将整个分区备份
dd if=/dev/sda1 of=/tmp/dev/sda1.bk
df 可显示磁盘的文件系统与挂载情况,常用就是df -lh
fdisk 磁盘分区与查看
mkfs -t 以指定文件系统格式化,如mkfs -t ext3 /dev/sda1
mount/nmount 挂载/取消挂载
取消挂载显示device busy时可用fuser 要取消挂载的目录 查看到占用的进程id,kill掉再取消挂载即可
例:
umount /dev/sda1
显示:device is busy
再执行 fuser /dev/sda1会显示占用的进程id
再执行 kill 进程id后再umount /dev/sda1即可
正则表达式
行首(^) 在[]内表反选,在[]外表行首
grep '^the' 以the开头的行
grep '^[a-z]' 以小写字母开头的行
grep '^[0-9]' 以数字开头的行
[]查找集合字符
grep '^[abc]' 以a或b或c开头的行
常用参数
^word,如匹配#开头的行并统计行数 grep -n '^#' /etc/hosts | wc -l
word$
\ 转义,匹配\enter\的字符,因为\是特殊符号,所以要转义如匹配\: grep -n '\\',匹配单引号: grep -n '\'' /etc/hosts
[list]表示匹配l或i或s或t
[n1-n2]表示匹配n1-n2的连续字符,如[0-9],[a-z],[A-Z]等
[^list]表示匹配不包含字符list的行
*表示匹配零个到无穷多个的前一个字符,如[ess*],则es,ess,esssss都匹配
.表示任意一个字符,如grep -n [a...b],像axxxb就匹配,总之a与b之间的有三个字符的都匹配
$表示行尾
.*可表示任何字符,如^.*addr则表示任何包含addr的行
sed命令
范围 + 命令
d删除
p打印
范围是行号: '1d'删除行单、'1,5d'删除1至5行,'5,$d'删除5至最后,将d换成p即成打印显示
范围是字符(可用正则匹配),则需要用/字符/命令,如显示#开头的行sed -n '/^#/p' /etc/hosts
s替换 s/old/new/g 将old换成new,g表示全局范围,如替换也要有范围可在s前加,如只替换1-5行,则1,5s/old/new/g
查找并替换为空,相当于将匹配到的删除,则是s/old//g即可
xargs命令
这个命令非常好用,特别是跟其他命令合用时,以前我一直想有这个功能都找不到,直到碰到xargs的用法,就马上感觉到是我那时想要的功能
功能就是把数据作为下个命令的参数
参数:
-t 打印执行过程
-i 把{}替换为项目名称
例如:
ls | grep 'txt$' | xargs -i mv {} {}.bk
1、ls执行
2、ls结果传递给grep过滤出txt结尾的文件
3、将文件名一条条传递给mv,并指定-i参数表示把文件名替换掉{},这里的{]相当于文件名的占位符
例如aa.txt中有个字符串,刚好该字符串是bb.txt的文件名,可以用如下语句显示bb.txt的内容
cat aa.txt | xargs -t cat,如有多个文件名,可用 | xargs -i -t cat {}的方式依次显示各文件内容
crontab
用户级: crontab -e 存在于/var/spool/cron
系统级: 编辑 /etc/crontab文件
Linux会自动每分钟读取一次/var/spool/cron与/etc/crontabl文件,看是否有满足条件的例常计划要执行
* * * * * root 命令串
分 时 天 月 周 执行者身份 此命令串可指单条命令,也可通过run-parts并设一个目录,则执行该目录的下的所有可执行文件
*代表无限制,任何时刻都接受
/n n代表数字,表示多少数字的周期执行,如在 */5 * * * * * 由于/5是在分上表示每五分钟执行,如果*/5是时上,则就是每5小时执行一次,其他类推
例如每天晚上23:23分执行文件进行备份
23 23 * * * /bin/bash /ora/orabin/dbrman.sh
Shell脚本小结
#!/bin/bash
#从1循环累加到100
declare -i sum=0
for((i=0;i<=100;i++))
{
let sum=$sum+$i
}
echo $sum
#输出$*:全部参数值
echo "parms:$*"
#输出$#:全部参数个数
echo "count:$#"
#从左至右,将参数值轮减,如本来参数是三个为1 2 3,shift一次,变为2 3,再shift变为3,依次类推
shift
echo "parms:$*"
echo "parms:$#"
#循环全部参数并存入数组
declare -i cnt=0
for p in $*;do
#echo $p
let cnt=$cnt+1
arr[$cnt]=$p
done
#获取数组下标
echo ${#arr[*]}
#获取全部参数(组成一个字符串)
echo ${arr[@]}
#读取指定数组值
echo ${arr[数组项]},如读取第二个元素值: ${arr[2]}
#清空整个数组
arr= 或 unset arr
#清空单个数组值:arr[n]=
#循环数组并显示值
declare -i length=${#arr[*]}
declare -i loop=0
while [ $loop -le $length ]
do
char=${arr[$loop]}
echo $char
case $char in
a) echo "aa";;
#b或c都可,与 d | f效果一样,都为或的意思
[bc]) echo "bb or cc";;
d | f) echo "dd or ff";;
*) echo "other";;
esac
let loop=$loop+1
done
echo ${#arr[2]}