一些学习中的随笔小记(一)
记录一些平时学习中零碎的知识点
1.mysql中查询数据库
常见的是
show databases;
show schemas;
还可以
select schema_name from information_schema.schemata;
还可以
select distinct table_schema from information_schema.tables;
select distinct table_schema from information_schema.columns;
但是这样会出现问题。看图
发现这样的查询少了两个数据库,因为那两个数据库下面没有表,所以用这个sql语句就查出来没有。
2.mysql中去重 distinct 用法
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。
distinct必须放在要查询字段的开头!
3.linux添加环境变量
例如怎样把/usr/local/mysql/bin添加为系统变量
vim /etc/profile在最后添加
export PATH=/usr/local/mysql/bin:$PATH
要是刚才的修改马上生效,需要执行
source /etc/profile
4.linux下给history命令添加时间
通常直接执行history是不显示时间的,但是有时为了分析之前命令是在什么时候执行的就不太方便。
编辑/etc/profile 文件,再文件最后末尾加上下面代码
export HISTTIMEFORMAT=” %Y-%m-%d %H:%M:%S ”
保存后执行 source /etc/profile
也可以使用history | grep 来过滤过不想需要看到的命令,比如说我们要看2019年5月4号都执行了哪些操作,使用 history | grep ‘2019-05-4’
结合last 和history命令就可以看到某个具体的ip地址对服务器执行了哪些操作。
5.修改linux登录提示信息
Linux可以设置登录前后的欢迎信息,虽然没啥技术含量,但却是非常实用的一个小技巧。 实现登录消息的功能,可以修改3个文件。
1、/etc/issue 本地登陆显示的信息,本地登录前
2、/etc/issue.net 网络登陆显示的信息,登录后显示,需要由sshd配置
3、/etc/motd 常用于通告信息,如计划关机时间的警告等,登陆后的提示信息
首先来看一下/etc/issue的内容
那么那个 \r 及 \m 是什么意思呢,您可以使用man pam_issue就能够知道
\d //本地端时间的日期; \l //显示当前tty的名字即第几个tty; \m //显示硬体的架构 (i386/i486/i586/i686...); \n //显示主机的网路名称; \o //显示 domain name; \r //当前系统的版本 (相当于 uname -r) \t //显示本地端时间的时间; \u //当前有几个用户在线。 \s //当前系统的名称; \v //当前系统的版本。
至于文件/etc/motd,(motd即motd即message of today布告栏信息的缩写) 则是在每次用户登录时,motd文件的内容会显示在用户的终端。比如 vim /etc/motd 进行了修改。
在下次ssh登录时就可看到
系统管理员可以在文件中编辑系统活动消息,例如:管理员通知用户系统何时进行软件或硬件的升级、何时进行系统维护等。如果shell支持中文,还可以使用中文,这样看起来更易于了解。/etc/motd缺点是,现在许多用户登录系统时选择自动进入图形界面,所以这些信息往往看不到。
issue.net文件(只针对网络用户)–若通过远程本文设备(如通过ssh或telnet等)登录,则显示该文件的内容。使用ssh登录时,会不会显示issue信息由sshd服务的sshd_config的Banner属性配置决定。虽设置了Banner属性但并未对issue.net中的\r和\m等内容进行转义,而是直接显示了。
issue.net和motd文件都是在登录后显示,那么顺序是怎么样的呢?
使用Putty登录时,当我们输入用户名root后,就显示了issue.net的内容,输入密码后,再显示的motd的内容。使用Xshell登录时,只有当我们输入用户名和密码后,验证成功了,才会依次显示issue.net和motd文件的内容。
6.批量删除Docker中已经停止的容器
在docker的使用中经常会停止了容器之后没有,每次都是从镜像启动的。导致时间一长就有很多停止的容器,而且要想删除镜像还必须先删除容器才行,但是一个个删很麻烦,在网上看到了一些方法。
我自己想的办法是显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
docker ps -a | grep Exited |docker rm `awk ‘{print $1}’`
或者
docker rm `docker ps -a|grep Exited|awk ‘{print $1}’`
- Docker 1.13版本以后,开始支持prune命令,快速删除已退出的容器
docker container prune
7.分享docker镜像给他人
通常我们都是直接在dockerhub上拉取镜像,但是要分享自己制作好的镜像给别人可以这样。
假设你有一个image叫做ubuntu,那么你可以使用save和load命令来转移image:
在本机执行
sudo docker save -o ubuntu.tar ubuntu
由此得到了 ubuntu.tar 文件,将其拷贝到远程机器,执行
sudo docker load < ubuntu.tar
8.没有ifconfig命令和SELinux–找不到seinfo、sesearch命令
centos最小化安装,装完发现没有ifconfig 这个命令。可以用 ip addr 命令查看网络信息
若需要,则yum -y install net-tools即可 。
是因为缺少安装SELinux Tools。执行
yum install setools 即可。
9.开启MySQL5.7远程访问权限 允许远程连接
CentOS系统安装好MySQL后,默认情况下不支持用户通过非本机连接上数据库服务器,下面是解决方法:
1、在控制台执行
mysql -uroot -p
系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台
2、选择数据库
use mysql;
GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "password" WITH GRANT OPTION; FLUSH PRIVILEGES;
3、重起mysql服务
service mysqld restart
如果执行完以上步骤,还是不能远程连接,那么我们需要查看服务器的防火墙是否开启
service iptables status
如果防火墙开启,请关闭
service iptables stop
10./bin/false 和 /usr/sbin/nologin 区别分析
/usr/sbin/nologin,/bin/false的意思是禁止某个用户登录
比较常用的用法:
#添加一个不能登录的用户
useradd -d /usr/local/apache -g apache -s /bin/false apache
要拒绝系统用户登录,可以将其shell设置为/usr/sbin/nologin或者/bin/false
usermod -s | –shell /usr/sbin/nologin username
# 或者
usermod -s | -shell /bin/false username
说明及比较:
/bin/false:/bin/false什么也不做只是返回一个错误状态,然后立即退出。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。
/usr/sbin/nologin:nologin会礼貌的向用户显示一条信息,并拒绝用户登录:This account is currently not available.
有一些软件,比如一些ftp服务器软件,对于本地非虚拟账户,只有用户有有效的shell才能使用ftp服务。这时候就可以使用nologin使用户即不能登录系统,还能使用一些系统服务,比如ftp服务。/bin/false则不行,这是二者的重要区别之一。
/etc/nologin
如果存在/etc/nologin文件,则系统只允许root用户登录,其他用户全部被拒绝登录,并向他们显示/etc/nologin文件的内容。
11.mysql的my.cnf中skip-networking和bind-address含义
单机运行MySQL使用skip-networking关闭MySQL的TCP/IP连接方式
skip-networking
开启该选项后就不能远程访问MySQL
为安全考虑希望指定的IP访问MySQL,可以在配置文件中增加bind-address=IP,前提是关闭skip-networking
bind-address=192.168.1.100
MySQL优化应该按实际情况配置。
12.Linux删除除了某个文件之外的所有文件/目录
例如我们创建了很多文件,但是正如小标题所言
其中rm -f !(a.txt) 最为方便。如果保留a和b,可以运行rm -f !(a.txt|b.txt)来实现。
不过一般bash中运行后会提示
“-bash: !: event not found ” 可以通过运行shopt -s extgolb来解决。
shopt命令用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性。shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项。
13.mysql修改root密码
方法1: 用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpass’);
方法2:用mysqladmin
mysqladmin -u root password “newpass”
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass “newpass”
方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD(‘newpass’) WHERE user = ‘root’;
mysql> FLUSH PRIVILEGES;
在丢失root密码的时候,可以这样
mysqld_safe –skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(“new password”) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;
14.yum makecache的作用
yum makecache就是把服务器的包信息下载到本地电脑缓存起来
配合yum -C search xxx使用
不用上网检索就能查找软件信息
执行完 yum makecache之后,可以用
yum search subversion 和 yum -C search subversion
二者差别挺明显的,前者明显比后者慢。
15.如何完全卸载阿里云盾
阿里云盾(AliYunDun),又名安骑士,是购买阿里云云产品后自带的监控云服务器/轻量应用服务器安全的产品,能够自动化实时入侵威胁检测、病毒查杀、漏洞智能修复、基线一键核查等功能,但是同时也会监控你的服务器是否有违规进程,然后就会收到“阿里云警告邮件”。
阿里云盾主要包括3个进程:AliYunDun、aliyun-service和AliYunDunUpdate。
远程连接到阿里云云服务器或者轻量应用服务器后,执行以下代码卸载阿里云盾:
wget http://update.aegis.aliyun.com/download/uninstall.sh chmod +x uninstall.sh ./uninstall.sh wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh chmod +x quartz_uninstall.sh ./quartz_uninstall.sh
删除阿里云盾文件残留
卸载阿里云盾后,执行如下代码删除阿里云盾文件残留:
pkill aliyun-service rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service rm -rf /usr/local/aegis*
屏蔽阿里云盾IP
最后就是屏蔽阿里云盾的IP:
iptables -I INPUT -s 140.205.201.0/28 -j DROP iptables -I INPUT -s 140.205.201.16/29 -j DROP iptables -I INPUT -s 140.205.201.32/28 -j DROP iptables -I INPUT -s 140.205.225.192/29 -j DROP iptables -I INPUT -s 140.205.225.200/30 -j DROP iptables -I INPUT -s 140.205.225.184/29 -j DROP iptables -I INPUT -s 140.205.225.183/32 -j DROP iptables -I INPUT -s 140.205.225.206/32 -j DROP iptables -I INPUT -s 140.205.225.205/32 -j DROP iptables -I INPUT -s 140.205.225.195/32 -j DROP iptables -I INPUT -s 140.205.225.204/32 -j DROP
检查阿里云盾是否卸载干净
最后检查下自己服务器上的阿里云盾是否卸载干净了,主要就是看进程里有没有阿里云盾的相关进程了(AliYunDun、aliyun-service和AliYunDunUpdate),可以通过ps -aux | grep -E 'aliyun|AliYunDun'
来检查,如果没有相关进程则说明阿里云盾已经卸载干净了。
16.python3.x requests库取消ssl验证
是因为在请求的时候request.get(url,verify=False)导致的
也就是这种,虽然不影响运行,但看着挺难受的。解决办法
import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
就搞定了
17.Apache 443端口占用解决方法
原因是启动Apache会占用443端口,而443被其他程序占用了。我们只需将Apache默认端口443改掉就行。网上搜了一下,说是更改Apache24\conf\extra\httpd-ssl.conf 文件中的443端口,我试了下,并没有什么用。
经过一番研究,在httpd.conf看到ssl_module引用的是httpd-ahssl.conf。然后找到httpd-ahssl.conf,修改文件里的443为442即可。
18./lib和/usr/lib和/usr/local/lib的区别
简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的.
/lib/
libc.so.*
ld*
仅仅被/usr目录下的程序所使用的共享库不必放到/lib目录下。只有/bin和/sbin下的程序所需要的库有必要放到/lib目录下。实际上,libm.so.*类型的库文件如果被是/bin和/sbin所需要的,也可以放到/usr/lib下。
/bin/
/sbin/
usr 很多人都认为是user缩写,其实不然,是unix system resource缩写。
19.shell 中 read 退格问题
问题描述:
read读取数据,误输入,需要删除时,backspace 却无法删除,反而出现字符^H。
例如:输入defef,接着按backspace尝试删除,结果:
defef^H^H
解决办法:
在read之前,添加如下命令,重新定义erase:
stty erase ^H
注意:
如果在使用read时,使用-n选项 ,则上述解决办法无效
20.Linux回车总会出现:++ printf ‘\033]0;%s@%s:%s\007’
在终端窗口输入任何命令或者运行任何脚本,发现每次按回车都会一条类似下面这样的输出都会出现:
++ printf ‘\033]0;%s@%s:%s\007’
后来发现是因为在终端窗口输入了set -x,或者是在终端窗口source 其他文件时,该文件中包含set -x,反正就是都是因为在终端窗口输入了set -x,所以再输入set +x即可取消回车后有++ printf ‘\033]0;%s@%s:%s\007’的输出。
微信赞赏支付宝赞赏
发表评论