【linux面试题】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

`入行测试有几年,但是都是混日子,前段时间下定决心跳出舒适圈。却发现自己摸鱼太久了已经被大家远远甩开了。怎么办?正视自己,找到不足,努力学习喽!先复习以下Linux命令由于以往工作有专业运维,这些只是用到部分,好多都想不起来,不熟练。
整理面试题喽


一、Linux常用命令

1、列出你所知道的现实文本内容的命令
cat (如何显示行号)
使用cat看长文件,尤其是配置文件,没有行号很不方便。
使用cat命令时,添加参数-n,可以在查看时显示行号。
more
more是一个基于VI编辑起的文本过滤器,会以全屏幕的方式按页显示文本文件的内容
less
less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是更具显示需要加载内容,对于现实大型文件具有较高的效率。
head(如何查看前5行)
head -n 用于显示行数
2、查看隐藏文件/目录
ls -a
3、文件的权限修改
在Linux中可以利用chmod命令来修改文件权限
Linux的文件调用权限分为三级:文件所有制(Owner)、用户组(Group)、其他用户(OtherUsers)。
在这里插入图片描述
只有文件所有者和超级用户可以修改文件或目录的权限可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
chmod命令使用数字修改文件权限
Linux系统中,文件的基本权限由9个字符组成,以rwxr-r-x为例,我们可以使用数字来代表各个权限,各个权限与数字的对应关系如下:
r----》4
w----》2
x----》1
由于这9个字符分数3类用户,因此每个用户身份包含3个权限(r、w、x),通过将3个权限对应的数字累加,最终得到的值即可作为每个用户所具有的权限。
拿rwxrw-r-x来说,所有者、所属组和其他人分别对应权限值为:
所有者=rwx=4+2+1=7
所属组=rw-=4+2=6
其他人=r-x=4+1=5
所以,此权限对应的权限值就是765.
使用数字修改文件权限的chmod命令基本格式为:
#chmod [-R] 权限值 文件名
-R 选线表示连同目录中的所有文件,也都修改设定的权限。
chmod命令使用字母修改文件权限
既然文件的基本权限就是3中用户身份(所有者、所属组和其他人)搭配3中权限(rwx),chmod命令中用u、g、o分别代表3中身份,还用a表示圈闭的身份。另外,chmod命令仍使用r、w、x分别表示读、写、执行权限。
chmod u/g/o/a +(加入)/-(删除)/=(设定) r/w/x 文件或目录名
例如:如果一个文件属于root的,要给root加上可执行权限 chmod u+x 文件名

4、同时修改文件所有者和所属用户组
修改所属用户的语法:chown [-R] 所有者 文件或目录
修改所属组别的语法:chown [-R] :所属组 文件或目录
如何递归修改一个目录及下面所有的文件和文件夹的所属用户和所属组
添加 -R

5、查询passwd文件中包含root的行(不区分大小写),并同时输出行号
grep -ni root passed

6、创建目录,结构层次为 a/b/c(其中a、b、c目录都不存在)
mkdir -p a/b/c

7、如何修改安装jdk所需要配置的环境变量(考察VI)
vi /etc/profile
按G跳转到文件末尾
按o新增一行
增加环境变量信息
按esc退出命令模式
输入冒号wq存盘退出

如果发现其中的3个单词HOME写成了HMOE,如何修改?
可以按:%s/HMOE/HOME/g

8、Linux系统只见互传文件
从当前主机拷贝文件到远端主机
scp 本地文件 用户名@IP:目标位置
从远端主机拷贝文件到当前主机
scp 用户名@IP:要拷贝的文件 存放的本地位置

9、查看是否安装某软件
rpm -qa|grep 软件名
如果没有安装,如何安装一个rpm包,安装后如何卸载?
rpm -ivh 包名
rpm -e 软件名

10、把/root下的123.TXT文件复制到/home下,并改名为124.TXT
cp /root/123.txt /home/124.txt

11、linux上怎么根据文件名查找文件
locate filename
例如搜索etc目录下,所有以m开头的文件
locate /etc/m

find 路径 -name 文件名

12、linux上怎么根据 文件内容查找一个文件
在linux下从abc目录开始查找所有扩展名为.log的文本文件,并找出内容包含ERROR的文件。
查找命令:find /abc -name “*.log”|xarge grep “ERROR”

13、关于tar命令
如何解一个tar包?tar -xvf
如何解压一个tar.gz包?tar -zxvf
如何创建一个tar包?tar -cvf
如何创建一个tar.gz包?tar -czvf
如何显示一个tar包中的内容? tar -tvf

14、查看和修改IP地址
ifconfig
修改举例:
1)、ifconfig eth0 172.20.1.128 netmask 255.255.255.0
2)、修改文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0

15、如何重启网络
service network restart

/etc/init.d/network restart

16、linux怎么查看端口是否在监听
netstat -anpl|grep 端口号
lsof -i:端口号

17、Linux上怎么查看磁盘空间
df

18、linux上怎么根据指定的主机或端口抓包
tcpdump host 210.27.48.1 or port 22

19、linux怎么开FTP服务,怎么开telnet服务
配置好Telnet服务器后
启动TELNETFUQU #service xinetd start
配置好ftp服务器后
启动ftp服务进程
./etc/init.d/vsftpd start

20、重启进程test_app
先 ps -ef|grep test_app 得到进程的pid
kill -9 pid

21、添加一个用户china,指定其家目录(属主目录)为/opt/china
useradd -d /opt/china/ china

将这个用户连同家目录 一起删除
userdel -r china

22、linux下会配置搭建环境
linux+tomcat+mysql+jdk
详细描述:
先准备 1)、linux系统
2)、JDK
3)、Tomcat
4)、Mysql
自己在家练习可以使用虚拟机,当然也可以购买云服务器
1、下载安装JDK
使用Xshell命令安装到Linux系统
1)、首先用命令进入到/usr/local目录下,执行命令mkdir tools,创建tools目录
mkdir tools
2)、将本地jdk安装包,注意是以tar.gz结尾的,执行命令rz(没有rz的先安装 命令:yum -y install lrzsz)
上传完成后,执行tar -xzvf jdk-8u221-linux-x64.tar.gz命令即可自动解压,解压完会有JDK1.8_221目录
3)、安装好JDK后需要配置环境变量
进入到/etc目录,执行命令vim profile,进入编辑模式
在文本末尾添加以下配置项:
JAVA_HOME=/usr/local/tools/jdk1.8.0_221
CLASSPATH=: C L A S S P A T H : :CLASSPATH::CLASSPATH:JAVA_HOME/lib/
PATH=P A T H : PATH:PATH:JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
注意JAVA_HOME的路径是你实际安装在Linux里面目录
编辑完后,按ESC退出编辑模式,输出wq,保存退出
退出之后重启配置项,输入命令source /etc/profile
这个时候可以查看JDK版本,输入Java -version
到此JDK安装结束
2、下载安装Tomcat
首先进入到/usr/local/tools目录,创建新目录,输入命令mkdir tomcat
进入到tomcat目录,cd /usr/local/tools/tomcat
上传tomcat安装包,同样输入命令rz,选择安装包,点击确定
然后解压安装包,输入tar -xzvf apache-tomcat-9.0.24.tar.gz,开始解压
解压完成后,需要重启tomcat,进入到解压后目录下的bin目录,命令cd /usr/locat/tools/tomcat/apache-tomcat-9.0.24/bin
然后输入命令 / startup.sh重启服务
重启失败时查看是否权限问题:chmod +x *.sh 来给用户添加执行权限

重启结束后,可以在本地浏览器输入http://ip:8080/,观察是否跳转到tomcat主页,如果有说明成功
#如果网页打不开或者无响应,可能是端口8080没有开放,需要去开放端口
输入命令:firewall-cmd–zone=public --add-port=8080/tcp --permanent
重启防火墙 firewall-cmd–reload
到此,输入命令firewall-cmd–zone=public --list-ports查看端口是否开放,显示8080便是成功,这个样tomcat安装结束。
3、mysql安装
1)、下载yum源
wget ‘https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm’
2)、安装yum源
rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
3)、查看有哪些版本的mysql
yum repolist all grep mysql
4)、安装
yum install -y mysql -community -server
5)、启动mysql,要知道在centos7中,没有了service命令,都是使用sysemctl命令。注意启动的时候是start mysqld而不是mysql。
而在centos6中,使用service mysql start
systemctl start mysql
查看状态
systemctl status mysqld
6)、登录数据库,修改数据库密码
mysql5.7的新特性之一就是在初始化的时候会生成一个自定义的密码,然后你需要找到这个密码,登录的时候输入。注意,输入密码的时候是不显示。
找到密码,红框的地方就是密码
grep ‘temporary password’ /car/log/mysql.log
在这里插入图片描述
登录数据库:这里-p之后不用输入密码,回车后在输入。改过密码之后登录则是直接在-p后加密码了。
mysql -uroot -p

输入日志打印的密码登录到mysql
mysql -u root -p
enter password :键入密码

修改密码
alter user ‘root’@’localhost‘ IDENTIFIED BY ’root123‘;

如果密码设置太简单出现以下的提示
在这里插入图片描述
这里可以修改两个全局参数:
首先,修改vali date_password_policy 参数的值
set global validate_password_policy=0;
在修改密码的长度
set
global validate_password_length=1;
再次执行修改密码就可以了
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘root123’;

测试修改后的密码,退出mysql,输入命令root -u root -proot123,看能否登录
授权其他机器登录
GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

FLUSH PRIVILEGES;
至此,mysql安装完毕
可以在本地用Navicat连接数据库

如果连接不上,查看3306端口是否开放,进入/etc/sysconfig
安装iptables,输入命令yum install iptables-services
修改该目录下的iptables,在标注的哪一行下面添加一样的语句,22改成3306
在这里插入图片描述
查看状态防火墙开放的端口
service iptables status
C然后重启,输入service iptables restart,这样就可以连接数据库

4、安装项目包
将IDEA或者eclipse的项目打成war包,解压到tomcat目录下的webapp即可

二、shell##

1、什么shell
一个shell脚本是一个文本文件(就像是.py ,.java文件一样),包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(shell脚本)来完成这些日常任务。(就像我们每次用git的时候把code推上去都要搞一大堆命令一个接一个的输入)
2、什么是默认登陆shell?如何改变指定用户的登录shell?
在linux操作系统,** “/bin/bash”是默认登录shell,**是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示
在这里插入图片描述
3、可以在shell脚本中使用那些类型的变量?
因为shell脚本就跟python脚本一样,所以我们可以 用系统定义变量(关键字)以及用户自定义变量。系统变量是由系统自己创建的,这些变量通常由大写字母组成,可以通过“set”命令查看。用户变量由系统用户来生成和定义,变量的值可以通过“echo $<变量名>”查看。

4、如何将标准输出和错误输出同时重定向到同一位置?
这里有两个方法来实现:
方法一:
2>&1
方法二:
&>
Linux给程序提供三种 I/O 设备:

1、标准输入(STDIN) -0 默认接受来自终端窗口的输入

2、标准输出(STDOUT)-1 默认输出到终端窗口

3、标准错误(STDERR) -2 默认输出到终端窗口

支持的操作符号包括:

1> 或 > :把STDOUT重定向到文件
2> :把STDERR重定向到文件
&> :把标准输出和错误都重定向

& :和上面功能一样,建议使用上面方式

将标准输出和错误都重定向到同一个文件,实现的方式有两种:

1、&> file

2、 > file 2>&1

注:上面第2种方法中,一定要注意顺序,2>&1 要放在命令的最后,其本质是先将标准输出重定向至文件,再将错误重定向至标准输出,从而实现标准输出和错误的整体重定向。

5、shell脚本中如何写if判断
if 开头,fi 结尾
[ 条件判断 ] 就是使用 test 命令判断,两端必须有空格
if 如果 和 then 在一行,需要加 ;
单分支
if [ 条件判断式 ];then
命令
fi

或者

if [ 条件判断式 ]
then
命令
fi

`双分支
if [ 条件判断式 ]
then
命令
else
命令
fi
多分支
if [ 条件判断式1 ]
then
命令
elif [ 条件判断式2 ]
then
命令

else
命令
fi

6、shell基础语法:如何比较两个数字?
在if-then中使用测试命令(-gt等)来比较两个数字
#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is grealer than y”
else
echo “y is grealer than x”
fi

7、shell基础语法:break是干啥的?
break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。

8、shell基础语法:continue是干啥的?
continue命令不同于break命令,它只是跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。

9、shell基础语法:case是干啥的?
case 变量 in
条件 1)
执行代码块1
;;
条件 2)
执行代码块2
;;
条件 3)
执行代码块3
;;
*)
无匹配后命令序列
esac

10、shell基础语法:while是怎么用?
while [条件]
do
操作
done
在这里插入图片描述
11、如何执行脚本
chmod a+x myscript.sh

12、“#!/bin/bash”是干啥的?
#!/bin/bash是shell脚本的第一行,称为释伴行。这里#符号叫做hash,而!叫做bang。他的意思是命令通过/bin/bash来执行。

13、shell基础语法:for是怎么用?
for 变量 in 循环列表
do
命令1
命令2

最后命令
done

14、如何调试shell脚本?
使用 ’ -x‘参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用’-nv‘ 参数( sh -nv myscript.sh)。

15、Bourne shell(bash)中有那些特殊的变量?
内建变量
$0 命令行中的脚本名字
$1 第一个命令行参数
$2 第二个命令行参数
$// 命令行参数的数量
$* 所有命令行参数,以空格隔开
$? 是执行返回值,如果是成功就是0,不成功是非0数值

16、如何在脚本中比较字符串?
test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。

17、在shell脚本中,如何测试文件?
test命令可以用来测试文件。
TEST 用法
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true

18、如何让shell就脚本得到来自终端的输入?
read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。

在这里插入图片描述
19、如何取消变量或取消变量赋值?
unset <变量名>

20、算数运算的语法
1、使用expr命令
expr 5+2
2、用一个美元符号和方括号( [ 表 达 式 ] ) t e s t = [ 表达式 ]) test= []test=[ 16 + 4 ];

21、 do while语法
do
{
命令
}while (条件)

22、基础语法:定义函数
function name(){
statement
[return value]
}
1)、定义时可以不写function
name (){
statement
[return value]
}
2)、如果写function关键字,也可以省略函数名的小括号
function name{
statement
[return value]
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值