面试题目

$# 是传给脚本的参数个数
$0 是脚本本身的文件名
$1 是脚本后接的第一个参数
$2 是脚本后接的第二个参数
$@ 是传给脚本的所有参数列表,"$1" "$2" "$3" … "$n"
$* 是以一个单字符串显示传给脚本的所有参数,"$1 $2 $3 … $n"
$$ 是脚本运行的当前进程ID号
$? 是最后运行命令的结束状态码,0表示没有错误,其他表示有错误
命令:
方法一:awk '{if($0~/^$/)print NR}' file
方法二:grep -n ^$ file | awk -F: '{print $1}'
方法三:grep -n ^$ file | awk 'BEGIN{IF=":"}{print $1}'
3、打印出file 文件第1 到第3 行
方法一:sed -n '1,3p' file
方法二: cat file | head -n 3
4、在11 月份内,每天的早上6 点到12 点中,每隔2 小时执行一次/usr/bin/httpd.sh 怎么实现
0 6-12/2 * 11 * /usr/bin/httpd.sh
5、编写个shell 脚本将/usr/local/test 目录下大于100K 的文件转移到/tmp 目录下

#!/bin/bash
for file in `ls /root`
do
  if [ -f $file ]; then
    if [ `ls -l $file|awk '{print $5}'` -gt 10000 ]; then
      mv $file /tmp/
    fi
  fi
done

6、如何查看占用端口8080 的进程
lsof -i:8080
7、词频统计(LeetCode)
方法一:cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | awk '{print $2,$1}'
方法二:tr -s ' ' '\n' < words.txt | sort | uniq -c | sort -nr | awk '{print $2,$1}'
方法三:awk '{for(i=1;i<=NF;i++){dict[$i]++;}}END{for(i in dict){print i,dict[i]}}' words.txt | sort -nr -k 2
方法四:cat words.txt | tr -s ' ' '\n' | awk '{nums[$1]++}END{for(word in nums) {print word, nums[word]}}' | sort -rn -k2
8、合法的电话号码(LeetCode)
cat file.txt |grep -e "^[0-9]\\{3\\}-[0-9]\\{3\\}-[0-9]\\{4\\}$" -e "^([0-9]\\{3\\}) [0-9]\\{3\\}-[0-9]\\{4\\}$"
9、if file.txt has the following content:
name age
alice 21
ryan 30
Output the following:
name alice ryan
age 21 30 (LeetCode)
 
awk '
{
  for (i = 1; i <= NF; i++) {
    if(NR == 1) {
      s[i] = $i;
    } else {
      s[i] = s[i] " " $i;
    }
  }
}
END {
  for (i = 1; s[i] != ""; i++) {
    print s[i];
  }
}' file.txt
10、打印文件的第十行(LeetCode)
方法一:sed -n '10p;11q' file.txt
方法二:awk 'NR==10' file.txt
方法三:sed -n 10p file.txt
方法四:
cnt=0
while read line && [ $cnt -le 10 ];
do
  let 'cnt = cnt + 1'
  if [ $cnt -eq 10 ]; then
    echo $line
    exit 0
  fi
done < file.txt
方法五:awk 'FNR==10 {print} ' file.txt
11、sed命令
12、awk命令
13、sort命令
14、grep命令
15、硬链接和软连接的区别:
文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
在 Linux 系统中查看 inode 号可使用命令 stat 或 ls -i(若是 AIX 系统,则使用命令 istat)。
Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。硬链接可由命令 link 或 ln 创建。
硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
(1)文件有相同的 inode 及 data block;
(2)只能对已存在的文件进行创建;
(3)不能交叉文件系统进行硬链接的创建;
(4)不能对目录进行创建,只可对文件创建;
(5)删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:
(1)软链接有自己的文件属性及权限等;
(2)可对不存在的文件或目录创建软链接;
(3)软链接可交叉文件系统;
(4)软链接可对文件或目录创建;
(5)创建软链接时,链接计数 i_nlink 不会增加;
(6)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

16、find命令
17、netstat命令
18、ps命令,top命令
19、ifconfig命令
20、kill命令
21、ulimit命令
22、tr命令
23、cut命令
24、rev命令
25、paste命令
26、cat命令
27、tail命令
28、uniq命令
29、uptime命令
 
 

 

posted on 2018-12-31 20:59  lina2014  阅读(129)  评论(0编辑  收藏  举报

导航