【仍需仔细斟酌】
SUID GUID SBIT
程序安装rpm相关
挂载
BASH变量
日志轮替
#笔记说明:该笔记在学习兄弟连Linux视频时写下
分区:
必须分区:
/ 根分区
swap 交换分区(虚拟内存,理论上内存的两倍,最大不能超过2GB)
推荐分区:
/boot 启动分区(200MB足够)
ifconfig命令
windows10使用SSH: 在可选功能中勾选OpenSSH,然后在CMD使用命令(例如) ssh root@192.168.1.2
(https://www.bilibili.com/read/cv1420735/)
/bin/ 一般的bin
/sbin/ super-bin 只有管理员能执行的二进制目录
/usr/bin/
/usr/sbin/
/boot/ 系统启动文件
/dev/ 设备文件
/etc/ 默认配置文件保存位置
/home/ 普通用户的主目录
/root/ 超级用户的主目录
/lib/ 系统函数库
/loft+found/
fsck命令 磁盘检查
系统自己为用户准备的挂载目录(只有空目录才能成为挂载目录)
/media/ 光盘
/mnt/ (mount)移动硬盘
/misc/ NFS共享目录
/opt/ 第三方安装的软件保存位置(现在由/usr/local/取代)
不要写东西的目录
/proc/ 虚拟文件系统 process 保存各种硬件信息
/sys/ 保存内核相关信息
/srv/ 服务数据目录
/tmp/ 临时文件存放目录,开机时清空
/usr/ Unix Software Resource 系统软件资源目录 (类似于Windows目录)
/var/ 动态数据保存位置,主要保存缓存、日志。
服务器不能关机,只能重启
重启服务器应该关闭服务
不要在服务器访问高峰运行高负载命令
配置防火墙别把自己踢了
ls -a
all
显示所有文件
ls -l
long
显示详细信息
可以用ll表示
ls -lh
long human
人性化显示
ls -d
只显示目录
文件计数 所有者 所属组 文件大小 修改时间(Linux没有创建时间的概念)
-rw-------. 1 root root 2735 Jan 2 19:46 anaconda-ks.cfg
-rw-------. 1 root root 143 Jan 3 20:27 .bash_history
-rw-r--r--. 1 root root 18 May 11 2019 .bash_logout
-rw-r--r--. 1 root root 176 May 11 2019 .bash_profile
ll不是命令,是ls -l的别名
关于 -rw-r--r-- :
第1位:
- 文件
d 目录
l 软链接
第2,3,4位:(u所有者的权限)
r读
w写
x执行
-无该权限
root用户有rw权限
第5,6,7位:(g所属组的权限)
所属组有r权限
第8,9,10位:(o其他人的权限)
其他人有r权限
创建目录
mkdir /tmp/newFolder
创建一个
mkdir -p /tmp/newFolder1/newFolder11
递归创建
cd 切换目录
获得完整目录名称:pwd
Print Working Directory
当前目录 .
上级目录 ..
上级目录的上级目录 ...
rmdir 删除空目录
rm -rf 删除所有文件和目录 (remove file)
rm -r 只删除其中目录 (remove)
rm -f 强制执行 (force)
cp /etc/grub.conf /tmp 复制文件
cp -r /tmp/folder1/folder2 /root 复制目录
cp /a/b /a/c /d 将/a/b,/a/c的文件都复制到/d
cp -p /a/b /a/d 复制文件,保持文件属性 p is for preserve
复制的同时可以改名
cp -r /a/b.file /a/d/c.file
mv 移动文件
ctrl + l 或 clear 清空屏幕
touch 创建新文件
touch a.txt b.txt 创建两个文件
创建带空格的文件: touch "file with blank space"
cat 命令查看文件
cat -n 带行号查看
tac 反向查看文件
more 命令分页显示文件 space或f键翻页,回车按行翻页,按q退出
less 与more差不多,但是less可以向上翻页,可以搜索(按/)
head -n 20 a.txt 显示a.txt的前20行
tail -n 20 a.txt 显示a.txt的后20行
tail -f -n 20 a.txt 实时动态显示文件末尾内容
硬链接和软链接
ln -s 软链接 类似快捷方式 文件类型 l
ln 硬链接 可以同步更新的相同文件,互为镜像,ID相同
硬链接不能跨分区(无效的跨设备连接)
硬链接不能指向目录
软链接可以指向目录
软链接可以跨分区
chmod 更改文件权限(change the permissions mode of a file)
u user 给所有者权限
g group 给所属组权限
o others 给其他用户权限
a all 给所有人权限
+ 增加权限 如 u+x 是给所有者增加x权限
- 减少权限
= 直接修改权限
权限的数字表示
r --- 4
w --- 2
x --- 1
7 : 全部权限
1 :只有x权限
2:只有w权限
4:只有r权限
6:rw权限
5:rx权限
3:wx权限
0:无权限
755:rwxr-xr-x
532:r-x-wx-w-
- R 递归权限修改:将目录下所有文件的权限进行修改
文件权限细节
r:可以查看内容
w:可以修改内容,在目录中创建、删除
x:可以执行,可以进入目录
目录权限细节
r:可以查看目录中文件内容(ls)
w:可以在目录中写入、删除文件(touch/mkdir/rmdir/rm)
x:可以进入目录(cd)
*有r权限一定有x权限
可以更改文件权限的用户:所有者、ROOT
chown 更改文件所有者(只有管理员可以操作)
eg. chown root /tmp/file.txt
chgrp 更改文件所属组
eg.
group add testGroup
chgrp testGroup file.txt
权限的默认生成:
文件创建者 即 文件所有者
文件所属组 即 文件所有者的缺省组
umask -S 以rwx显示新建文件的缺省权限
缺省创建的文件不具有可执行权限
文件 rw-r--r--
目录 rwxr-xr-x
umask 逻辑异或权限
0022 0特殊权限
0所有者权限
2所属组权限
2其他人权限
777 rwx rwx rwx
022 --- -w- -w-
逻辑运算 rwx r-x r-x (目录)
7 5 5
777 rwx rwx rwx
搜索命令
find 文件目录 -name 文件名
不加通配符 搜索严格,只有严格符合文件名的才会被搜索出来
加通配符* 不严格搜索
*文件名 以文件名结束
文件名* 以文件名开头
文件名? 符号?表示单个字符
find 文件目录 -iname 文件名
忽略大小写进行搜索
find 文件目录 -size 文件大小
文件大小以数据块为单位
1KB = 2个数据块
100MB = 102400KB = 204800个数据块
+文件大小 比文件大小大的文件
-文件大小 比指定文件大小小的文件
find 文件目录 -user 文件所有者
find 文件目录 -user 文件所属组
find 文件目录 -cmin 文件修改时间(分钟)
+大于设定时间 eg. find /etc -cmin +5
-小于设定时间 eg. find /etc -cmin -5
查找输入时间内被修改过属性的文件和目录
find 文件目录 -amin 文件访问时间(分钟)
find 文件目录 -mmin 文件内容修改时间(分钟)
eg.
find /etc -size +16380 -a -size -20480
a表示and,逻辑与,文件大小同时满足
若写o表示任意一项满足即可
find /etc -type d
d 目录
f 文件
l 软链接
find /etc -name inittab -exec ls -l {} \;
-exec/-ok命令{} \; 对搜索结果执行操作
find /etc -name inita -ok rm {} \;
找到结果执行删除操作,删除前会确认
ls -i
根据i节点列出文件
find /etc -inum 123456
根据i节点查找
locate inittab
在文件资料库中搜索inittab
locate -i init
不区分大小写搜索init
updatedb
更新文件资料库
which ls
搜索命令所在目录及别名信息
whereis ls
搜索命令所在目录及帮助文档所在路径
grep multiuser /etc/inittab
在文件中搜寻字符串匹配的行
grep -v # /etc/init/whoopsie.conf
含#的行都删掉
grep -v ^# /etc/init/whoopsie.conf
以#开头的行都删掉
man
英文原意 manual
查看帮助信息
-1 命令的帮助
-5 配置文件的帮助
apropos services
查看配置文件信息
///用户管理命令///
useradd
【网络相关】
write 用户名
给在线用户放信息 以Ctrl+D结束
如何查看用户列表
查看/etc/passwd文件即可
groupdel 删除用户组
userdel 删除用户
id 显示用户信息
wall
给所有用户发信息
wall Hello Everyone
ping ip地址
ping -c
指定ping的次数
ping -c 3 192.168.1.1
mail 用户名
给指定用户发邮件
last
显示近期登录用户的日志
lastlog
显示所有用户的登录日志
lastlog -u 用户的uid
traceroute
显示数据包到主机间的路径
netstat
显示网络相关信息
-t
TCP
-u
UDP
-l
监听
-r
路由
-n
显示IP地址和端口号
-tlun
显示计算机下开了哪些端口
-rn
查看路由列表和网关
-an
显示所有网络连接
service network restart
重启网络服务
mount [-t 文件系统] 文件设备名 挂载点
挂载
eg
mount -t iso9960 /dev/sr0 /mnt/cdrom
mount -t vfat /dev/sdb1 /mnt/usb/
umount
卸载【!不是unmount】
Linux下七种文件类型
文件类型标识 文件类型
- 普通文件
d 目录
l 符号链接
s(伪文件) 套接字
b(伪文件) 块设备
c(伪文件) 字符设备
p(伪文件) 管道
占用存储空间的类型:文件、目录、符号链接。符号链接记录的是路径,路径不长时存在innode里面。
其他四种:套接字、块设备、字符设备、管道是伪文件,不占用磁盘空间。
shutdown -h now
现在关机
h = halt
shutdown -h 20:00
晚上8点关机
shutdown -r now
重启
shutdown -c
取消前一个关机命令
shutdown命令可以正确保存数据进行关机和重启
halt
关机
poweroff
关机
init 0
关机
reboot
重启
init 6
重启
init _num
系统运行级别
0 关机
1 单用户命令行
2 不完全多用户,不含NFS服务 命令行
NFS Network File System
实现Linux之间的文件共享
有一定的安全隐患
3 完全多用户命令行
4 未分配
5 图形界面
6 重启
修改系统默认运行级别
cat /etc/inittab
id:3:initdefault
runlevel
查询系统运行级别
默认 当前
logout
退出登录init
【重要】一定要及时logout
《VIM编辑器》
插入命令(按Esc后执行)
a 在光标所在字符前插入
A 行尾
i 在光标所在字符后插入
I 行首
o 光标下插入新行
O 光标上插入新行
命令模式
编辑模式
插入模式
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
$ 移到行尾
0 移到行首
nG 移到第n行
:n 到第n行
V(大写) 选中
> 向右缩进
x 删除字符
nx 删除光标所在处后n个字符
dd 删除光标所在行
ndd 删除光标在内行的n行
dG 删除光标所在行直到文件末尾
D 删除光标所在行到行尾
:n1,n2d 删除指定范围的行
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p 粘贴光标所在行行下
P 行上
u 撤销,取消上一步操作
R 从光标所在处替换字符,按Esc结束
/string 搜索指定字符串(默认区分大小写)
:sec ic 开启区分大小写
:sec noic 不区分大小写
n 搜索指定字符串的下一个出现位置
:%s/old/new/g 全文替换指定字符串
:n1,n2s/old/new/g 在一定范围内替换指定字符串
eg. :41,44s/txta/txtb/c
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改并退出
:wq! 保存修改并退出(文件所有者及root可使用)
:r 文件名
导入文件文本到光标处
:r !date
导入日期到光标处
:map 定义快捷键
eg.
map ^p I#<ESC>
map ^a 0x
:1,4s/^/#/g
将1到4行的行首加入#注释
:1,4s/^#//g
将行首#替换为空
:1,4s/#//g
将所有#替换为空
转义符
\/ 表示字符/
ab a b
命令执行后,每当你在文本中输入a并且按回车,就会转换成b
?》./.,
/root/.rimrc
编辑该配置文件可以使得vim的配置永久生效
《SSH & SSL & Telnet》
SSH 的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额 外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一 个安全的“通道”。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。
最初的SSH协议是由芬兰的一家公司的研究员Tatu Ylönen于1995年设计开发的,但是因为受版权和加密算法等等的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件包,而且是開放源代碼且自由的。
在客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于密碼的安全验证),知道帐号和密碼,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的伺服器在冒充真正的伺服器,无法避免被「中间人」攻击。
第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的伺服器上。客户端软件会向伺服器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该伺服器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,伺服器就用公有密钥加密「质询」(challenge)并把它发送给客户端软件。从而避免被「中间人」攻击。
SSL TLS SSL在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行的Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信。
SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP、FTP、Telnet等等)能透明的建立于SSL协议之上。
TLS 是SSL 的高级版本。 IETF将其进行了标准化,并改名为TLS。
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
ddsaDwz4 Aa142
虽然Telnet较为简单实用也很方便,但是在格外注重安全的现代网络技术中,Telnet并不被重用。原因在于Telnet是一个明文传送协议,它将用户的所有 内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患,因此许多服务器都会选择禁用Telnet服务。如果我们要使用Telnet的远程登录,使用前应在远端服务器上检查并设置允许Telnet服务的功能。
RPM包
二进制包,安装速度块
eg
httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
i686 适合的硬件平台
e16.centos 适合的Linux平台
noarch 表示任何平台都可以安装
rpm rpm包扩展名
rpm包的依赖性较强
lsusb
查看U盘是否被读取
sudo fdisk -l
查看U盘位置
df -h
same as above
RPM包默认安装路径
/etc/
配置文件安装目录
eg.
/etc/rc.d/init.d/httpd start
service httpd start 启动apache //红帽专有命令
/usr/bin
可执行命令安装目录
/usr/lib
函数库保存位置
/usr/share/doc/
软件使用手册位置
/usr/share/man
帮助文件保存位置
源码包安装位置
/usr/local/软件名
ubuntu 启动服务
systemctl is-enabled servicename.service #查询服务是否开机启动
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态
所有服务管理命令只能服务于rpm安装的应用
源码包只能用绝对路径进行服务的管理
eg
/usr/local/apache2/bin/apachectl start
【安装源码包】
源代码安装位置
/usr/local/src/
软件安装位置
/usr/local
【关于Linux安装rpm、安装源码包的视频】
https://www.bilibili.com/video/BV1mW411i7Qf?p=36&spm_id_from=pageDriver
useradd 命令格式
useradd [选项] 用户名
-u UID 指定UID号
-d 家目录
-c 用户说明
-g 组名 初始组
-G 组名 附加组
-s shell 手工指定用户的登录shell,默认是/bin/bash
举例
useradd -u 666 -G root,bin -c "TestUser" -d /liming liming
输入时反斜杠\表示换行
usermod
-u UID 指定UID号
-c 用户说明
-g 组名 初始组
-G 组名 附加组
-s shell 手工指定用户的登录shell,默认是/bin/bash
-L 锁定用户
-U 解锁用户
* usermod -G root lamp
将lamp用户加入root组
用户默认值文件
/etc/default/useradd
密码配置文件
/etc/login.defs
passwd
直接使用可以给当前用户设置密码
whoami
查看当前用户
passwd -S 用户名
查看当前用户密码状态
-l 锁定用户
-u 解锁用户
--stdin 接收字符串为密码,密码是不安全的明文
使用字符串作为用户密码
echo "123" | passwd --stdin lamp
Ubuntu不能使用passwd的–stdin的解决办法
可以使用chpasswd
看一下man chpasswd
所以可以echo username:newoasswd | chpasswd
username是用户名,newpasswd是新密码。值得注意的是echo后面不要忘了加引号把用户名和新密码引起来
最后说一个事情,目前发现Ubuntu的16.1系统没有–stdin和/etc/rc.local,所以建议大家初学Linux不要用Ubuntu。
chage
注意不是change
用来更改用户密码状态
-l 列出详细的密码状态
-d 更改密码最后一次修改日期
-m 两次密码修改间隔天数
-M 密码有效期天数
-W 过期前警告天数
-l 密码过期后宽限天数
-E 账号失效时间
chage -d 0 user1
要求用户一登录就修改密码
userdel -r user1
删除user1用户并且抄家
id user1
查看user1的关于ID的相关信息
su root
切换到root用户,不切换环境变量
su - root
真正切换到root
su - root -c "useradd user2"
暂时切换为root执行字符串内命令
env
查看环境变量
groupadd [选项] 组名
-g GID 指定组ID
-n 新组名 修改组名
eg
groupmod -n testgrp group1
将group1的组名修改为testgrp
groupmod
groupdel 组名
删除组
删除组不能删除已存在的用户的初始组,可以删除附加组
gpsswd 选项 组名
-a 用户名 把用户加入组
-d 用户名 把用户从组中删除
ACL
df -h
dumpe2fs -h /dev/sda1
临时开启分区ACL权限
mount -o remunt,acl /
重新挂载根分区,并挂载加入acl权限
永久开启分区ACL权限
vi /etc/fstab
UUID=79fdfff1-c995-45cc-b113-576ca9d13a19 / ext4 defaults,acl 0 1
加入ACL
mount -o -remount /
重新挂载文件系统或重启系统,使得修改生效
getfacle 文件名
查看acl权限
setfacl 选项 文件名
-m 设定acl权限
-x 指定删除acl权限
eg
setfacl -x g:b_group project
-b 删除所有的acl权限
-d 设定默认acl权限
如果给父目录设定了默认ACL权限,则父目录中所有新建的子文件都会继承父目录的ACL权限,不会影响旧文件的ACL权限
setfacl -m d:u:用户名:权限 文件名
-k 删除默认acl权限
-R 递归设定acl权限
eg
setfacl -m u:_user_:rwx _folder_
setfacl -m g:a_group:rwx project
mask权限:最大有效权限
setfacl -m m:rx 文件名
删除acl权限
setfacl -b 文件名
递归ACL权限(加上-R字段)
setfacl -m u:student1:rx -R project
由ACL权限的会多一个+记号
eg
drwxrwx---+ 2 root a_group 4096 Jan 28 14:43 project/
文件特殊权限SetUID(SUID)
只有可执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x权限
命令执行者在执行程序时获得该程序文件的属主身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
增加SUID权限
chmod 4755 文件名
chmod u+s 文件名
取消SUID权限
chmod 755 文件名
chmod u-s 文件名
SGID
针对文件:
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的适合,组身份升级为程序文件的所属组
SGID权限同样只在该程序执行过程中有效,组身份改变只在执行过程中有效
针对目录:(意义不大)
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
增加SGID权限
chmod 2755 文件名
chmod g+s 文件名
取消SGID权限
chmod 755 文件名
chmod g-s 文件名
StickyBIT 赋予只能是ROOT!
SBIT 粘着位权限
只对目录有效
普通用户对该目录拥有w权限和x权限,即普通用户可以在此目录拥有写入权限
如果没有粘着位,因为普通用户由w权限,所以可以删除此目录下的所有文件。
一旦赋予了粘着位,除了root可以删除所有文件,【普通用户】就算拥有w权限,也只能是删除自己建立的文件,而不能删除其他用户建立的文件
典型粘着位文件夹:/tmp
设置方法
chmod 1755
chmod o+t
取消方法
chmod 755
chmod o-t
chattr 文件系统属性权限
chattr [+-=] [选项] 文件或目录名
+ 增加权限
- 删除权限
= 等于某权限
i选项
针对文件:不允许对文件进行删除、改名,也不能增加和修改数据。即除了读文件,对文件完全保护,对root也生效
针对目录:只能修改目录下的数据,不允许建立和删除文件
a选项:
针对文件:如果对文件设置a属性,则只能在文件中增加数据,不能删除也不能修改
针对目录:只能在目录中建立和修改文件,但是不允许删除(自己只要建了就不能删)
不能用编辑器修改文件,但是可以向文件中追加数据
lsattr 选项 文件名
查看文件系统属性,包括隐藏的
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
echo 111 >> file_t
直接向file_t写入111
sudo权限
把超级用户能执行的指令赋予普通用户
sudo的操作对象是系统命令
-l 查看能够运行的指令
#visudo
为普通用户赋予权限
其实修改的是/etc/sudoers文件
root ALL=(ALL) ALL
用户名 被管理的主机地址_即本网络任何地址=(可使用的身份) 授权命令(绝对路径)
eg
授权sc用户重启服务器
sc ALL=/sbin/shutdown -r now
sc 192.168.10.123=/sbin/shutdown -r now
192.168.10.123 是被管理的计算机的IP
sudo /usr/bin/vim
普通用户直接使用sudo vim不可以使用命令,要使用sudo /usr/bin/vim
主分区:总共最多只能分四个
扩展分区:只能有一个,也算主分区一种,主分区加扩展分区最多有四个。
扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用
逻辑分区:逻辑分区在扩展分区中划分,如果是IDE硬盘,Linux最多支持59个逻辑分区,SCSI最多支持11个
主分区或扩展分区 sda1 sda2 sda3 sda4
逻辑分区 sda5 sda6 ...
ext2
ext文件系统的升级版本,最大支持16TB分区和最大2TB文件
ext3
相比于ext2追加了日志功能,提高了系统可靠性
ext4
最大支持1EB(=1024PB=1024^2TB)分区,和16TB文件,相比与ext3有极大的提高
<文件系统常用命令>
df
显示所有文件系统信息
-h 使用习惯单位表示容量
-a 显示包括特殊文件系统的所有信息
从文件系统考虑,不仅考虑文件占用的空间,还考虑被命令和程序占用的空间
统计文件大小+系统和进程占用的资源(包括临时文件)
du
统计目录及子目录占用空间
-a 显示每个子文件
统计所有文件大小
fsck
文件系统修复命令(开机会自动执行)
-a 不用显示用户提示,自动修复
-y 自动修复
fdisk -l
dumpe2fs
检测磁盘状态
mount -l
查看系统中已挂载设备 -l显示卷标名称
mount -a
根据配置文件/etc/fstab的内容自动挂载
光盘移动硬盘等不可以自动挂载
mount -o remount,noexec /home
重新挂载/boot分区并使用noexec权限
【挂载光盘步骤】
#mkdir /mnt/cdrom
#mount -t iso9660 /dev/cdrom /mnt/cdrom
#mount /dev/dr0 /mnt/cdrom
由于cdrom实际上时sr0的软连接,所以需进一步挂载
umount /dev/sr0
【挂载U盘】
#fdisk -l
查看U盘设备文件名
#mount -t vfat /dev/sdb1 /mnt/usb/
Linux默认不识别NTFS
【使用NTFS分区】
1 下载并安装ntfs-3g插件
2 安装NTFS-3G
#tar -zxvf nfts-3g_ntfsprogs-2013.1.13.tgz
#cd ntfs-3g_nftsprogs-2013.1.13
#./configure
编译器准备。没有指定安装目录,安装到默认位置中
#make
编译
#make install
编译安装
3 #mount -t ntfs-3g 分区设备文件名 挂载点
【Shell】
C Shell BSD版Unix中使用,语法和C类似(csh,tcsh)
Bourne Shell sh,ksh,Bash,psh,zsh,Linux主要用Bash
Bash与sh兼容
Linux支持的Shell
/etc/shells
echo
输出命令
echo 'Hello World!'
感叹号字符需用单引号包围,否则出现错误
-e
输出并处理特殊字符
\a 发出警告音
\\ 输出\
\b 退格
\e 输出颜色
\e[13;31m 输出的字符 \e[0m
31m:红色
30m:黑色
37m:白色
33m:黄色
-n
不换行输出
#!/bin/Bash
Bash脚本必要标识
dos2unix hello.sh
将hello.sh从dos格式转换到unix格式
脚本执行方式
./hello.sh
#history
查看历史命令
历史命令默认保存1000条,通过/etc/profile进行修改条目,重新登录以生效
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~.bash_history
#!历史命令序号
!203
执行历史记录中203条命令
#!!
执行上一条命令
#!ser
执行最后一条ser开头的命令
#alias
为命令取别名
eg
alias vi='vim'
让别名永久生效
vi /root/.bashrc
vi /home/user1/.bashrc
命令执行时的顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找命令
echo $PATH
快捷键
Ctrl+
C 强制终止当前程序
L 清屏
U 删除或剪切光标之前的命令
K 删除或剪切光标之后的命令
Y 粘贴剪切的内容
R 在历史命令中搜索
D 退出终端
输入输出重定向
设备
键盘
/dev/stdin
文件描述符 0
标准输入设备
显示器
/dev/stdout
文件描述符 1
标准输出设备
显示器
/dev/stderr
文件描述符 2
标准错误输出
输出重定向
标准输出重定向
命令>文件 以覆盖方式把命令正确输出到指定的文件或者设备当中
命令>>文件 以追加的方式把命令正确输出到指定的文件或者设备当中
eg
ls >> abc
标准错误输出重定向
错误命令2>文件 以覆盖方式把命令正确输出到指定的文件或者设备当中
错误命令2>>文件 以追加的方式把命令正确输出到指定的文件或者设备当中
2和>之间不能有空格
正确输出和错误输出同时保存
命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存在同一文件中
命令 >> 文件 2>&1 追加的方式,把正确输出和错误输出都保存在同一文件中
命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存在同一文件中
命令 &>> 文件 以追加的方式,把正确输出和错误输出都保存在同一文件中
命令 >> 文件1 2>> 文件2
如果正确放入文件1
如果错误放入文件2
eg
ls &>/dev/nul
输入重定向
wc [选项] [文件名]
-c 统计字节数
-w 统计单词数
-l 统计行数
eg
wc < file.txt
将文件输入给wc进行统计
多命令顺序执行
; 多个命令顺序执行,命令之间没有任何逻辑关系
&& 逻辑与,当命令1正确执行,命令2则执行,否则不执行
|| 逻辑或,当命令1不正确执行,命令2则执行,否则不执行
eg
ls &> /dev/null && echo yes || echo no
./configure && make && make install
dd命令
dd if=输入文件或设备 of=输出文件或目标设备 bs=字节数 count=个数
eg
date ; dd if=/dev/zero of=/root/testFile bs=1k count=10000 ; date
管道符
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
eg
ls -lh -a /etc/ | more
netstat -an | grep 522
grep [选项] “搜索的内容”
-i 忽略大小写
-n 输出行号
eg
grep "root" /etc/passwd
通配符
?
匹配一个字符
*
匹配0个或任意多个字符
[]
匹配括号中任意一个字符[abc]表示可以匹配a或者b或者c
[-]
匹配括号中任意一个字符,-代表一个范围[a-z]表示匹配任意一个小写字母
[^]
逻辑非,表示匹配的过滤掉括号中的字符,比如[^0-9]表示过滤掉数字
特殊符号
'' 单引号中的所有特殊符号都没有特殊意义
"" 双引号中的所有特殊符号都没有特殊含义,但是$和·和\有特殊含义
$() 和反引号作用相同
# 注释
`` 反引号括起来的是系统命令
\ 使得之后的特殊符号失去作用
eg
#name=sc
#echo $name
#echo '$name'
#echo "$name"
#echo ls3
#echo `ls`
#echo $(ls)
变量
变量名不可以以数字开头
Bash中默认的类型均为字符串型,如需进行数值运算,必须进行指定
等号两侧不能加空格
变量的值如果有空格,请用引号
用户自定义变量
环境变量
用户自定义变量只在当前的Shell中生效
环境变量在当前Shell和这个Shell的所有子Shell当中生效
如果把环境变量
位置参数变量
变量名不能自定义
变量作用固定
预定义变量
Bash中已经定义好的变量
变量不能自定义
变量作用固定
some examples :
#aa=123
#echo $aa
#aa="$aa"456
#echo $aa
#aa=${aa}789
#echo $aa
set
查看所有变量
env
查询变量
unset
删除变量
设置环境变量
export 变量名=变量值
用户自定义变量只在当前的Shell中生效
环境变量会在当前Shell和这个Shell的所有子Shell中生效
如果把环境变量写入相应配置文件,则该环境变量就会在所有的Shell中生效
eg
#export age=18 声明一环境变量
#sex=male 声明一个本地变量
#export sex 将本地变量声明为环境变量
PATH:系统查找命令的路径
#echo $PATH
PATH变量的叠加:(临时生效,重启消失,如需永久生效请修改配置文件)
PATH = "$PATH":/root/sh
定义系统提示符的变量
\d
显示日期
\h
显示简写主机名
\t
显示24小时时制时间
\$
显示时间,并且显示上午还是下午
echo $PS1
显示系统提示符的定义方式
定义系统提示符
eg.
PS1='[\u@\t \w]\$'
$变量名
返回定义的变量
set
查看所有变量
位置参数变量
$n
n为数字$
$0代表命令本身,$1-$9代表第1-9个参数,10个以上用${10}
$*
代表命令行所有参数
$@
这个变量也代表命令行中的所有参数,不过$@把每个参数区分对待
$#
代表命令行中所有参数的个数
p.eg(program.example)
#!/bin/bash
for i in "$*"
do
echo $i
done
for y in "$@"
do
echo $y
done
简单加法计算器
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1 + $num2))
echo $sum
千万注意不能加空格
双括号才能进行标准运算
预定义命令
$?
最后一次执行的命令的返回状态
如果返回0说明正确执行,否则不正确
$$
进程号
$!
后台运行的最后一个进程的进程号
接收键盘输入
read
-p "message"
在等待read输入时,输出提示信息
-t 秒数
read命令等待用户输入,可以指定等待时间
-n 字符数
read只接受指定的字符数才会执行
-s
隐藏输入的数据,用于输入机密信息
declare
声明变量类型
- 设定类型
+ 取消类型
-i 设定为整数
-x 设定为环境变量
-p 显示指定变量的类型
expr或let数值运算工具
dd=$(expr $aa + $bb)
+号左右两侧必须有空格
$((运算式))
$(系统命令)
$(($aa+$bb))
加号左右可以不加空格
eg
echo $((33+44))
p.eg
unset y
#删除变量y,不管原先状态
x = ${y-new}
#进行测试
echo $x
#因为变量y不存在,所以x=new,如果存在则为y
linux按了ctrl+s怎么办
ctrl+q恢复
关于环境变量配置文件
/etc/profile
USER变量
LOGNAME变量
PATH变量……
umask
调用/etc/profile.d/*.sh文件
**对所有用户生效
/etc/bashrc
PS1变量
umask
PATH变量
调用/etc/profile.d/*.sh文件
/etc/profile.d/lang.sh
当前系统语言
调用/etc/sysc config/i18n
~/.bash
对登录用户生效
~/.bash_profile
对登录用户生效
~/.bashrc
对登录用户生效
定义系统别名
其他配置文件
~/.bash_logout
~/bash_history
/etc/issue
本地终端欢迎信息(只支持本地!)
转义字符:
\n
显示主机名
\l
显示登录的终端号
/etc/isssue.net
转义字符在该文件中无法使用
/etc/ssh/sshd_config中配置是否生效(banner字段),然后通过service sshd restart来正式生效
/etc/motd
不管是本地还是远程登录都可以显示该欢迎信息
该欢迎信息是输入完密码后显示的欢迎信息
source命令
强制让当前环境变量立即生效,而不是重启后生效
#source 配置文件
#.配置文件
~/.bashrc
~表示家目录,只对当前用户生效
【正则表达式】
可以使用正则表达式的命令
grep #在文件当中提取符合的字符串
awk
sed
基础正则表达式
*
前一个字符匹配0次或任意多次
eg
a*
.
匹配除了换行符外任意一个字符
^
行首,^hello 匹配以hello为首的任意行
hello$
匹配以hello结尾的任意行
[aoeiuv]
匹配aoeiuv中任意一个字符
[0-9]
匹配任意一个数字
[a-z][0-9]
匹配任意一个小写字母和任意一个数字的组合
[^0-9]
匹配任意一位非数字字符
[^a-z][^0-9]
非小写字母和一个非数字的组合
\
转义字符,用于将特殊符号的含义取消
\{n\}
表示之前的字符恰好出现n次
[0-9]\{4\}
匹配四位数字
[1][3-8][0-9]\{9\}
匹配手机号码
\{n,\}
表示前面的字符的出现不小于n次
[0-9]\{2,\}
表示两位及以上数字
\{n,m\}
至少出现n次,最多出现m次
[a-z]\{6,8\}
匹配6到8位小写字母
(?!abc)
不包含abc
^((?!abc).)*$
正则表达式是包含匹配,通配符是完全匹配
[测试用]
grep "size" /root/anaconda-ks.cfg
包含size的文本行
a*
所有文本
aa*
至少包含一个a的行
aaa*
至少包含两个连续的a的行
.*
匹配任意字符重复任意多次
a.*d
a和d之间任意字符
^[^0-9]
非数字开头的行,不匹配空白行
[a-zA-Z]
所有字母
\.$
以点结束的行
【指令杂记】
cat /root/anaconda-ks.cfg
查看安装记录
cut命令
字段提取
和grep的区别:
grep:文件中提取符合条件的行
cut:文件中提取符合条件的列
cut -f 列号
提取第几列
cut -d 分隔符
手工指定分隔符
eg
cut -d ":" -f 1 /etc/passwd
提取passwd中的第一列,分隔符为:
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
printf命令
printf %s 1 2 3 4 5 6
每一个为一组输出
printf %s %s %s 1 2 3 4 5 6
只输出最后一个%s
printf '%s %s %s' 1 2 3 4 5 6
每三个为一组输出
printf '%s %s %s\n' 1 2 3 4 5 6
printf '%s' 1 2 3 4 5 6
printf '%s' $(cat /etc/profile)
无换行输出
printf '%s\t %s\t %s\t %s\t \n' $(cat student.txt)
自行调整格式输出
printf不接收管道符,printf不接收文件名
print命令(awk中使用,系统不支持)
printf不会自动加换行符
print会自动加换行符
awk命令
提供比cut更强大的功能
awk '条件1 {动作1} 条件2 {动作2} ...' 文件名
条件 Pattern :
x > 10
动作 Action :
格式化输出
流程控制语句
eg
awk '{printf $2 "\t" $6 "\n"}' student.txt
$2:文件第2列
awk '{print $2 "\t" $6 ""}' student.txt
$2:文件第2列
awk 'BEGIN{printf"This is a transcript \n"}{printf $2 "\t" $6 "\n"}' student.txt
awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd
BEGIN:在所有的命令执行前执行
END:在所有的命令执行后执行
FS:内置变量,自定义分隔符,默认分隔符是空格或制表符
awk 'BEGIN{FS=":"}END{printf "【THE END】"}{print $1 "\t" $3}' /etc/passwd
awk '$4 >= 50 {printf $2 "\n"}' test.txt
sed命令
轻量级流编辑器
主要用来将数据进行选取、替换、删除、新增
行号从1开始而不是0
Options
-n 将经过sed命令处理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
具有一定危险性 54若55
Actions
a
追加
append
\表示数据输入未完成
sed '2a hello' test.txt
在第二行后追加hello
c
行替换
change
sed '2c OH MY GOD' test.txt
i
插入
insert
sed '2i insertTest \
test2 test3' test.txt
d
删除
delete
sed '2,4d1' test.txt
删除2到4行
p
打印
print_
输出指定行
sed -n '2p' test.txt
不加-n会输出指定行和所有行
df -h | sed -n '2p'
s
字符串替换
substitute
sed 's/旧字符串/新字符串/g' 文件名
sed 's/Dick/John/g' test.txt
sort命令
排序命令
选项
-f
忽略大小写
-n
以数值型进行排序,默认使用字符串型排序
-r
反向排序
-t
指定分隔符
sort -t ":" -k 3,3 /etc/passwd
指定分隔符为":",用第三字段开头,用第三字段结尾排序,就是只有第三字段排序
此时排序的对象依然被视为字符串
sort -n -t ":" -k 3,3 /etc/passwd
同上不过视为数值
-k n[,m]
eg
sort /etc/passwd
排序用户信息文件(a-z)
sort -r /etc/passwd
反向排序(z-a)
wc命令
用于统计
输出结果为:行 单词 字符
-l
只统计行数
-w
只统计单词数
-m
只统计字符数
eg
df -h | wc
条件判断
Options
-b
块设备
-c
字符设备
-d
目录
-e
判断文件是否存在(exist)
-f
普通文件
-L
符号链接
-p
管道文件
-s
空
-S
套接字文件
Format
test -options 文件名
[ -options 文件名]
ActualUsage
使用echo $?来查看最后一次命令的执行状态来判断文件是否存在,0为存在,其他为不存在
[ -d /root ] && echo "yes" || echo "no"
&& : 前方真则执行
|| : 前方假则执行
文件权限判断
-r
有读权限
-w
有写权限
-x
有执行权限
文件之间比较
file1 -nt file2
1比2新吗
file1 -ot file2
1比2旧吗
file1 -ef file2
1比2的 lnode号 一致吗
判断两文件是否为同一文件,可用于判断硬链接
数值比较
num1 -eq num2
相等
num1 -ne num2
不相等
1 -gt 2
1大于2
greater
1 -lt 2
1小于2
lighter
1 -ge 2
大于等于
greater || equal
1 -le 2
小于等于
lighter || equal
字符串比较
[ -z "$name"] && echo yes || echo no
-z 为空返回真
-n 非空返回真
[ "$aa" == "$bb" ] && echo yes || echo no
多重条件判断
判断1 -a 判断2
同时成立为真
判断1 -o 判断2
一个成立就为真
!判断
使得原始判断式取反
date命令
date
显示当前时间
date +%y
显示年
date +%y-%m-%d
以 年-月-日 显示时间
date -s 04:59:30
更改当前时间为59分30秒
useradd
passwd user1
为user1创建密码
who
登录用户名 登录终端 登录时间(登录的主机IP)
tty 本地登录
pts 远程终端
uptime
连续运行时间
w
详细信息
【文件压缩】.tar.gz / .gz / .zip / .bz2
gzip 文件名
压缩
只能压缩文件,不能压缩目录
gunzip 文件名 / gzip -d 文件名
解压缩
tar -cvf 压缩后文件名.tar 需要压缩的目录
(建议加上后缀名便于识别压缩文件)
-c打包
-v显示详细信息(可省略)
-f显示文件名
-z打包并压缩
-zx解包并解压缩
tar -zcf testFolder.tar.gz TestFolderT2
在testFolder.tar.gz后面可加多个空格和文件名来压缩多个文件
tar -zxvf testFolder.tar.gz
解压缩
tar -ztvf testFolder.tar.gz
之查看,不解压缩
zip
-r 压缩目录
unzip
bzip2
-k 压缩文件后保留原文件(默认不保留)
bunzip2
-k 保留压缩包(默认不保留)
Linux用户管理
/etc/passwd 基本用户信息配置文件
查看帮助:#man 5 passwd
用户名称:密码标识:用户UID:用户组GID:用户备注:用户家目录:Shell
密码标识
查看密码是否存在
x:表示用户有密码
UID
0 超级用户
一旦用户UID被改为0,该用户就变成root用户
1-499 系统用户(伪用户)
500-65535 普通用户
用户组
初始组
一般和用户名同名
附加组
用户可以加入其他的用户组
用户家目录
用户进入终端的默认目录
/home/用户名 二级目录
/root/ 一级目录
Shell
标准Shell:/bin/bash
系统禁止登录Shell:/sbin/nologin
/etc/shadow 查看密码文件
只有root有权限查看shadow
字段号 说明
1 用户名
2 SHA512散列加密密文(如果为*或者!!表示没有密码)
3 密码最后一次修改日期(1970年1月1日开始到今天经过的天数)
4 两次密码修改间隔(默认为0)
5 密码有效期(99999即永久生效),到了有效期将警告修改密码
6 密码到期警告时间(在有效期前的警告天数)
7 密码到期宽限时间(在有效期后的警告天数,警告结束则封禁),如果写-1表示永久生效
8 时间戳表示的账号失效时间(到了时间戳就失效,优先级最高)
9 保留
/etc/group
字段号 说明
1 组名,默认和用户名相同
2 组密码标识 /etc/gshadow 保存真正组密码
知道组密码的人可以管理组内用户,有一定安全隐患
3 GID,组ID
4 组中附加用户
/home/用户名
所有者和所属组都是此用户
/var/spool/mail
/var/ 可变数据保存目录
/etc/skel
模板目录
时间戳和日期转化
date -d "1970-01-01 365 days"
echo $(($(date --date="2021-01-01" +%s)/86400+1))
vim tab键空格数量规定
Ubuntu安装deb
dpkg -i
安装
安装包的安装文件夹
/opt/
dpkg -r
关于mNetAssist无法启动问题
add-apt-repository ppa:linuxuprising/libpng12
apt update
apt install libpng12-0
ps aux
查看当前进程
ubuntu安装apache服务器
1 安装
sudo apt install apache2 -y
2 检查服务是否启动
systemctl status apache2
3 常用apache命令
/etc/init.d/apache2 start
启动服务
/etc/init.d/apache2 stop
停止服务
/etc/init.d/apache2 restart
重启服务
Apache修改网站根目录及默认网页
我们来试着修改web服务器的配置,让我们可以在自己搭建的web服务器上访问到自己规定的数据:
修改根目录
在 /etc/apache2/sites-available 中修改 000-default.conf 中的DocumentRoot /var/www/ 修改为想要的目录
比如:DocumentRoot /var/www/html/mainpage
执行命令:
vim /etc/apache2/sites-available/000-default.conf
1
修改000-default.conf中的DocumentRoot /var/www/,如下
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html // 一般我们默认为这个作为网站的根目录
1
2
接下来重启apache 即可
sudo apache2ctl -k restart
1
修改默认网页为自己想要的页面
修改/etc/apache2/mods-available/dir.conf中的内容
执行命令:
vim /etc/apache2/mods-available/dir.conf
1
原来是:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
1
2
3
添加上想要的/wordpress就行啦~
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm /wordpress
</IfModule>
1
2
3
实际上在这里添加文件或目录的意思是,用于我们允许http请求访问到/var/www/html下的改文件或目录中的内容的意思:
例如我添加了test这个目录
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm /test
</IfModule>
1
2
3
在再里面添加个名为index.html的文档,写入“Hello World!”,于是我们便可通过IP地址+/test/index.html访问到
Ubuntu设置PS1提示符
永久生效:在用户家目录下的.bashrc进行修改
暂时生效:#PS1="..."
修改位置:PS1=${debian_chroot:+($debian_chroot)}\u@\h:\w\$
/u 当前登录用户名
/h 当前计算机名称(譬如ubuntu)
/H 当前计算机的域名全程,譬如(ubuntu.ubuntu.com)
/w 当前目录的完整路径。家目录会以~代替
/W 利用basename取得工作目录名称,所以只会列出最后一个目录
/,root用户为>
时间显示
/t 当前时间(24小时制,HH:MM:SS 分别代表 小时:分钟:秒)
/T 当前时间(12小时制)
/@ 当前时间(AM/PM显示)
/d 当前日期
Shell信息:
/v Bash版本
/V Bash的发布版本号
/S Shell名称
/! Bash命令的历史编号
/j job序号
/l Shell的终端名称
修改后重新加载配置文件:
source .bashrc
PS1颜色设置参数
在PS1中设置字符颜色的格式为:\[\e[F;Bm\]........\[\e[0m\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47,\[\e[0m\]作为颜色设定的结束。
颜色对照表:
F B
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
只需将对应数字套入设置格式中即可。
比如要设置命令行的格式为绿字黑底(\[\e[32;40m\]),显示当前用户的账号名称(\u)、主机的第一个名字(\h)、完整的当前工作目录名称(\w)、24小时格式时间(\t),可以直接在命令行键入如下命令:
# PS1='[\[\e[32;40m\]\u@\h \w \t]$ \[\e[0m\]'
ubuntu查看服务
service --status-all
【流程控制】
if语句
1
if [ 条件判断式 ];then
程序
fi
2
if [ 条件判断式 ]
then
程序
fi
3
if [ 条件判断式 ]
then
程序
else
程序
fi
4
if [ 条件判断式 ]
then
程序
(如果企图提前终止判断,使用exit)
elif [ 条件判断式 ]
then
程序
[ 条件判断式 ] 本质是test判断
eg
统计分区使用率的脚本
#!/bin/bash
rate =$(df -h | grep "/dev/nvme0n1p3" | awk '{print $5}' | cut -d "%" -f 1 )
#将根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ]
then
echo "Your disk is almost full !"
else
echo "Disk free space : %$rate"
fi
备份/etc目录到/tmp/testFolder目录
#!/bin/bash
ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间
date=$(date +%y%m%d)
#备份时间
size=$(du -sh /tmp/testFolder)
#目录大小
if [ -d /tmp/testFolder ]
then
echo "Date : $date!" > /tmp/testFolderBackupInfo.txt
# > 表示覆盖
echo "Date size : $size" >> /tmp/testFolderBackupInfo.txt
cd /tmp
tar -zcf folderBackup-$date.tar.gz /tmp/testFolder testFolderBackupInfo.txt &>/dev/null
# 命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存在同一文件中
rm -rf /tmp/testFolderBackupInfo.txt
#Info文件打入包中后舍弃
判断apache是否启动
#!/bin/bash
port=$(nmap -sT 192.168.10.115 | grep tcp | grep http | awk '{print $2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port" == "open" ]
then
echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpd start &>/dev/null
echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi
判断文件类型
read -p "please enter a file name" file
#将用户输入的字符串赋予变量file
if [ -z "$file" ]
#判断file是否为空
then
echo "Error,please input a file name !"
exit 1
elif [ ! -e "$file" ]
then
echo "Your input is not a file !"
exit 2
elif [ -f "$file" ]
then
echo "It's a normal file ."
elif [ -d "$file" ]
then
echo "It's a directory ."
else
echo "I don't know this thing ."
fi
case语句
case $变量名 in
"值1")
程序
;;
"值2")
程序
;;
"值3")
程序
;;
*)
其他值都不符合时执行该程序
;;
esac
eg
判断输入
#!/bin/bash
read -p "Please enter y/n" -t 30 cho
case $cho in
"y")
echo "Yes , good luck !"
;;
"no")
echo "No ? ok !"
;;
*)
echo "You entered something else"
;;
esac
for循环
1
for 变量 in 值1 值2 值3
#值1 值2 值3 依次赋值给 变量
do
程序
done
2
for (( 初始值;循环条件;变量变化 ))
do
程序
done
eg
批量解压缩脚本
#!/bin/bash
cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /lamp/ls.log
从1加到100
#!bin/bash
s=0
for (( i=1;i<=100;i=i+1 ))
do
s=$(( $s+$i ))
done
echo "sum: $s"
while循环
语法
while [ 条件判断式 ]
do
Program
done
eg
1加到100
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "sum: $s"
until循环
不成立则一直循环,与while相反
语法
until [ 条件判断式 ]
do
Program
done
eg
1加到100
#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=(( $s+$i ))
i=(( $i+1 ))
done
Linux Shell中的美元符号
$0 shell的命令本身(包括完整路径)
$1到$9 数字表示shell 的第几个参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同。
$- 显示shell使用的当前选项。
$? 显示最后命令的执行状况。0表示没有错误。
Shell脚本语言:
不适合大量运算
运行前编译
CentOS安装Apache
yum install httpd
【服务管理】
服务的分类
RPM包默认安装的服务
独立的服务
服务响应快
常驻内存
基于xinetd的服务
不占内存
响应慢
源码包安装的服务
源码包安装在指定位置,一般在/usr/local
相关命令
#chkconfig --list
查看服务自启动状态
可以看到所有RPM包安装的服务
#ps aux
查看所有运行的进程
关于RPM包的独立服务相关路径
/etc/init.d
或者/etc/rc.d/init.d
实质上是/etc/init.d的软链接
/etc/sysconfig/
初始化环境配置文件位置
/etc/
配置文件位置
/etc/xinetd.conf
xinetd配置文件
/etc/xinetd.d/
基于xinetd服务的启动脚本
/var/lib/
服务产生的数据(可变数据)放在这里
/var/log
日志
独立服务的手动启动
方式1
/etc/init.d/独立服务名 start|status|stop|restart
方式2
service 独立服务名 start|status|stop|restart
#非标准启动方式
独立服务的自启动
方式1
chkconfig
ubuntu系统:
systemctl
systemctl list-unit-files --type=service|grep enabled
禁用服务:
sudo systemctl disable apache2.service
方式2
/etc/rc.d/rc.local
登陆之前都会执行一遍
方式3
使用ntsysv命令管理自启动
yum install ntsysv
红帽专有
xinetd服务
xinetd:超级守护进程
基于xinetd的服务逐渐减少,xinetd的安全性可能不佳,所以现有linux不会预装
xinetd不是独立服务,不可以通过service启动
xinetd启动方式:
vim /etc/xinetd.d/telent
将diable字段改为no
进程管理
进程管理的作用
判断服务器的健康状态
#ps aux
使用bsd操作格式
进程属性说明
VSZ
占用虚拟内存大小 单位KB
RSS
占用实际物理内存大小 单位KB
TTY
进程实在哪个终端运行的
tty1-tty7 本地控制台终端
其中tty1-tty6是本地字符界面终端,tty7为图形界面终端
pts/0-256 虚拟终端(远程登录终端)
STAT
进程状态
R 运行
S 睡眠
T 停止
s 包含子进程
+ 位于后台
START
进程启动时间
超过一天显示日期
TIME
进程占用CPU运算时间
COMMAND
进程名
#ps -le
使用Linux标准命令格式查看进程
#top [选项]
每三秒更新一次进程列表
top - 10:33:17 up 6 days, 16:36, 2 users, load average: 0.19, 0.20, 0.21
#top - 当前时间|运行时间(天数、小时、分钟)| 当前登录用户数 | 1分钟、5分钟、15分钟的平均负载(整数1为一颗核心满载)
Tasks: 218 total, 1 running, 217 sleeping, 0 stopped, 0 zombie
#218个进程,1个在运行,217个睡眠,0个停止,0个僵尸进程(如果不是0,需要手工检查)
#僵尸进程:正在启动还未完全启动
%Cpu(s): 2.3 us, 1.8 sy, 0.0 ni, 95.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
#行为CPU信息
95.8 id 表示 95.8%空闲率
us 用户模式cpu占用
sy 系统模式cpu占用
ni 改变过优先级的用户进程占用的cpu
wa 等待输入或输出的进程占用的cpu
hi 硬中断请求服务占用的cpu
si 软中断请求服务占用的cpu
st 虚拟时间百分比,即有虚拟机时,虚拟cpu等待实际cpu的时间百分比
MiB Mem : 7857.4 total, 4213.5 free, 684.8 used, 2959.2 buff/cache
内存信息
MiB Swap: 1359.6 total, 1359.6 free, 0.0 used. 6772.2 avail Mem
交换分区信息 | 总大小 | 空闲的大小 | 已经使用的大小
选项
-d 秒数
指定每隔多少秒更新
?或h
显示帮助
P
以cpu使用率排序
M
以内存使用率排序
N
以PID排序
q
退出top
#pstree
查看进程树
-p
显示进程PID
-u
显示进程所属用户
#kill -进程信号 进程id号
进程信号
1 重启进程
9 强制终止
15 默认终止,在默认终止无效时,可以选择9
#killall
-9 进程名
强制终止
eg
killall -9 apache2
-i 交互式,询问是否杀死
-I 忽略进程名大小写
#pkill
pkill -9 apache2
w命令
查看登录的用户
踢出用户:
1
w命令查看用户TTY
2
pkill -9 -t 用户TTY号
【工作管理】
把进程放入后台
1 [放入后台继续运行]在命令结尾加入&符号
tar -zcf etc.tar.gz /etc &
2 [放入后台暂停运行]在命令执行过程中按下ctrl+z
查看后台工作
#jobs
-l:显示工作的pid
+号表示最近一个放入后台的工作,也是工作恢复时默认恢复的工作
-号表示倒数第二个放入后台的工作
恢复工作到前台
#fg %工作号
工作号可以省略,fg 1代表恢复第一个工作
#bg
把暂停的工作在后台继续运行
但是例如top等必须和用户交互的进程将不会继续运行,仍然保持暂停
vi和vim的区别
1、多级撤消
在vi编辑器中,按u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
vi编辑器只能运行于unix中,而vim不仅可以运行于unix,还可用于windows、mac等多操作平台。
3、语法加亮
vim可以用不同的颜色来加亮你的代码。
【系统资源查看】
#vmstat [刷新延时 刷新次数]
#vmstat 2 3
每隔2秒刷新一次,刷新3下
#dmesg
开机时检测内核信息
#dmesg|grep CPU
查看CPU相关的开机信息
#free
查看内存使用状态
-b
单位 字节
-k
单位KB
-m
单位MB
-g
单位GB
缓冲buffer和缓存cache
cache:
用来加速数据从硬盘中读取
buffer:
用来加速数据写入到硬盘
#cat /proc/cpuinfo
查看cpu信息
#uptime
看top命令第一行
#uname 选项
-a
查看系统所有相关信息
-r
查看内核版本
-s
查看内核名称
#file /bin/ls
判断当前系统位数(32位还是64位)
#lsb_release -a
查询Linux的发行版本
#lsof [选项]
-c 字符串
列出以字符串开头的进程打开的文件
-u 用户名
列某个用户的进程打开的文件
-p pid
列出某个PID进程打开的文件
file命令
判断文件类型
【系统定时任务】
crond服务
service crond restart
chkconfig crond on
* * * * *
第n个星 代表含义 范围
1 分钟 0-59
2 小时 0-23
3 日 1-31
4 月 1-12
5 周 0-7 (0和7都代表周日)
特殊符号
*
代表任何时间
45 22 * * * 命令
在每天22点45分执行
0 17 * * 1
每周1的17点整执行
,
代表不连续时间
0 0 1,15 * 1
每月的1号和15号的0点0分 和 每周1的0点0分 都会执行
-
代表连续的时间范围
*/n
代表每隔多久执行一次
*/10 * * * * 表示每隔10分钟执行一次
举例
*/5 * * * * /bin/echo "11" >> /tmp/test
每5分钟写11到/tmp/test
5 5 * * 2 /sbin/shutdown -r now
每周二的5点5分重启
【日志管理】
rsyslogd
查看rsyslogd是否在运行
ps aux | grep rsyslogd
查看rsyslogd服务
systemctl list-unit-files | grep rsyslog
日志文件
/var/log/cron
记录了系统定时任务相关的日志
/var/log/cups/
记录了打印信息的日志
/var/log/dmesg
记录了系统在开机时的内核自检信息,可以用dmesg命令查看该信息
/var/log/btmp
记录错误登录的日志,该文件为二进制文件,不可以直接查看,而使用lastb命令查看
/var/log/lastlog
记录系统中所有用户最后一次的登录时间的日志,该文件为二进制文件,不可以直接查看,而使用lastlog命令查看
/var/log/mailog
记录邮件信息
/var/log/message
记录系统重要信息的日志。该日志会记录Linux系统的绝大多数重要信息。如果系统出现问题,请查看该日志
/var/log/secure
记录验证和授权方面的信息,只要涉及账户和密码都会记录
/var/log/wtmp
永久记录所有用户登录和注销信息,同时记录重启、关机事件。不能直接查看,请使用last命令查看
/var/run/utmp
记录当前已经登录的用户信息
其他关于
RPM安装的软件的日志会放在/var/log/中
eg.var/log/httpd apache日志文件目录
源码包安装的不会
关于systemctl
systemctl 命令兼容 service
日志文件的格式
列 信息
1 日志发生时间
2 发生日志的主机名
3 发生日志的服务名或主机名
4 日志具体信息
/etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
服务名称[连接符号]日志等级 日志记录位置
认证相关服务.所有日志等级 记录在/var/log/secure日志中
关于连接符号
*
代表所有日志等级
.
只要比后面等级高的(包含该等级)日志都要记录下来
.=
代表只记录所需等级的日志,其他等级都不记录
.!
代表不等于,即除了该等级的日志外,其他等级的日志都记录
日志记录位置
/var/log/secure
日志文件的绝对路径
/dev/lp0
系统设备文件
@192.168.0.210:514
远程转发给主机
用户名
如root
忽略或丢弃日志,如"~"
日志轮替
产生新日志覆盖旧日志
日志文件名的命名规则
如果配置文件中有dateext参数,则日志会用日期作为日志文件的后缀
logrotate配置文件
参数 说明
daily 每日轮替,即备份一天的日志
weekly 每周轮替,即备份一周的日志
monthly 每月轮替,即备份一月的日志
rotate 数字 保留的日志文件个数,0指没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组,如create 0600 root utmp
mail address 日志轮替时,将输出内容通过邮件发送到指定邮件地址
missingok 日志不存在,忽略警告
minsize 大小 日志轮替的最小值
size 大小 日志大于指定大小轮替
eg
将apache日志加入轮替
/usr/local/apache2/logs/access_log{
daily
create
rotate 30
}
logrotate命令
logrotate [选项] 配置文件名
-v
显示日志轮替过程
-f
强制进行日志轮替,不管是否符合轮替条件
启动管理
系统运行级别
级别1-6(见上)
更改系统默认运行级别
#vim /etc/inittab
id:3:initdefault:
系统运行过程
启动引导程序grub
/etc/grub.conf
实际上是一个指向 /boot/grub/grub.conf的软链接
default=0
表示默认启动0
timeout=5
超时时间5秒
【备份和恢复】
重要目录
/root
/home
/var/spool/mail
/etc
...
备份类型
完全
增量
差异
备份命令
#dump -options fileNameAfterBackup originalFile
options
-level
指明备份级别
-f 文件名
指定备份之后的文件名
-u
备份成功后将备份时间记录在/etc/dumpdates中
-v
显示备份过程中更多的输出信息
-j
调用bzlib库压缩备份文件,即将备份文件压缩为.bz2格式
-W
显示允许被dump的分区的备份等级和备份时间
eg
dump -0ug -f /root/boot.bak.bz2 /boot/
cat /etc/dumpdates #查看备份时间和文件
cp install.log /boot/ #复制日志文件到boot分区
dump -1uj -f /root/boot.bak1.bz2 /boot/ #增量备份/boot分区并压缩
dump -W #查询分区的备份时间和备份级别
注意事项
dump命令只有在备份分区时可以增量备份,对于文件作增量备份会报错
#restore
模式选项
-C
比较备份数据和实际数据的变化
-i
进入交互模式,手工选择需要恢复的文件
-t
查看模式,用于查看备份文件中拥有哪些数据
-r
还原模式,用于数据还原
一般选项:
-f
指定备份文件的文件名
eg
mv /boot/vmlinuz-2.6.32-279.e16.i686 /boot/vmlinuz-2.6.32.279.e16.i6h6.bak
restore -C -f /root/boot.bak
Linux学习笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 一、命令基本格式 命令提示符 当登录linux系统时,最常见的命令就是:** [root@bogon ~]#**其...
- 前言 find命令是我们日常工作中比较常用的Linux命令。全面的掌握这个命令可以使很多操作达到事半功倍的效果。 ...