Linux知识点小结

1 我的Linux需求

这里讨论的是我对线上的Linux机器的需求,所以只讨论稳定发行版,且是比较保守的版本。比如CentOS 7的xfs不予讨论,并不是说xfs不好,而是以目前我的Linux水平需要更新很多xfs的知识,驾驭需要时间。CentOS 7将ifconfig,netstat等原来常用的命令也干掉了。下面我们以CentOS 6作为基础,谈一谈我对Linux的基本需求。

1.1 最小化安装

CentOS有一个minimal版本,相对于标准版去掉了很多Service,比如Network Manger,安装最小版本以后的网络配置是需要admin进行全手工配置文件配置的。我个人认为这样是比较好的,因为可以更好的理解Linux内核是如何看待这些配置文件的,那些是内核真正需要的,那些是修改以后可以直接改动到内核的性能。对于一些必要的监控工具,完全可以通过yum install来完成。标准版更加适合平时的练习,作为线上机器,还是最小化安装,做到能不开的服务就不开,能关掉的端口就关掉,这样既能将宝贵的硬件资源留下来给应用程序,也能够做到更加的安全,因为攻击的入口就是通过网络。

1.2 足够安全

除了将能关的端口关掉,能不用的服务关掉以外,安全还需要做到特定的服务只能访问特定的内容。哪怕是root账户,不能访问的文件和文件夹还是不能访问,更加不能操作。因为极有可能攻击者获取到root权限,这个时候就基本是无所欲为了。开启SELinux以后,能够做到在不修改SELinux的情况下,指定的服务只能访问指定的资源。

1.3 资源按需调度

我们经常会遇到这样一个问题,假设将磁盘sda挂载到/var目录,但是由于log太多或者上传的文件等等其他因素将硬盘吃光了,再创建一块sdb磁盘就无法挂载到/var目录了,其实Linux自带的lvm已经解决了这个问题,并且CentOS默认就是用lvm来管理磁盘的。我们需要学会如何格式化一块硬盘为lvm,然后挂载到对应目录,在空间被吃光前能够添加一块硬盘就自动扩容。

1.4 网络监控

说白了就是在Linux本地利用好iptables,来规划服务哪些网络流量,抛弃哪些网络流量。以及在进行组网的时候需要用router来进行网关的创建,在遇到网络问题的时候通过netstat来查看网络访问异常。网络这块内容很多很杂,各种参数,TCP/IP协议栈等等,但是往往问题还就是出在网络这块,所以要给与高度的关注。

2 Linux的理念与基础

对Linux敬仰如滔滔江水^_^,小谈几点我对Linux的认识。

2.1 Linux的文件系统

Linux将所有的事物都看成文件,这一点人尽皆知。我想说的是,除了传统的ext文件系统,Linux在抽象不同的资源的时候其实有各种不同的文件系统,都是从需求和使用出发,怎么方便怎么来,比如proc文件系统就是针对进程的抽象,使得修改对应进程的值就可以直接改变进程的行为。再比如,对于远程ssh登录的pts设备,Linux有对应的devpts文件系统。

2.2 Linux的权限管理

Linux的-rwxrwxrwx权限管理也可谓人尽皆知,其实Linux自己也意识到了这样的权限管理所带来的一些局限性。首先rwx的权限管理是基于用户和组的,并且只是大致的分为owner|group|other这三类,无法再作更加细粒度的划分。有鉴于此,Linux目前默认是有ACL(Access Control List)管理的,所谓ACL就是能够提供更加细粒度的用户和组管理,比如可以明确哪个user可以有什么样的权限。如下示例

getfacl abc
# file: abc
# owner: someone
# group: someone
user::rw-
user:johny:r-x
group::r--
mask::r-x
other::r--

而SELinux提供了不基于用户与组的权限管理,SELinux是基于应用程序的,什么样的应用程序可以使用什么资源,对于这些资源这个应用程序能干嘛,这个就是SELinux的管理方式。

2.3 Linux上的Service

Linux上的Service组织得非常清晰,当然也是传统所致。/etc/init.d/里面包含了所有的Service启动脚本,对应的二进制文件在/usr/bin 、 /usr/sbin 、 /usr/local/bin等目录下,一般而言配置文件在/etc/app_name下,还有一个chkconfig的工具来管理各个runlevel下需要启动的Service。这样的约定俗成使得管理员在配置和使用的时候非常方便。Linux标准的Service都会将log记录到/var/log/messages中,使得系统管理员不需要翻阅各种log,直接在/var/log/messages中就可以找到绝大部分的log来判断当前系统是否正常。更甚的,syslogd被rsyslogd替换以后,可以将/var/log/messages中的内容通过UDP发送到远端用专业的log分析工具进行分析。我们需要学习Linux上Service的这些优秀的编程习惯和技巧。

3 磁盘

根据$1中的需求,主要是创建Linux下的LVM,以及一些基本的磁盘操作。

  • df -lah 查看磁盘的使用情况
  • fdisk -l 查看插入到磁盘驱动器中的硬盘; sd(a,b,c)(1,2,3),其中a是第一块磁盘,b是第二块磁盘,1,2,3表示磁盘上的主分区,最多4个。用fdisk从磁盘创建分区并且格式化。
  • LVM(logical volume manager),主要就是满足加硬盘就能直接写数据的功能,而不会出现磁盘满了,然后挂了。lvm有几个概念,VG, PV, LVM,将磁盘lvm格式化,创建PV, 创建VG,将创建的PV加入VG,然后在VG中创建lvm,然后就可以动态增加大小了。注意,将磁盘格式化为lvm,但是lv的格式化需要用ext,然后才能mount上去。参考这篇文章CentOS 6 卷组挂载硬盘教程
  • mount -t type(ext4|nfs) /dev/sdxn /path/dir 来挂载。如果要重启生效,必须将挂载信息写入到/etc/fstab
  • 磁盘IO效率(IOPS)需要用vmstat, top等工具来查看。

4 网络

网络的坑很多,需要把网络搞通没个3,4年很难。下面从网络的基本配置文件着手,简单理一下网络方面的内容。网络最难的方面应该是如何搭建一个合理的高效的局域网或者城域网,这个需要有专业的网络知识。

4.1 配置文件

/etc/hosts私有IP对应主机名
/etc/resolv.confnameserver DNS的IP
/etc/sysconfig/network其中NETWORKING=要不要有网络,HOSTNAME=主机名,NETWORKING_IPV6=支持ipv6否
/etc/sysconfig/network-scripts/ifcfg-xxx其中DEVICE=网卡代号,BOOTPROTO=是否使用dhcp,HWADDR,IPADDR,NETMASK,ONBOOT,GATEWAY
4.2 网络设计到的一些命令

router -n查看路由的命令,特别是要看带G的,表示gateway,而带U的表示up。
netstat -anp查看所有启动的tcp,udp,unix stream的应用程序,以及他们的状态,具体可以参考TCP/IP,JavaSocket简单分析一文。
5 安全

5.1 PAM

PAM总体来讲只需要简单了解就行,是一个可插拔的认证模块。按照我的说法,是开发Linux的极客们搞出来的可复用的一个组件。举个例子,现在有一个app,想要验证当前的登录用户是否有权限操作某个目录,那么在PAM里面有现成的模块,app只需要include这个模块,给出一个配置文件,就可以了。有一个非常好的关于PAM的视频教程,请看这里

  • PAM是应用程序用来进行身份验证的。早期的身份验证和应用程序本身耦合,后来把身份验证单独抽出来,通过PAM来进行管理
  • /etc/pam.d/xxx 是能用pam来进行管理的应用程序PAM设置,在安装应用程序的时候安装。/etc/security/mmm, /lib/security/pam_mmm是一套。
  • 总体来说PAM是利用Linux系统本身提供的机制,来进行验证

5.2 SELinux

关于SELinux也有一个非常好的视频教程,请看这里

  • getenforce来查看SELinux是否被启用
  • /etc/sysconfig/selinux enforcing启用SELinux
  • SELinux对“运行程序”配置和检查其是否有权限操作“对象”(文件系统),而普通的ACL(rwx)就是根据文件所属owner及其组来判断。SELinux是看bin的type和目录文件的type是否兼容,来决定bin是否能操作资源

5.3 防火墙

对于iptables也是一知半解,所以下面只是学习时候的一些摘录。特别一点,要开启内核参数net.ipv4.ip_forward=1,在/etc/sysctl.conf文件中,用sysctl -p来保存。所谓ip_forward指的是内核提供的从一个iface到另外一个iface的IP包转发,比如将IP包从192.168.1.10的eth0转发到10.0.0.123的eth1上。专业的防火墙配置是需要专业技能的。

tcp_wrapper需要libwrap.so的支持,所有凡是ldd出来没有的bin,都不能用tcp_wrapper
iptables是按照规则进行短路判断的,即 满足条件1->执行action1->结束
iptables-save来更加清晰的查看
先删掉全部规则,然后添加,比较简单。添加的时候,先添加策略,再添加细部规则。一般来讲,我们需要关注的是filter这个表的INPUT与OUTPUT
iptables -A(I) INPUT(OUTPUT,FORWARD) -i(o) iface -p tcp(ump,imp,all) -s (!)source -d dest -j ACCEPT(REJECT,DROP), 还支持的参数 —dport —sport
6 工具

一个好的Linux命令参考网站

6.1 CPU

  • top 特别注意load
  • ps aux和ps -ef 特别注意进程状态
  • vmstat 1表示每秒采集一次
  • sar -u 1 查看所有cpu相关的运行时间

6.2 Memory

  • free
  • vmstat 1 注意其中的swap ram block之间的关系
  • sar -r 1 内存使用率
  • sar -W 1 查看swap,查询是否由于内存不足产生大量内存交换

6.3 IO

  • lsof -i:port 查询哪个进程占用了这个端口号
  • lsof -u username 用户打开的文件
  • lsof -p pid 进程打开的文件

杂项

关于安装好系统之后的运行脚本,这边有一个参考

#!/bin/bash

flagFile="/root/centos6-init.executed"

precheck(){

  if [[ "$(whoami)" != "root" ]]; then
  echo "please run this script as root ." >&2
  exit 1
  fi

  if [ -f "$flagFile" ]; then
  echo "this script had been executed, please do not execute again!!" >&2
  exit 1
  fi

  echo -e "\033[31m WARNING! THIS SCRIPT WILL \033[0m\n"
  echo -e "\033[31m *1 update the system; \033[0m\n"
  echo -e "\033[31m *2 setup security permissions; \033[0m\n"
  echo -e "\033[31m *3 stop irrelevant services; \033[0m\n"
  echo -e "\033[31m *4 reconfig kernel parameters; \033[0m\n"
  echo -e "\033[31m *5 setup timezone and sync time periodically; \033[0m\n"
  echo -e "\033[31m *6 setup tcp_wrapper and netfilter firewall; \033[0m\n"
  echo -e "\033[31m *7 setup vsftpd; \033[0m\n"
  sleep 5

}

yum_update(){
  yum -y update
  #update system at 5:40pm daily
  echo "40 3 * * * root yum -y update && yum clean packages" >> /etc/crontab
}

permission_config(){
  #chattr +i /etc/shadow
  #chattr +i /etc/passwd
}

selinux(){
  sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/sysconfig/selinux
  setenforce 1
}

stop_services(){
  for server in `chkconfig --list |grep 3:on|awk '{print $1}'`
  do
    chkconfig --level 3 $server off
  done

  for server in crond network rsyslog sshd iptables
  do
    chkconfig --level 3 $server on
  done
}

limits_config(){
cat >> /etc/security/limits.conf <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF
echo "ulimit -SH 65535" >> /etc/rc.local
}

sysctl_config(){
sed -i 's/net.ipv4.tcp_syncookies.*$/net.ipv4.tcp_syncookies = 1/g' /etc/sysctl.conf
sed -i 's/net.ipv4.ip_forward.*$/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024 65535
EOF
sysctl -p
}

sshd_config(){
  if [ ! -f "/root/.ssh/id_rsa.pub" ]; then
  ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
  cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  chmod 600 /root/.ssh/authorized_keys
  fi

  #sed -i '/^#Port/s/#Port 22/Port 65535/g' /etc/ssh/sshd_config
  sed -i '/^#UseDNS/s/#UseDNS no/UseDNS yes/g' /etc/ssh/sshd_config
  #sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
  sed -i 's/#PermitEmptyPasswords yes/PermitEmptyPasswords no/g' /etc/ssh/sshd_config
  sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
  /etc/init.d/sshd restart
}

time_config(){
  #timezone
  echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile

  # Update time
  if [! -f "/usr/sbin/ntpdate"]; then
    yum -y install ntpdate
  fi

  /usr/sbin/ntpdate pool.ntp.org
  echo "30 3 * * * root (/usr/sbin/ntpdate pool.ntp.org && /sbin/hwclock -w) &> /dev/null" >> /etc/crontab
  /sbin/service crond restart
}

iptables(){
cat > /etc/sysconfig/iptables << EOF
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT
EOF
/sbin/service iptables restart
source /etc/profile
}

other(){
  # initdefault
  sed -i 's/^id:.*$/id:3:initdefault:/' /etc/inittab
  /sbin/init q

  # PS1
  #echo 'PS1="\[\e[32m\][\[\e[35m\]\u\[\e[m\]@\[\e[36m\]\h \[\e[31m\]\w\[\e[32m\]]\[\e[36m\]$\[\e[m\]"' >> /etc/profile

  # Wrong password five times locked 180s
  sed -i '4a auth    required   pam_tally2.so deny=5 unlock_time=180' /etc/pam.d/system-auth
}

vsftpd_setup(){
  yum -y install vsftpd
  mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
  touch /etc/vsftpd/chroot_list
  setsebool -P ftp_home_dir=1
cat >> /etc/vsftpd/vsftpd.conf <<EOF
# normal user settings
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_max_rate=10000000
# anonymous settings
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=1000000
data_connection_timeout=60
idle_session_timeout=600
# ssl settings
#ssl_enable=YES
#allow_anon_ssl=NO
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#rsa_cert_file=/etc/vsftpd/vsftpd.pem
# server settings
max_clients=50
max_per_ip=5
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
#banner_file=/etc/vsftpd/welcome.txt
dual_log_enable=YES
pasv_min_port=65400
pasv_max_port=65410
EOF
  chkconfig --level 3 vsftpd on
  service vsftpd restart
}

main(){
  precheck

  printf "\033[32m================%40s================\033[0m\n" "updating the system      "
  yum_update

  printf "\033[32m================%40s================\033[0m\n" "re-config permission      "
  permission_config

  printf "\033[32m================%40s================\033[0m\n" "enabling selinux        "
  selinux

  printf "\033[32m================%40s================\033[0m\n" "stopping irrelevant services  "
  stop_services

  printf "\033[32m================%40s================\033[0m\n" "/etc/security/limits.config  "
  limits_config

  printf "\033[32m================%40s================\033[0m\n" "/etc/sysctl.conf        "
  sysctl_config

  printf "\033[32m================%40s================\033[0m\n" "sshd re-configuring      "
  sshd_config

  printf "\033[32m================%40s================\033[0m\n" "configuring time        "
  time_config

  printf "\033[32m================%40s================\033[0m\n" "configuring firewall      "
#  iptables

  printf "\033[32m================%40s================\033[0m\n" "someother stuff        "
  other

  printf "\033[32m================%40s================\033[0m\n" "done! rebooting        "
  touch "$flagFile"
  sleep 5
  reboot
}

main

以上就是针对linux知识点进行的详细汇总,希望对大家的学习有所帮助。

(0)

相关推荐

  • Linux 脚本编写基础知识

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行):#!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行:编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您在程

  • linux备份与恢复基础知识

    unix系统为每个文件都记录这三个不同的时间,第一个是mtime,即修改时间.无论何时,只要文件内容被改变,mtime的值就会被相应修改.第二个是atime,即访问时间.只要文件被访问(比如运行或读取),它就会被修改.第三个是ctime,即变更时间.当文件的属性发生变化(比如改变权限或者所有关系)时,ctime的值就会被改变.管理员用ctime来查找黑客. 备份会改变atime,tar,cpio,dd都会这样做,dump通过原始设备来读取文件系统,因此它不 会改变atime. dump的语法.

  • linux shell脚本基础知识学习

    Shell脚本: 1.#!  指定脚本执行的shell2.# 注释 3.命令或语法结构echo "输入内容"echo 输出空行 执行: 1.shell 脚本   sh example2.给shell脚本执行权限   chmod u+x example 案例:example  sysinfo.sh 3abc  x  不能以数字开头abc3ABC3 环境变量-大写 命令执行结果赋值变量使用 命令替换符 ``PATH=$PATH:/root/shell.example ls -l /etc/

  • Linux shell知识点汇总

    实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果. 引言 SHELL在处理一些问题的时候有得天独厚的优势,快捷方便,学会了还可以显摆显摆,当然了,shell的语法有点坑爹,没有系统的学过,只能一点一点的积累. 今天这个是在实现一个刷

  • 个人学习Linux知识总结第1/4页

    1.更改telnet登录慢的问题:cd /etc vi resolv.conf将里面内容清空  2.更改root用户不能直接远程登录问题:cd /etc cd pam.d vi login注释掉这行#auth required pam_securetty.so //该行注释掉 3.挂接USB移动硬盘将移动硬盘挂上. #df 查看Linux下硬盘盘符mount /dev/sda1 /mnt/usb (举例) 5.更改Linux启动时用图形界面还是字符界面cd /etc vi inittab将id:

  • Linux知识点小结

    1 我的Linux需求 这里讨论的是我对线上的Linux机器的需求,所以只讨论稳定发行版,且是比较保守的版本.比如CentOS 7的xfs不予讨论,并不是说xfs不好,而是以目前我的Linux水平需要更新很多xfs的知识,驾驭需要时间.CentOS 7将ifconfig,netstat等原来常用的命令也干掉了.下面我们以CentOS 6作为基础,谈一谈我对Linux的基本需求. 1.1 最小化安装 CentOS有一个minimal版本,相对于标准版去掉了很多Service,比如Network M

  • Python装饰器用法与知识点小结

    本文实例讲述了Python装饰器用法与知识点.分享给大家供大家参考,具体如下: (1)装饰器含参数,被装饰函数不含(含)参数 实例代码如下: import time # 装饰器函数 def wrapper(func): def done(*args,**kwargs): start_time = time.time() func(*args,**kwargs) stop_time = time.time() print('the func run time is %s' % (stop_time

  • CodeIgniter常用知识点小结

    本文简单总结了CodeIgniter开发中的常用知识点.分享给大家供大家参考,具体如下: 跳转: $this->load->helper('url'); redirect(); 常量定义: config/constants.php 关于语言文件: 只说我自己的做法 为了统一管理错误信息 决定做一个error_lang.php 在application/language下新建文件夹chinese 新建文件 error_lang.php 在config.php里: $config['languag

  • Zend Framework入门知识点小结

    本文总结分析了Zend Framework入门知识点.分享给大家供大家参考,具体如下: zend framework是MVC模式的一种实现,要快速的入门差不多只看Zend_Controller Zend_View 部分就可以了吧. 1.Zend_Controller部分.最重要的类是Zend_Controller_Front.使用它的经典代码很 简单: $front=Zend_Controller_Front::getInstance(); $front-> setControllerDirec

  • Lua中关于元方法的一些知识点小结

    本篇要介绍的东西比较零散,都是一些小知识点,所以就放在一起了. 1.两个具有不同元表的值进行算术操作(比如加法) 之前举例的时候,两个table相加,这两个table都是具有相同的元表的,所以没有任何问题. 那么,如果两个table或者两个进行相加操作的值,具有不同的元表呢? 对于这种情况,Lua是这样处理: a.如果第一个值有元表,就以这个元表为准 b.否则,如果第二个值有元表,就用第二个值的元表 c.如果两个值都没有元表,或者没有对于的元方法,那么,就会报错 2.关系类的元方法 除了加法减法

  • JS运动相关知识点小结(附弹性运动示例)

    本文总结了JS运动相关知识点.分享给大家供大家参考,具体如下: 1.多物体运动框架所有东西都不能共用 2.document.title输出频率不能太高 3.在写JS时尽量避免写小数,因为计算机内部都是模拟的,而不是实际存储的 如:0.07*100 在JS运算里不是为7 var a=3; var b=3.00000000000000000001; alert(a=b); 输出的结果却是true 4.写程序思考时先思考一般,再思考特殊,写程序是,先排除特殊,然后写一般 if(特殊1) {} else

  • MySql 索引、锁、事务知识点小结

    本文总结了MySql 索引.锁.事务知识点.分享给大家供大家参考,具体如下: 1. 索引 索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的记录. 索引的优点: 天生排序. 快速查找. 索引的缺点: 占用空间. 降低更新表的速度. 注意点:小表使用全表扫描更快,中大表才使用索引.超级大表索引基本无效. 索引从实现上说,分成 2 种:聚集索引和辅助索引(也叫二级索引或者非聚集索引) 从功能上说,分为 6 种:普通索引,唯一索引,主键索引,复合索引,外键索引,全文索引. 详细说说 6 种索引

  • 我常用的一些linux命令小结

    之前做过两年的运维,用过很多命令,深切体会到某些linux命令熟练掌握后对效率提升有多大.举个简单的例子,在做了研发后经常会有跑一些数据,对于结果数据的处理,我们的产品同学一般都习惯于用excel做统计,把数据复制到excel里,然后数据分列,排序---- 最后得出某些简单的结论,我只需要cat, sort, uniq, awk, grep 这几个命令挥手间完成相同的操作. 这里我总结下我工作这几年用过的一些命令,当然,这里就不提那些vim cd ls mv cp 这种简单的命令了,如果你都不会

  • Python模块相关知识点小结

    本文实例讲述了Python模块相关知识点.分享给大家供大家参考,具体如下: 1.模块: 定义:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是以.py结尾的python文件(文件名:test.py,对应的模块名:test). 包:用来从逻辑上组织模块的,本质就是文件夹(目录),必须带有一个__init__.py文件. 导入包的本质就是解释这个包下面的__init__.py文件. 在某个模块下需要导入某一个包下面的内容,需要在包下面的__init__.py文件中修改

  • Python 面向对象静态方法、类方法、属性方法知识点小结

    本文实例讲述了Python 面向对象静态方法.类方法.属性方法知识点.分享给大家供大家参考,具体如下: (1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__(self,name): self.name = name @staticmethod #实际上跟类没什么关系了 def eat(self): print("%s is eating %s&quo

随机推荐