Linux 基础

介绍Linux 基础与相关配置

Linux常用命令

  • mkdir 创建目录
  • cd 切换目录
  • rm -rf 删除目录以及子目录
  • mkdir 创建目录
  • touch 创建文件
  • ls 查看文件列表,ll查看列表与权限
  • pwd 查看当前路径
  • tar -cvf xxx.tar xxx/ tar包打包还有一个压缩命令tar -zcvf
  • tar -xvf xxx.tar -C /xxx/xxx tar包解压还有一个压缩命令tar -zxvf
  • tcpdump 查看tcp抓包 tcpdump -i eth0 -w ./target.cap
  • ps -ef|grep java 查看java进程信息
  • ps -aux(英文全拼:process status) 显示所有包含其他使用者的行程 ps -A 列出所有的进程 ps -u abc 查看指定用户进程
  • ifconfig 查看IP信息
  • ./install.sh 当前目录执行sh脚本
  • wget 下载网络数据
  • cat /proc/cpuinfo 查看CPU
  • top 查看进程信息与内存信息
  • free -m 内存容量, -buffers +cached。free -h centos available:真正剩余的可被程序应用的内存数
  • df -h 查看硬盘容量
  • du -sh * | sort -n 查看目录占用容量
  • ssh -p222 root@192.168.1.3 ssh登录其他服务器 -v查看详情,目标服务器需要允许外部ssh登录hosts.allow
  • mv ./* ../ 移动当前目录下的所有文件到上级目录
  • curl -H "Content-Type: application/json" -X POST --data '{"id":1}' http://www.infotech.vip/user POST范围URL
  • chown -R user:usergroup * 更改目录与子目录所有者
  • chmod -R 766 目录 修改目录权限,755。rwx = 4 + 2 + 1 = 7 (可读写运行),rw = 4 + 2 = 6 (可读写不可运行),rx = 4 +1 = 5 (可读可运行不可写)
  • netstat -tunlp 查看本机监听,-t:tcp,-u:udp,-n:数字表示,-a:全部,-l:监听服务,-p:进程名
  • whereis mysql which mysqld rpm -qa |grep mysql rpm -ql mysql-libs.... rpm -qal |grep mysql find / -name mysql ps -ef|grep mysql查找程序
  • tail -1000 xxx.txt > 2.txt tail -3000 catalina.out |grep Error > 3.txt 查看文件另存为 tail -10000 catalina.out | grep error最后1万行查询错误tail -f xx
  • rz sz xxx.txt 上传下载
  • find / -name "*.out" find . -name "*.out" 查找所有.out结尾的文件 查找当前目录.out文件
  • ls -l|grep "^-"| wc -l 查看当前目录文件个数,”^-“代表文件,wc -l统计行数,或者 find . -type f -print | wc -l
  • history 查看历史操作命令
  • killall mongod kill进程
  • less xxx.txt 查看文件内容 q 退出
  • sed -n '$=' /etc/sysctl.conf cat /etc/sysctl.conf | wc -l 查看文件行数
  • df -i 查看inode数与使用率
  • for i in /*; do echo $i; find $i | wc -l; done 查询下一级级目录inode数,可以一级一级排查,找出占用大的目录
  • lsb_release -a uname -r 查看版本信息
  • ab -c 10 -n 100 http://www.baidu.com/ -c 10表示并发用户数为10 - n100表示每个用户请求数为100。安装命令:yum -y install httpd-tools
  • date -s "2020-06-07 14:14:00" 修改系统时间;clock -w 系统时间写到服务器时钟
  • vi xxx 编辑文件,内部命令:/xxx搜索n下一条N上一条,:q!强制退出,:wq 保存退出,gg第一行,shift+G最后一行,dd删除一行,a录入,Esc退回命令模式
  • sftp(ftp) abc@192.169.1.2 跨服务器文件传输支持centos系统用户作为ftp用户,put 本地文件的地址 服务器上文件存储的位置
  • ftpopen 192.168.1.2 288 通过ftp登录目标ftp服务器,dir:查看目录
  • scp -P 288 /home/test/ss.txt root@192.168.33.113:/home 复制文件到目标服务器指定目录,-r 代表复制子目录文件
  • ss -ant |grep 80 Socket Statistics t:tcp a:all
  • nohup xxx & nohup 加在一个命令的最前面,表示不挂断的运行命令(退出账号/关闭终端还能继续运行),输出都将附加到当前目录的 nohup.out 文件中(如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中),&加在一个命令的最后面,表示这个命令放在后台执行,ps 和 jobs查看后台运行进程。nohup 英文全称 no hang up(不挂起)。
  • umask -S [权限掩码] umask 命令指定在建立文件时预设的权限掩码,获取当前权限掩码,umask的分数是”该默认值777需要减去的权限”,一般是022(同组或者其他组都没有写权限)
  • find / -name openssh 按文件名查找
  • crontab -e 编辑定时任务
  • lsof -i:111 lsof(list open files)是一个列出当前系统打开文件的工具
  • cat /etc/services | grep -w 111 查看正在监听的端口

Linux命令一张图

linux命令汇总

Linux存储系统

存储一张图

linux命令汇总

注意事项

  • 不能给目录随便分配权限,比如给/根目录下所有文件777权限会导致很多功能不可用

常用命令详解

CURL

发送HTTP GET请求 带中文处理。需要把中文进行urlencode放入参数中,可以找一个在线工具操作。 -d 表示编码,-G 表示get请求

1
2
curl -G -d code=a123 -d name=%e7%a6%8f%e5%b7%9e http://www.infotech.vip
curl -d 'account=abc&password=123'-X POST http://infotech.vip/login

目录说明

  • /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里
  • /etc 存放系统管理和配置文件
  • /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
  • /opt 用来安装附加软件包,是用户级的程序目录,可以理解为D:/Software,装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。java、tomcat等也可以安装在opt目录下
  • /usr 可以理解为C:/Windows/用于存放系统应用程序, /usr/lib理解为C:/Windows/System32,/usr/local 本地系统管理员软件安装目录(安装系统级的应用),可以理解为C:/Progrem Files/用户自己编译的软件默认会安装到这个目录下。 这里主要存放那些手动安装的软件,即不是通过“yum”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。自动化的安装程序通常要到/usr或/usr/local目录下寻找所依赖的文件
  • /usr/src 系统级的源码目录
  • /usr/local/src 用户级的源码目录
  • /usr/local/bin 本地增加的命令
  • /usr/local/lib 本地增加的库
  • /usr/doc Linux文档
  • /usr/bin 应用程序
  • /usr/sbin 超级用户管理程序
  • /dev 存放设备文件
  • /mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统
  • /boot 系统引导时使用的各种文件
  • /lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
  • /tmp 用于存放各种临时文件,是公用的临时文件存储点
  • /var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件
  • /var/log 系统日志

文件访问权限通过用户组实现,一个用户可以属于多个用户组。

NTP服务配置|NTP版本升级

主要配置文件

/etc/ntp.confNTP主要配置文件

查看NTPD版本号

执行命令

1
ntpd -v

打开防火墙

1
iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT

NTP安全加固

1. 确认环境

RedHat6.5 Ver. 4.2.8p9升级到 ntp-4.2.8p12.tar

2. 安装依赖包

1
yum -y install gcc libcap libcap-devel glibc-devel

3. 升级Ntp

1
2
3
4
5
 tar zxvf ntp-4.2.8p12.tar.gz 
./configure --prefix=/usr --bindir=/usr/sbin --sysconfdir=/etc --enable-linuxcaps --with-lineeditlibs=readline --enable-all-clocks --enable-parse-clocks --enable-clockctl
make
make install
chkconfig ntpd on

4. 查看版本号

1
ntpd --version

查看文件校验值

  • md5值:
1
2
3
windows : certutil -hashfile filename MD5

linux : md5sum filename
  • SHA1值:
    1
    2
    3
    windows:certutil -hashfile filename SHA1

    Linux : sha1sum filename
  • SHA256值:
    1
    2
    3
    windows :certutil -hashfile filename SHA256

    Linux:sha256sum filename

shell脚本

  • $0 $加数字可以获取传入的参数值
  • $HA_ST $加字符,获取环境变量的值,echo $HA_ST

Linux 网卡配置

网卡配置

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置IP,网关,DNS1,自动启动。是通过MAC与网卡绑定的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DEVICE=eth0
TYPE=Ethernet
UUID=41f56913-77c5-45b4-bd21-5029d2a553a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:E0:4C:15:52:1B
IPADDR=192.168.38.202
PREFIX=24
GATEWAY=192.168.38.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
DNS1='114.114.114.114'

多网卡同IP地址段配置-比如交换机主备

一般情况下不要把多个网卡的IP地址设置成同一个地址段。还可能出现数据只路由到一个网口的情况。linux系统网卡自动路由的问题,比如拔掉一个口的网线会出现网络不通,系统不懂自动切换到另一个口。如果通过命令把这个口ifdown 掉就可以正常了,系统会删除掉这个口的路由。

1
arp -a # 查看ARP缓存中所有项目的选项

如果想吧多个网口弄成热备,或者其他模式可以通过insmod bonding实现提供了6种模式。mode=0,表示load balancing (round-robin)为负载均衡方式,两块网卡都工作,但是与网卡相连的交换必须做特殊配置。mode=6,表示load balancing (round-robin)为负载均衡方式,两块网卡都工作,做bonding的这两块网卡使用不同的MAC地址。mode=1,表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,只有一块网卡工作,另一块做备份。

1
2
3
4
5
6
7
8
9
10
# 1.创建bond0文件
# 2.先配置网卡
vim /etc/modprobe.d/dist.conf # 3.添加下面参数
alias bond0 bonding
options bond0 mode=0 miimon=100

vim /etc/rc.local # 4.添加下面参数设置开机启动
ifenslave bond0 eth0 eth1
# 5. reboot
cat /proc/net/bonding/bond0 # 查看状态

配置默认DNS

1
vi /etc/resolv.conf

添加:

1
nameserver 114.114.114.114

HOST本地地址解析,主机名IP地址

1
vi /etc/hosts

添加:

1
14.215.177.38 www.baidu.com

查看进程与关闭进程

  1. 查看端口占用情况命令netstat -anp | grep 8080

  2. 根据进程id(12345),或者进程名查询进程详情

    1
    2
    ps -ef | grep 12345
    ps -ef | grep tomcat
  3. 关闭进程kill -9 12345

网络查看

  1. 查看端口占用情况命令netstat -anp。对于监听(State LISTEN)指定端口中 Foreign Address 中的 0.0.0.0:* 代表任意IP对应的端口都是可以接入的。Local Address 中的 0.0.0.0 代表监听本地所有IP地址,并且修改IP不受影响,IP是127.0.0.1表示只监听回环地址,只能本机访问,x.x.x.x:ip 只监听指定ip。:::* 是ipv6的规则
  2. 开放端口检测:lsof -i:3306, lsof -i TCP| fgrep LISTEN
  3. tcp/ip的范围从0到65535。其中公认端口1023以下的端口,查看cat /etc/services
  4. 有出现过127.0.0.1无法访问使用主机名找固定ip可以访问本机程序(数据库)的情况,比较奇怪能拿访问到ipv4与ipv6的问题也可能是系统配置问题

分区工具

Gparted、fdisk、gdisk、parted

守护进程

nohup

  • nohup 不挂断运行
  • & 在后台运行,如果在脚本中就会直接返回不等待程序启动完成,异步
  • 例子:nohup ./program &

Supervisor

守护进程工具,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起

查看系统信息

查看内存

1
2
3
4
5
[root@node1 ~]# free
total used free shared buffers cached
Mem: 8008876 7865764 143112 0 13316 4642096
-/+ buffers/cache: 3210352 4798524
Swap: 33554424 1938404 31616020

free命令查看。对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收
可用内存=系统free memory+buffers+cached=143112+13316+4642096=4798524

其他

服务管理两种方式service和systemctl

复制文件夹修改权限

1
2
3
4
cp -r v1.72 test
chown -R virtusers:virtusers test # (英文全拼:change ownerp设置关联所有者virtusers:virtusers)
cd test
tar -zcvf test.tar.gz * --exclude=test.tar.gz

授权

1
2
3
4
5
cat /etc/group # 查看所有用户组
cat /etc/passwd # 查看用户信息
usermod -g web -G www,virtusers web # 给web用户设置主用户组web组,virtusers,www附属用户组
groups version # 查看所属组
chmod -R g+w lte # lte以及子目录所属分组+w, u g o

设置快捷方式,可以直接启动

通过软连接

1
ln -s /usr/local/a/bin/b /usr/bin/b

添加PATH环境变量

vi /etc/profile 在最后添加:

1
2
PATH=/usr/local/a/bin:$PATH
export PATH

保存退出,执行source /etc/profile

配置错误可能导致命令不可用比如-bash: vi: 未找到命令。通过执行export PATH=/usr/bin:/usr/sbin:/bin:/sbin临时修复,重新修改环境变量文件

安装软件注意事项

需要先安装相关的依赖包,特别是源码安装需要安装gcc等依赖包。依赖包可以yum安装或者rpm包安装也可以源码安装

防火墙配置

命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 保存,修改后需要执行的命令
service iptables save
# 重启,使配置生效
service iptables restart
# 关闭,关闭后可以访问所有端口
service iptables stop
# 通过命令加规则 -A add
iptables -A INPUT -s 192.168.1.111 -p tcp --dport 222 -j ACCEPT # 只允许192.168.1.111访问222端口,批量过滤加上掩码192.168.1.0/24过滤192.168.1.1到192.168.1.225
# 指定端口或者端口端添加白名单规则
iptables -A INPUT -s 192.168.1.22 -p tcp --dport 8000:9000 -j ACCEPT # -I 插入在前面 -A添加在后面
iptables -A INPUT -p tcp --dport 8000:9000 -j DROP
# 保存
iptables save
# 查看规则,显示行号
iptables -nL --line-number # Chain INPUT (policy ACCEPT)与 Chain INPUT (policy DROP)
# 删除某行规则 1
iptables -D INPUT 1

配置 vi /etc/sysconfig/iptables直接添加相关规则:

1
2
3
4
5
6
7
8
9
10
11
12
*filter    # 星号开头的指的是表格,这里为 filter
:INPUT ACCEPT [0:0] # 冒号开头的指的是链,三条内建的链,三条内建链的政策都是 ACCEPT,如果是 :INPUT DROP [0:0] #丢弃所有进入请求
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 针对 INPUT 的规则
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT # 本机内部接口开放
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 默认配置
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited # FORWARD 的规则
COMMIT

配置项目说明

1
2
3
4
5
-p protoco # 协议
-i input # network interface name
-m match # 扩展匹配
--dport port # 目标端口
-j target # 跳过

配置链管理命令

1
2
iptables -P INPUT DROP # 这就把默认规则给拒绝了
iptables -F # 清空规则链

安全配置

关闭root用户SSH登录PermitRootLogin

  1. 新建一个用户用于SSH登录授权相关权限
  2. vi /etc/ssh/sshd_configPermitRootLogin值从yes改成no
  3. service sshd restart

限制ssh 访问IP

1
2
3
4
5
6
7
8
# vi /etc/hosts.allow  添加
sshd:192.168.33.1:allow #允许 192.168.33.1 这个IP地址SSH登录
sshd:192.168.33.:allow #允许192.168.33.1/24这段IP地址的用户登录,多个网段可以以逗号隔开,比如192.168.0.,192.168.1.:allow

# vi /etc/hosts.deny 添加
sshd:ALL # 拒绝全部IP

# 两个文件需要同时设置,这样就只允许192.168.33.1网段的IP访问了

也可以通过防火墙策略进行限制。

现在ssh 访问用户

1
2
3
4
5
6
7
8
9
# vi /etc/ssh/ssh_config 添加

AllowUsers test2 test@192.168.33.1 # 允许 test2 和从 192.168.33.1 登录的 test 帐户通过 SSH 登录系统

# 添加黑名单
DenyUsers test3 test4 # 拒绝test3 test4 ssh登录

# 重启
service sshd restart

其他安全说明

  1. 开启防火墙限制IP端口范围
  2. ACL控制用户文件夹访问权限
  3. 记录日志,查看/var/log/secure history ~/.bash_history

故障修复

磁盘故障修复

通过Linux启动U盘

  1. 在即将进入启动系统页面按键盘出现菜单,选择rescue
  2. 按提示选择
  3. fsck -y /dev/ada1 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
  4. reboot

无启动盘

  1. 启动系统,按任意键进入grub
  2. 选择Linux,按e进入编辑页面
  3. 选择kernel行,按e进入编辑页
  4. 在kernel行的最后加上init=/bin/bash,按回车键(Enter),然后按“b”进行重新引导
  5. 引导系统会得到一个bash shell,但进入的系统是read-only的,需使用fsck检查系统
    fsck -a /dev/hda1
  6. 将系统挂载成read-write的:mount / -o remount,rw
  7. 其他操作
  8. 系统重新挂载,重启: mount / -o remount,ro

单用户模式修改root密码

  1. 启动系统,按任意键进入grub
  2. 选择Linux,按e进入编辑页面
  3. 选择kernel行,按e进入编辑页
  4. 在kernel行的最后加上single,按回车键(Enter),然后按“b”进行重新引导
  5. 输入passwd修改root密码
  6. reboot

开机自启动

1
chkconfig --list |grep vsftpd

chkconfig的级别:

0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Windows(图形界面)支持的多用户模式
6:重新引导系统,即重启

开机不重启:

1
chkconfig vsftpd  off

server 0:off 1:off 2:off 3:off 4:off 5:off 6:off
上面的输出0~6都off时表示 没有开机自启动
开启自启动:

1
chkconfig vsftpd on

其它相关命令:
添加开机自启动服务:chkconfig –add vsftpd

添加自定义服务

  1. 在/etc/init.d/目录下新建一个自定义服务的文件如:test

  2. vi test 添加下面两句到 #!/bin/bash 之后。

    1
    2
    # chkconfig: 2345 90 10 
    # description: test ....
  3. chkconfig --add test

  4. chkconfig test on off 开启关闭,永久生效

  5. 如果不生效update-rc.d 命名设置开机自启动,95是脚本启动的顺序号

    1
    2
    cd /etc/init.d
    sudo update-rc.d test defaults 95
  6. update-rc.d 卸载启动脚本的方法

    1
    2
    cd /etc/init.d
    sudo update-rc.d -f test remove

安全加固Redhat6.5

关闭rpcbind服务 111端口

1
2
3
4
5
6
service rpcbind status
service rpcbind stop
chkconfig --list rpcbind
chkconfig rpcbind off
chkconfig --list rpcbind
lsof -i:111

关闭Telnet服务 23端口

开启Telnet

1
2
3
4
5
6
rpm -qa|grep telnet
rpm -ivh telnet-server-0.17-47.el6_3.1.x86_64
chkconfig --list | grep telnet
vi /etc/xinetd.d/telnet # disable=yes 改成 disable=no
chkconfig telnet on
service xinetd restart

关闭Telnet

1
2
3
4
5
vi /etc/xinetd.d/telnet # disable=no 改成 disable=yes
chkconfig telnet off # 关闭 chkconfig --del telnet 或者 chkconfig del telnet
service xinetd restart # 或者 /etc/init.d/xinetd restart
rpm -e telnet-server --nodeps # 删除Telnet包,非必须
vi /etc/services # 注释23端口

关闭cpus 631端口

1
2
3
4
lsof | grep ipp # 查看ipp相关进程
/etc/rc.d/init.d/cups stop # 手动关闭或者 /etc/init.d/cups stop
chkconfig --list | grep cups # 查看自启动
chkconfig cups off

进程说明

cupsd 打印机进程 631端口
sshd SSH进程 22端口
rpcbind 通用地址和RCP程序号码(RPC program number)之间的映射器。NFS服务有用到 111端口

升级

ssh升级

避免升级后执行ssh服务重启,服务无法正常启动导致ssh断开链接。可以先临时打开telnet服务或者VNC服务备用。如果在脚本里面执行可能导致ssh关闭脚本无法执行完,可以在重启命令(nohup service sshd restart &)或者脚本上加后台执行重启命令,比较奇怪,正常脚本已经是在服务器上了具体原因还得再查。

开发注意事项

  • linux(\n),windows(\r\n),mac(\r) 换行符的区别。\n十六进制为0x0A,\r十六进制为0x0D
  • 路径问题 根据情况尽量使用全路径,比如想打印日志,在编写脚本的时候,可能你的脚本是给其他程序调用的,可能其他程序运行脚本的当前路径跟你预期的不一致导致日志打印到了其他目录。当然对于比较熟悉linux系统的也是可以根据具体情况使用现对路径的,主要是要注意路径可能导致的问题。特别是在配置文件里面配置信息路径使用相对路径,当前的相对的路径不是配置文件那级目录,而是启动程序的路径。
  • Licence功能实现,一般可以取CPU、网卡等信息进行验证,最好是通过硬件U盾进行验证。

扩展

  • .tar.gz与.zip文件的区别
    • .tar.gz文件一般用于Linux系统上,而.zip文件一般流行于Windows系统上
    • .tar.gz格式的文件比.zip文件要小很多
  • linux各种东西都是文件,所以还可以通过删除文件释放内存。
  • bash: /bin/rm: 参数列表过长 ,使用find . -name "*"|xargs rm -rf "*"命令删除当前目录下文件

TELNET

开启Telnet

  1. rpm -qa | grep telnet
  2. vi /etc/xinetd.d/telnet disable = no 将disable改为no
  3. mv /etc/securetty /etc/securetty.bak
  4. service xinetd restart
  5. 客户端,telnet xxx.xxx.xxx.xxx 23

关闭Telnet

  1. vi /etc/xinetd.d/telnet disable = yes 将disable改为yes
  2. mv /etc/securetty.bak /etc/securetty
  3. service xinetd restart

Linux依赖包

一般大部分软件Linux依赖包都在系统盘ISO里面可以找到。

参考