文章目录
- 基本知识点
- 基本操作
- 叙述什么是shell?
- 重启虚拟机网络
- 分区
- 查看当前进程
- 查看主机名
- 重启
- 关机
- 查看IP地址
- 文件搜索
- 挂载
- 查看网络配置
- linux系统中Vi的三种模式
- 磁盘分区
- 查看硬盘信息
- df,fdisk,lsblk区别
- 进程
- 用户
- 用户信息
- 查看用户密码信息
- 修改密码
- 添加用户
- 修改用户帐号
- 组
- 添加组
- 删除组
- 修改组
- 修改用户的工作组
- 指定要管理的工作组
- 目录和文件操作
- 文件
- 目录文件
- 显示目录下的内容
- 读写权限
- 修改目录的拥有者
- 修改文件的权限
- rwx权限详解
- chmod改变权限
- 创建文件夹
- 创建文件
- 编辑文件
- 复制文件和目录
- 删除文件或目录
- 删除一个或多个空目录
- 移动文件
- 查看文件夹和文件的内存占用情况
- 操行符
- 压缩命令
- 项目部署常用命令
- 查看进程号
- 后台运行jar包
- 查看nginx的安装目录
- 填空题
- 简答题
- 1) 公司新来了一名员工,对员工进行以下操作
- 2) 如果一个文件的权限是-r-w-r-$,解释清楚-r-w-r- $的每个字符的含义
- 3) 描述逻辑分区是什么?它是怎么来的?如果让你分区,你如何操作?
- 4) shell脚本的定时性操作
- 5) 写出提高linux系统安全性的方法 (答案有十二个,只要求写十个)
- 6) 一个if判断题,写一个shell脚本
- 7) 什么是进程?进程资源由哪两部分组成?
- 8) pid_t fork() 返回值的意义?
- 9) Linux环境中使用kill函数向进程或进程组发送信号
- 10) 共享主存和修改消息队列状态
- 11) 父进程调用wait() 可能出现的三种情况?
- 12) 在进程中,return和exit() 的区别?
- 13)什么是孤儿进程?谁负责回收孤儿进程的内核空间资源?
- 14) 僵尸进程是什么?如何消灭僵尸进程?
- 15) 简述进程对可靠信号和不可靠信号的处理过程
- 16) 简单介绍一下信号的定义及其分类
- 17) 简单介绍一下匿名管道及其特点
- 18) 请解释一下有名管道和匿名管道的区别?
- 19) 什么是线程?进程和线程的区别?
- 20) Please describe the difference of signal() and sigaction() in brief
- 21)在标准IO库中,rewind函数作用?
- 22)C语言中没有明确给定初值的全局变量和静态变量存放在哪儿?
- 23)函数geteuid()用于得到进程的?
- 24)逻辑卷的创建
基本知识点
基本操作
叙述什么是shell?
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。是一个命令解释器,它可以用来启动、挂起、停止、甚至编写程序。重启虚拟机网络
sudo service networking restart
分区
主分区,逻辑分区,扩展分区
查看当前进程
ps -aux
查看主机名
hostname
重启
shutdown -r now
reboot
init 6
ctrlaltdel //强制或安全重新启动服务器
关机
shutdown -h now
init 0
halt
poweroff
查看IP地址
#查看外网IP:
curl ipinfo.io/ip
#查看本机IP:
ip addr
或
ifconfig
文件搜索
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
挂载
挂载:linux系统中,若用户需对某个硬盘设备或文件进行访问,要将其挂载到一个目录上。
挂载点命令
mount 进行添加挂载点
mount 镜像文件位置|光盘文件|硬盘文件 挂载的位置
挂载镜像文件 mount centos-7....iso /media
挂载光盘 mount /dev/cdrom /media
卸载挂载点
umount 文件位置
umount /media
查看网络配置
查看网络接口信息 ifconfig
测试网络连接状态 ping
查看网关地址和路由信息 route netsat
查看主机名称信息 hostname nslookup
linux系统中Vi的三种模式
1.命令模式
2.文件编辑模式
3.底行模式
磁盘分区
fdisk -l 查看硬盘名称
物理分区:储存空间最小的储存单元卷组:一个或多个物理卷可整合一个卷组
逻辑卷:一个卷组可以划分出一个或多个逻辑卷,用于建立文件系统 Fstab文件用于管理文件系统信息
查看硬盘信息
# 安装插件
yum install smartmontools# 查看 /dev/ 下 sda 盘的信息:smartctl --all /dev/sda
df,fdisk,lsblk区别
df:主要是检查文件系统磁盘内存占用情况
fdisk:一般用来磁盘分区,也可以用来查看磁盘分区情况
lsblk命令用于列出所有可用块设备的信息,同时能显示它们之间的依赖关系。
进程
系统进程
用户进程
守护进程
1.Ps 显示进程的信息
2.Shell脚本
3.基本结构:顺序,选择,循环
4. !/b in/bash //声明
5. //注释LInux中 0表示正确
rm-rf 7 删除名字$ // 在bash里$符号表示当前用户为普通用户;在bash脚本里。$开头表示变量
$# 表示参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 表示所有参数,并且所有参数都是独立的
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误gt >
lt <
ge >=
le <=
Eq =
ne !=
#cat test7-8
#! /bin/bash
If test-f “$1”
Then echo “$1 is an ordinary file”;
Else echo “$1 is not ordinary file”;
fi
用户
超级用户
系统用户
普通用户
用户信息
passwd
-d 用户名 删除用户的密码。则该用户无需密码即可登录系统
-S 用户名 显示指定用户账号的状态
-u 用户名 解除指定用户账号
-l 用户名 暂时锁定指定的用户账号
Usedel [-r] 用户名 删除指定的用户账号
Su [-] [用户名] 切换用户身份
Id [用户名] 查看用户的UID和GID
查看用户密码信息
cat /etc/shadow
修改密码
passwd 用户名
添加用户
useradd(仅限超级管理用户) -c 指定用户的全称
修改用户帐号
usermod可用来修改用户帐号的各项设定
语法
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
参数说明:
-c<备注> 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s<shell> 修改用户登入后所使用的shell。
-u<uid> 修改用户ID。
-U 解除密码锁定。
实例
更改登录目录
usermod -d /home/hnlinux root
改变用户的uid
usermod -u 777 root
组
添加组
groupadd
指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
groupadd [选项] group
2、选项列表
3、文件
/etc/group 群组信息/etc/gshadow 群组加密信息
4、实例
创建组,指定组的id
sudo groupadd group01 -g 888
删除组
删除组,如果租内有用户,那么必须先删除用户。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
groupdel 组名 删除指定的组名
2、选项列表
3、实例
sudo groupdel group01
修改组
Linux groupmod命令用于更改群组识别码或名称。
需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
语法
groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
参数:
-g <群组识别码> 设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n <新群组名称> 设置欲使用的群组名称。
实例
修改组名
groupadd linuxso tail -1 /etc/group tail -1 /etc/group groupmod -n linux linuxso tail -1 /etc/group
修改用户的工作组
Chgrp
功能: 改变文件的拥有组
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
chgrp newgroup file 改变文件的所有组
示例:
请将/home/catch .txt文件的所在组修改成 letter
chgrp letter /home/catch.txt
请将 /home/* 目录下所有的文件和目录的所在组都修改成letter
chgrp -R letter /home/*
指定要管理的工作组
gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow的管理工具,用于指定要管理的工作组。
选项详解:
-a : 添加用户到组-d : 从组删除用户-A:指定管理员-M:指定组成员和-A的用途差不多;-r:删除密码;-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
实例
将userA添加到groupB用户组里面:
gpasswd -a userA groupB
注意:添加用户到某一个组可以使用 usermod -G groupB userA 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉,所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户。
将userA设置为groupA的群组管理员:
gpasswd -A userA groupA
目录和文件操作
file: 查询文件的类型
du:显示目录或文件的磁盘占用量(文件系统数据库的情况)
wc:统计文件的行数、单词数、字节数和字符数
tree:以树状图逐级列出目录的内容
cksum:显示文件的CRC校验值和字节统计
mk5sum:显示或检查MD5(128-bit)
sum:为文件输出校验及块计数
dirname:输出去除尾“/”字符部分的名称,名称不包含“/”则显示“.”
basename:去除前导的目录部分后显示名称,如果指定后缀的话会去掉后缀
In: 创建链接文件
stat:显示文件或文件系统的状态
文件
普通文件
目录文件
设备文件
目录文件
/bin 普通用户使用的命令,二进制目录,存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
/etc 目录存放系统的大部分配置文件和子目录。存放系统管理和配置文件
/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root 超级用户(系统管理员)的主目录(特权阶级^o^)
/temp 用于存放各种临时文件,是公用的临时文件存储点。
/home 普通用户主目录,存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 库函数及内核函数, 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/lost+found 默认空的,当系统不正常关机后,这里就成了一些无家可归的文件的避难所
/sbin 超级用户管理员使用的命令,存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
/boot 超级用户管理员使用的命令
/dev 用于存放设备文件,
/misc 备用文件夹
/mnt 设备挂载点 ,系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。
pwd
显示当前用户所处的工作目录的绝对路径
显示目录下的内容
ls --color=never 不是用颜色表示不同类型文件
ls -a 显示所有文件
ls -l 以长格式显示文件
ls -d 只显示目录
ls -i 查看inode节点
dirs //显示目录列表,在只需要显示目录的时候比较简单实用
读写权限
读权限r(read):
对文件而言 是读取文件的内容的权限,对目录而言是列出目录下所包含的内容的权限。
写权限w:
对文件而言是修改文件内容的权限;对目录而言是在目录下创建及删除文件的权限
执行权限 x:
对可执行文件而言 是允许执行改文件的权限,对目录而言是进入目录的权限。
(1)符号表示法
Ls -l 文件名 列出某个目录下每个文件的权限
-rw 读写
–: 0
w: 2
x: 1
r: 4
-rw-rw----
第一个值是文件类型
后面每3个为一组,分别代表用户的权限 组权限 通用权限
修改目录的拥有者
Chown 文件拥有人[:文件拥有组] 文件
改变文件的拥有人,可一并修改文件的拥有组
chown bin myshare/
ls -ld myshare/
实例:
修改文件所有者
chown tom houge.txt
递归改变文件所有者和所有组
chown -R tom:leader home/
修改文件的权限
chmod是Linux/Unix中修改文件或者目录权限的命令,通过修改权限可以让指定的人对文件可读、可写、可运行,极大地保证了数据的安全性。
-rwxrw-r-- 1 root police 1213 Feb 2 09:39 *.txt
0-9位说明
第0位确定文件类型(说明:
-:普通文件
d:目录
l : 连接文件,
c: 字符设备文件[键盘,鼠标]
b:块设备文件[硬盘] )
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。
R: 读
w : 写权限
x: 执行权限
第4-6位确定所属组(同用户组的)拥有该文件的权限
第7-9位确定其他用户拥有该文件的权限
1: 如果是文件,表示硬链接的数目, 如果是目录,则表示有多少个子目录
1213: 表示文件大小,如果是目录,则统一为 4096
rwx权限详解
rwx作用到文件(重要)
r: 代表可读(read): 可以读取,查看
w:代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
x: 代表可执行(execute):可以被执行
rwx作用到目录(重要)
r: 代表可读(read): 可以读取,ls查看目录内容
w:代表可写(write): 可以修改,目录内创建+删除+重命名目录
x:代表可执行(execute):可以进入该目录
chmod改变权限
通过chmod指令,可以修改文件或者目录的权限
u: 文件拥有人
g: 文件拥有组
o: 其他人
a:所有人
一)+ 、-、= 变更权限
chmod u=rwx,g=rx,o=x 文件、目录 //给所有者rwx, 给所在组的用户 rx, 给其他人
chmod a-x 文件、目录 //表示:给所有用户 去掉 x权限
chmod o+w 文件、目录 //表示:给其它用户增加w 的权限
示例:
1.使myshare下的所有文件和子目录都自动拥有工作组为bin
chmod g+s myshare
ls -ld myshare/
2.给catch文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
chmod u=rwx, g=rx ,o=rx catch
3.给catch文件的所有者除去执行的权限,增加组写的权限
chmod u-x, g+w catch
4.给catch文件的所有用户添加读的权限
chmod a+r catch
二)第二种方式:通过数字变更权限
数字代表的权限:r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件、目录
## 相当于
chmod 751 文件、目录
示例:
将 catch.txt 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现:
chmod u=rwx, g=xr, o=xr catch.txt
chmod 755 catch.txt
创建文件夹
mkdir myshare/testdir
mkdir -p //会自动创建父文件夹
ls -l myshare
mkdir -p 一次性创建多级目录
创建文件
touch a.txt
提示: 如果文件名字已经存在了,不会报错,也不会覆盖
编辑文件
vim a.txt
提示:
文件名字不存在,会自动创建
复制文件和目录
cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。
cp 命令的基本格式如下:cp [选项] 源文件 目标目录/文件
选项:
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
-u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。
当源文件可以有多个,但这种情况下,目标文件必须是目录才可以。
这里的软链接,类似于 Windows 系统中的快捷方式,而硬链接则是透过文件系统的 inode 号产生一个新的文件名。无论是复制软链接还是硬链接,都不是复制源文件。
cp 命令既可以复制文件,也可以复制目录。
touch cangls #建立源文件
cp cangls /tmp/ #把源文件不改名复制到 /tmp/ 目录下
cp cangls /tmp/bols #改名复制
如果复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”的别名,例如:
cp cangls /tmp/
cp:是否覆盖"/tmp/cangls"?y #目标位置有同名文件,所以会提示是否覆盖
复制目录,其实复制目录只需使用“-r”选项即可,例如:
cp -r /root/movie/ /tmp/
删除文件或目录
rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。
rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm *-rf)。所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。
在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息。
1.命令的基本格式
rm[选项] 文件或目录
2.命令功能
删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
3.命令参数:
常用命令选项
-f, --force 强制删除,忽略不存在的文件,不给出提示。
-r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
-v, --verbose 详细显示进行的步骤
--help 显示此帮助信息并退出
--version 输出版本信息并退出
-f: 强行删除文件或目录,不进行提醒
-i: 删除文件或目录时提醒用户确认
-rf : 强制删除 r是递归
rm 命令是一个具有破坏性的命令,因为 rm 命令会永久性地删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用 rm 命令将其删除,将无法恢复,因此,尤其在使用 rm 命令删除目录时,要慎之又慎。
rm 命令如果任何选项都不加,则默认执行的是"rm -i 文件名",也就是在删除一个文件之前会先询问是否删除。
如果要删除的目录中有 1 万个子目录或子文件,那么普通的 rm 删除最少需要确认 1 万次。所以,在真正删除文件的时候,我们会选择强制删除:
rm -rf /hdfs_demo
#强制删除,一了百了
虽然 “-rf” 选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用 “-rf” 选项。
4.实例
删除文件file,系统会先询问是否删除
rm file
将 MapReduce子目录及子目录中所有档案删除
rm -r MapReduce
删除一个或多个空目录
外置命令,rmdir 命令,只能删除空目录。
rmdir命令作用是删除空的目录,英文全称:“remove directory”。
rmdir命令只能删除空目录。当要删除非空目录时,就要使用带有“-R”选项的rm命令。
rmdir命令的“-p”参数可以递归删除指定的多级目录,但是要求每个目录也必须是空目录。
语法格式 :
rmdir [参数] [目录名称]
常用参数:
删除空目录:
rmdir dir
递归删除指定的目录树
rmdir -p dir/dir_/dir_2
显示指令详细执行过程
rmdir -v dir
rmdir -p -v dir/dir_/dir_2
显示命令的版本信息
rmdir --version
移动文件
mv命令:用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。
source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
1.如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
2.如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
语法
mv(选项)(参数)
选项
--backup=<备份模式>: 若需覆盖文件,则覆盖前先行备份;-b:当文件存在时,覆盖前,为其创建一个备份;-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录(强制覆盖同名文件);-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。--strip-trailing-slashes:删除源文件中的斜杠“/”;-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;--target-directory=<目录>:指定源文件要移动到目标目录;-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
实例:
实例一、移动文件或目录
mv cangls /tmp #移动之后,源文件会被删除,类似剪切
mkdir movie
mv movie/ /tmp #也可以移动目录。和 rm、cp 不同的是,mv 移动目录不需要加入 "-r" 选项
如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为 mv 命令默认执行的也是 “mv -i” 的别名,例如:
touch cangls #重新建立文件mv cangls /tmp mv #是否覆盖"tmp/cangls"?y#由于 /tmp 目录下已经存在 cangls 文件,所以会提示是否覆盖,需要手工输入 y 覆盖移动
实例二、强制移动
如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。
如果我们确认需要覆盖已经存在的同名文件,则可以使用 “-f” 选项进行强制移动,这就不再需要用户手工确认了。例如:
touch cangls #重新建立文件mv -f cangls /tmp #就算 /tmp/ 目录下已经存在同名的文件,由于"-f"选项的作用,所以会强制覆盖
实例三、不覆盖移动
既然可以强制覆盖移动,那也有可能需要不覆盖的移动。如果需要移动几百个同名文件,但是不想覆盖,这时就需要 “-n” 选项的帮助了。例如:
ls /tmp
#/tmp/bols /tmp/cangls #在/tmp/目录下已经存在bols、cangls文件了
mv -vn bols cangls lmls /tmp/
"lmls"->"/tmp/lmls"
#再向 /tmp/ 目录中移动同名文件,如果使用了 "-n" 选项,则可以看到只移动了 lmls,而同名的 bols 和 cangls 并没有移动("-v" 选项用于显示移动过程)
实例四、改名
如果源文件和目标文件在同一目录中,那就是改名。
目录也可以按照同样的方法改名。
mv bols lmls #把 bols 改名为 lmls
实例五、显示移动过程
如果我们想要知道在移动过程中到底有哪些文件进行了移动,则可以使用 “-v” 选项来查看详细的移动信息。例如:
touch test1.txt test2.txt test3.txtmv -v *.txt /tmp
查看文件夹和文件的内存占用情况
du -a
操行符
+ 增加权限- 删除权限= 赋予给定权限
压缩命令
1、bzip方式、bzip2方式、zip方式
bzip方式 压缩文件后缀是 .bz2bzip2 文件名 进行压缩bzip2 -d 压缩文件名 进行解压bzip2 -9 文件名 进行高压缩比的压缩zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.
2、gzip方式
压缩文件后缀是 .gz
gzip 文件名 进行压缩
gzip -d 压缩文件名 进行解压
gzip -9 文件名 进行高压缩比的压缩
3、unzip
unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;
4、tar(重点)
压缩命令
tar -jcvf 压缩后的文件名 文件名|文件夹tar -zcvf 压缩后的文件名 文件名|文件夹tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpgtar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
解压命令
tar -jxvf 压缩文件名
tar -zxvf 压缩文件名
tar –xvf file.tar //解压 tar包tar -xzvf file.tar.gz //解压tar.gz
-c: 创建 .tar格式的包文件
-x: 解压.tar格式的包文件
-v :输出详细信息
-f: 表示使用归档文件
-p:打包时保留原始文件及目录的权限
-t:列表查看包内的文件
-z:调用gzip程序进行压缩或解压
-j:调用bzip2程序进行压缩或解压
项目部署常用命令
查看进程号
ps -ef | grep java
查看所有Java相关的进程
#杀进程:kill -9 进程号
#查看端口占用情况
lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000
netstat -ntlp //查看当前所有tcp端口
#linux查看日志文件:tail -f test.log 查看实时日志
linux 如何显示一个文件的某几行(中间几行)
从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000
显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000
tac (反向列示)
tac 是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由第一行到最后一行连续显示在萤幕上,而 tac 则是由最后一行到第一行反向在萤幕上显示出来
后台运行jar包
方式一:
$ nohup java -jar test.jar &
方法二:
$ nohup java -jar test.jar >temp.txt &//这种方法会把日志文件输入到你指定的文件中,没有则会自动创建
jobs命令://列出所有后台执行的作业,并且每个作业前面都有个编号
查看nginx的安装目录
1:查看端口占用,和进程号:netstat -ntlp
2:根据进程号查看安装目录:ll /proc/进程号/exe
查看nginx 配置文件的路径:
进入nginx安装目录下的sbin目录(上面的步骤)输入:./nginx -t
填空题
1.linux中把分区和目录对应的过程叫做 挂载 。
2.信号是在软件层次上对中断 机制的一种模拟, 是一种异步通信方式。
3.用GCC编译过程可以被细分为四个阶段:预处理,编译,汇编,链接 。
4.编译有线程的文件要加 -lpthread 参数。
5.父进程等待子进程的结束,可以使用的函数是 wait() 和 waitpid() 。
6.linux主要有两个信号安装函数,分别是什么。
Signal(),sigaction()
7.Linux操作系统内核由 C语言 编写完成。
8.使用gdb调试程序时,next和step命令的作用?
Next:单步跳过命令,一次跳过一行(跳过一行代码,不可跳过函数)
Shop:单步跳过命令,跳过一行代码,跳过函数调用
9.目录/BOOT 下存放linux操作系统启动时所要用到的程序
10.Linux 系统的设备文件分为三类?
字符设备文件,块设备文件,网络设备文件
11.Linux 中采用“一对一”的线程机制,也就是一个用户线程对应一个 内核线程 。
12.vim三种模式:在命令模式下按下 Esc 就进入了底线命令模式。
13.标准I/O提供了三种类型的缓冲,分别是?
全缓冲,行缓冲,不缓冲
14.linux文件系统由四部分组成, 超级块 用于存放文件的控制信息。
15.一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是?
信号诞生,信号注册,信号注销,信号处理执行完毕
16.互斥锁只有两种状态,即?
上锁,解锁
17.线程本身调用 pthread_exit() 函数可以退出线程。
18.向消息队列发送消息的函数是 msgsnd() 。
19. Fstat() 系统调用可以根据文件描述符来操作文件特性。
Valgrind包括很多工具, Memcheck 是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况, Cachegrind 是主要用来检查程序中缓存使用出现的问题。
Memcheck: 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
Callgrind: 它主要用来检查程序中函数调用过程中出现的问题。
Cachegrind。它主要用来检查程序中缓存使用出现的问题。
Helgrind: 它主要用来检查多线程程序中出现的竞争问题。 Massif。它主要用来检查程序中堆栈使用中出现的问题。
Extension: 可以利用core提供的功能,自己编写特定的内存调试工具。
20.信号发送函数中, alarm() 用于设置定时器,当计时时间到达时,向进程发送SIGALRM信号。
21.当一个线程的属性设置为 detach ,该线程结束时立即释放它所占有的系统资源。
1.以下哪种方式属于异常终止一个进程(D )
A从main函数返回。
B调用exit。
C最后一个线程从其启动例程返回。
D接到一个信号并终止。(软中断)
2.下列命令哪个是创建线程私有数据命令(A)
A pthread_key_create() B pthread_setspecific()
C pthread_getspecific() D pthread_key_delete();
3.下面哪种通信方式适用于不同机器之间的进程通信。(D )
A.消息队列 B.共享内存 C.信号量 D.套接字
4.创建或打开消息队列的函数为(A )
A.msgget() B.msgsnd() C.msgrcv() D. msgctl()
5.linux中通过调用waitpid()函数得到进程的退出信息,该函数原型为
Pit_p waitpid(pid_t pid,int * statloc,int options)
pid_t waitpid(pit_t pid, int *statloc, int options);当第一个参数pid取值为-1时,表示(A)
A等待任一子进程退出,相当于 wait()。
B等待进程组ID与调用进程组ID相同的任一子进程。==0
C只等待进程ID等于PID的子进程。>0
D等待指定进程组中的进程,该进程组id等于 pid的绝对值。<-1
简答题
1) 公司新来了一名员工,对员工进行以下操作
(1)添加员工
useradd 用户名
(2)更改密码
passwd 用户名
(3)更改用户的目录
usermod -d/目录名
(4)锁定用户账号
passwd –l 用户名
2) 如果一个文件的权限是-r-w-r-$,解释清楚-r-w-r- $的每个字符的含义
(1)读权限r(read): 对文件而言 是读取文件的内容的权限,对目录而言是列出目录下所包含的内容的权限。
(2)写权限w:
对文件而言是修改文件内容的权限;对目录而言是在目录下创建及删除文件的权限
(3)执行权限 x: 对可执行文件而言
是允许执行改文件的权限,对目录而言是进入目录的权限。
(4)$ //
在bash里符号表示当前用户为普通用户;在bash脚本里。符号表示当前用户为普通用户;在bash脚本里。符号表示当前用户为普通用户;在bash脚本里。开头表示变量
$# 表示参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 表示所有参数,并且所有参数都是独立的
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
3) 描述逻辑分区是什么?它是怎么来的?如果让你分区,你如何操作?
逻辑分区是硬盘上一块连续的区域,不同之处在于,每个主分区只能分成一个驱动器,每个主分区都有各自独立的引导块,可以用fdisk设定为启动区。 linux中主分区至少要有1个,最多可以有4个,扩展分区至多只能有1个或者没有,但是主分区加上扩张分区数量不能超过4个。扩展分区下必须再分逻辑分区,不然空间不能被格式化,逻辑分区的数量没有限制。4) shell脚本的定时性操作
1.安装crontab
2.开启crontab服务
3.3.设置需要执行的脚本
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
5) 写出提高linux系统安全性的方法 (答案有十二个,只要求写十个)
1.开防火墙
2.分区
3.不使用默认路由(这三个先写上)
4.不要以root身份登录
5.限制超级用户的权利
6.使用基于密钥的认证
7.仅监听特定的ip
8.禁止使用空密码
9.做好日志,经常分析
10.禁止SSH远程
11.Linux内核参数优化
12.调整文件描述符数量
6) 一个if判断题,写一个shell脚本
1.判断文件是否存在
if[-f ”文件名”]; then
echo “文件存在”
else
echo “文件不存在”
fi
2.能不能读取内容
if[-r “文件名”] ;then
echo “可以读取文件内容”;
else
echo “不可以~”;
fi
3.要求输入输出,类似输入一个成绩数字,判断是否及格。
# !/bin/bash
echo "请输入一个分数:"
read aif [ $a -ge 90 ] #大于 -gt (greater than) then #小于 -lt (less than) echo 'A' #大于或等于 -ge (greater than or equal) elif [ $a -ge 80 ] #小于或等于 -le (less than or equal) then #不相等 -ne (not equal)echo 'B'elif [ $a -ge 70 ]then echo 'C'elif [ $a -ge 60 ]then echo 'D'elseecho 'E'
7) 什么是进程?进程资源由哪两部分组成?
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
进程资源包括内核空间进程资源和用户空间进程资源
8) pid_t fork() 返回值的意义?
创建失败时返回负数;创建成功时返回两个值:父进程的fork返回一个正数表示子进 程的进程ID,子进程的fork返回0
9) Linux环境中使用kill函数向进程或进程组发送信号
Linux环境中使用kill函数向进程或进程组发送信号。Kill函数原型为
int kill(pid_t pid, int signo);当第一个参数pid>0时,表示( A )
A发送信号给进程ID为pid的进程;
B发送信号给进程组ID和该进程相同的进程;
C发送信号给进程组内进程ID为pid的绝对值的进程;
D发送信号给系统的所有进程;
pid>0 将信号传给进程识别码为pid 的进程。
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程
10) 共享主存和修改消息队列状态
共享主存基本操作(A )将共享主存区映射到进程虚拟地址空间。
A shmat() B shmdt()共享内存
C shmctl()控制对共享内存的使用 D shmget() 创建共享内存
修改消息队列状态信息的命令是(B)
A msgsnd()发送信息 B msgctl() 控制
C msgrcv() 获取信息 D msgget() 创建
11) 父进程调用wait() 可能出现的三种情况?
1.如果其所有子进程都还在运行,则阻塞;
2.如果一个子进程已经终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回;
3.如果它没有任何子进程,则立即出错返回;
12) 在进程中,return和exit() 的区别?
return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示一个进程的结束。
在main函数里,return(0)和exit(0)是一样的,子函数用return返回,而子进程用exit退出,调用exit时要调用一段终止处理程序,然后关闭所有I/O流
1.return 是C语言的关键字,exit是POSIX API 函数
2.在main函数中,执行return和exit会产生相同效果。
3.在子函数中,执行return仅仅从子函数中返回,而调用exit函数将会直接退出当前进程
13)什么是孤儿进程?谁负责回收孤儿进程的内核空间资源?
孤儿进程:因父亲进程先退出而导致一个子进程被init进程收养的进程,即孤儿进程的父亲更改为init进程,该进程在孤儿进程退出后回收它的内核空间资源。
14) 僵尸进程是什么?如何消灭僵尸进程?
僵尸进程:进程已经退出,但它的父亲进程还没有回收内核资源的进程,即该进程在内核空间的PCB没有释放。
利用kill函数杀死父进程,僵尸函数会被init进程收养
15) 简述进程对可靠信号和不可靠信号的处理过程
如果进程在屏蔽某个信号的时间内,其他进程多次向其发送同一个信号,不可靠信号只有一次未决记录,当进程解除屏蔽后,该信号只会被捕捉一次;而可靠信号操作系统会 记录所有的发送,当进程解除屏蔽后,操作系统会捕捉对等次数。
16) 简单介绍一下信号的定义及其分类
信号是表示消息的物理量,是运载消息的工具
信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的
分类:确定信号和随机信号;连续信号和离散信号;周期信号和非周期信号;能量信号与功率信号;因果信号与反因果信号;实信号与复信号
17) 简单介绍一下匿名管道及其特点
匿名管道:用于连接一个读进程和一个写进程,以实现它们
之间通信的共享文件,又称pipe文件,是一个只存在于内存的特殊文件。
1:匿名管道是半双工的,数据只能向一个一个方向流动。
2:一个进程将数据写入管道,另一个进程从管道中读取数据.
3:写入的内容添加在管道缓冲区的末尾,每次都是从缓冲区头部读出数据。
4:数据读出后将从管道中移走,其他读进程都不能再读到这些数据。
5:需要建立起两个管道,只能用于有亲缘关系的进程之间。(如父子或兄弟)
匿名管道用于进程之间通信,且仅限于本地父子进程之间通信,结构简单。
1.只提供单向通信,也就是说,两个进程都能访问这个文件,假设进程1往文件内写东 西,那么进程2 就只能读取文件的内容。
2.只能用于具有血缘关系的进程间通信,通常用于父子进程建通信
3.管道是基于字节流来通信的
4.依赖于文件系统,它的生命周期随进程的结束结束(随进程)
5.其本身自带同步互斥效果
18) 请解释一下有名管道和匿名管道的区别?
匿名管道是由pipe函数创建 并打开的
命名管道是由mkfifo函数创建 的 ,打开用open
命名管道和匿名管道唯一的区别就是在创建的打开,一旦这些工作完成后,它们有相同的意义。
FIFO索引节点出现在系统目录数上而不是pipefs特殊文件系统中
FIFO是一种双向通信管道,可以以读/写模式打开一个FIFO
命名管道和匿名管道唯一的区别就是在创建的打开,一旦这些工作完成后,它们有相同的意义。
19) 什么是线程?进程和线程的区别?
线程是操作系统能够进行运算调度的最小单位。
区别:
进程是运行中的程序,线程是进程的内部的一个执行序列
进程是资源分配的单元,线程是执行行单元
程间切换代价大,线程间切换代价小
进程拥有资源多,线程拥有资源少使用灵活
多个线程共享进程的资源
20) Please describe the difference of signal() and sigaction() in brief
(1) signal在调用handler之前先把信号的handler指针恢复;sigaction调用之后不会恢复handler指针,直到再次调用sigaction修改handler指针。
这样,signal就会丢失信号,而且不能处理重复的信号,而sigaction就可以。
因为signal在得到信号和调用handler之间有个时间把handler恢复了,这样再次接收到此信号就会执行默认的handler。
signal在调用过程不支持信号block;sigaction调用后在handler调用之前会把屏蔽信号加入信号中,handler调用后会自动恢复信号到原先的值。
(2)signal处理过程中就不能提供阻塞某些信号的功能,sigaction就可以阻指定的信号和本身处理的信号,直到handler处理结束。这样就可以阻塞本身处理的信号,到handler结束就可以再次接受重复的信号。
不同点
signal()
安装的信号不能向信号处理函数传递信息
sigaction()
可设置进程的信号掩码,返回设置之前的sigaction结构
安装的信号可以向信号处理函数传递信息
相同点
都可以为指定的信号设置信号处理函数
共用同一个内核函数do_sigaction()
21)在标准IO库中,rewind函数作用?
将文件内部的位置指针指向一个流的开头
22)C语言中没有明确给定初值的全局变量和静态变量存放在哪儿?
没有初始化的全局变量,bss(未初始化代码段),初始化的全局变量和静态变量放在data(初始化代码段)
23)函数geteuid()用于得到进程的?
得到有效用户的id
24)逻辑卷的创建
1.划分LINUX分区
2.创建PV(物理卷)
3.创建VG(卷组)
4.创建LV(逻辑卷)
5.格式化LV
6.挂载