一些学习中的随笔小记(一)

一些学习中的随笔小记(一)

记录一些平时学习中零碎的知识点

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;

开启远程连接
root 用户名
% 所有人都可以访问
password 密码

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/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件。目录 /usr/lib/ 中含有更多用于用户程序的库文件。/lib目录下放置的是/bin和/sbin目录下程序所需的库文件。/lib目录下的文件的名称遵循下面的格式: 
libc.so.* 
ld* 
仅仅被/usr目录下的程序所使用的共享库不必放到/lib目录下。只有/bin和/sbin下的程序所需要的库有必要放到/lib目录下。实际上,libm.so.*类型的库文件如果被是/bin和/sbin所需要的,也可以放到/usr/lib下。

/bin/ — 用来贮存用户命令。目录 /usr/bin 也被用来贮存用户命令。

/sbin/ — 许多系统命令(例如 shutdown)的贮存位置。目录 /usr/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’的输出。

zgao

如果有什么技术上的问题,可以加我的qq 1761321396 一起交流。