linux学习笔记——基础命令

最近看了一些老男孩linux运维视频,挺不错的,特此记录一下

linux组成
gun组件 shell等
linux内核
其他软件

linux主要内核:
linux kernel2.2 
linux kernel2.4
linux kernel2.6

发行商:
rehat
suse
centos
ubuntu

rehat9.0之后分版本收费
分为rehat3.x rehat4.x rehat5.x rehat6.x
Fedora :rehat的一个分支,可以认为是rehat的预发布版本

Centos:rehat的另外一个分支,是把rehat里面收费的东西去掉,再编译发布

CentOS是国内使用最多的一套linux系统

------------------------------------------------------------
分区
主分区,扩展分区,逻辑分区
egg:
5个分区(一般最多4个主分区)
1p+le(4个L)P1 L5 L6 L7 L8
2p+le(3个L)  P1 P2 L5L6L7
3p+le(2L)
p+e<=4
e(扩展分区)最多只能有一个
L(逻辑分区)只能从5开始
IDE 接口 /dev/hd
         hda 第一块盘
          hda1 第一个分区
          hda2 第二个分区
         hdb 第二块盘
SCI 接口:SAS/SATA/SSD
         /dev/sd*
         sda 第一块盘
         sda1
         sda2
         sdb 第二块盘
linux的分区要求
/根分区,只有一个,存放系统程序,及文件
交换分区swap,相当于win的虚拟内存,内存不够的时候会用到
/boot分区,linux系统的引导分区,一般100--200M

文件系统
ext2/ext3/ext4
ext4效率更高,建议ext4

         
uname -r 内核版本
uname -a 所有

----------------------------------------------------------
#表示超级管理员
echo 111 1>xx.log 2>xc.log
1> 表示正常输出
2>表示错误输出


命令 --help 命令的简单帮助
man 命令    命令帮助
help 命令  bash的内置命令帮助


find /root/data -type f(文件) d(目录) filename
find /root/data -type f -exec rm -f {} ;
按照文件类型查找

-exec 对前面的结果进行处理
rm -f 对前面的查找的内容进行处理
{} 表示查找的内容
;转移

特殊字符按
 让一个有意义的字符按,脱掉马甲
比如. 当前目录,.就代表点

find /root/data -type f | xargs rm -f
xargs 把查找到结果在后面一个个处理


find /root -type f !-name "oldgirl.txt" | xargs rm -f
linux 命令可以接多个参数,and的作用,! 非,取反
-a and
-o or
find ./ -type d maxdepth 1
maxdepth 1 查找的深度为一级

find /log -type -f -name "*.log" -mtime +7 | xargs rm -f

-mtime 文件的修改时间


-----------------------------------------------------
grep 过滤器,linux三剑客,老三

grep -v "oldbody" test.txt -v 除了oldboy

-B 匹配的行前面多少行
-A 匹配的行后面多少行
-C 匹配的前后多少行
-E 可以过滤多个字符串
grep -E "hicloud|hello" xx.log

grep -C 'Exception' 20 root.log
输出异常的前后20行
grep --color=auto "Exception" root.log  过滤的字符加颜色输出



-------------------------------------------------------
cat >test.xtx<<EOF
test
hello
EOF

----------------------------------------------------
sed命令,三剑客老二,过滤(擅长取行)
sed -n(取消默认完整输出) '/oldboy/p' test.txt
sed -n(取消默认完整输出) '/过滤的内容/处理的内容' test.txt

-i 改变文件内容

p 打印
d delete,删除

sed -n "20,30p" xx.txt 取20--30行

sed 's#oldboy#oldgirl#g' xx.txt 把oldboy 替换成oldgirl,并未改变文件实体

-i 改变文件实体
-r 不用转义

g 代表全局替换
# 可以用其他符号替换,比如= / @做分隔符

fing ./ -type f -name "xx.txt" | xargs sed "s#olgboy#olggirl#g"

eg:
old fff
2old fff
3old fff
sed -r 's#(.*) fff#1#g' xx.txt
1 取的是(.*)
old
2old
3old
尽可能的往后匹配


----------------------------------------------------

mkdir -p /data01/hicloud 递归创建


yum update -y 更新所有软件到最新版本,线上系统最好不做

yum remove 会删除所有依赖的包,所以最好不用




rpm -qa tree 查询这个包(已经安装)

tree /root/ 展示目录结构


/bin/cp /mnt/test.txt /tmp/ 覆盖copy
cp /mnt/test.txt /tmp/

env  环境变量


alias  别名
ll='ls -l'
cp='cp -i'

全路径可以屏蔽这个别名,所以可以直接覆盖,不再提示

定义别名
alias rm='echo "rm can not be used "'

unalias 取消别名

别名的位置
cat /root/.bashrc
所有用户生效
/etc/bashrc  /etc/profiles
source /etc/profiles


----------------------------------------------

~  用户的家目录

root用户就代表 /root
zp 用户就代表zp

seq 2 5 序列
2
3
4
5

seq 1 2 10 只打印奇数
seq 2 2 10只打印偶数

seq -s ":" 5   -s是指定分隔符


{1..10}
{a..z}
类似seq


-----------------------------------------------------------------

awk 三剑客的老大
    一门语言,擅长过滤(取列),打印,删除
  
awk 'print $1' 文件 $1第一列,$2第二列

egg:
oldboy oldgirl
ddd fff

awk '{print $1}' xx.txt
结果:
oldboy
ddd

awk -F ":" 'print $1' xx.txt 指定分隔符

awk -F "[, ]" '{print $1 " " $3}' xx.log
多个分隔符

$NF 最后一列
awk 'if(NR<31 && NR>19) prinf $1 "
"' test.txt

ls -l | awk '/^d/' 过滤目录

正则表达式
[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $2}'?????

1

[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $3}'

2

[root@oldboy ~]# echo ---1:::::2|awk -F '[-:]+' '{print $3}'
2


awk也可以过滤
[root@masters ~]# ifconfig eth0 | awk '/inet addr/'
          inet addr:192.168.1.106  Bcast:192.168.1.255  Mask:255.255.255.0


---------------------------------------------------
cd - 切换到上次的目录
bash  
which 查找命令所在的路径,PATH的路径,
linux里面大多数的命令都会在PATH里面去找
which cp
whereid -b useradd
locate useradd

linux 时间同步的问题
date -s "xxx" 设置时间

echo "ssssssss" >> /var/spool/cron/root
/dev/null 空设备 黑洞

文件描述符
ulimit -n 查看文件描述符
调整文件描述符
ulimit -nSH 65535
/etc/rc.local
less 按屏或者行查看文件



==========================================================
用户管理

useradd oldboy
/etc/passwd
/etc/group
/etc/shadow

添加一个用户,信息会保存在这三个文件里面
passwd oldboy 为oldboy设置密码

su - root 切换到root环境
su 直接切换,环境变量还是原来的用户
所以要带-





--------------------------------------------------------

系统的优化
SELinux 
/etc/selinux/config
/etc/inittaab 运行级别,一般3模式,没桌面
init 3,切换运行级别

开机自启动:
1,setup
2,chkconfig
chkconfig --level 查看服务
chkconfig --level 235 hicloud off
把hicloud自启动235级别的关掉


--------------------------------------------------------
正则表达式
.单个任意字符
*重复前面多个字符
.* 匹配任意字符
^ 以什么开头的,^old 代表以old开头
$ 以什么结尾的, /$ 以/结尾的
^$ 空行

grep "0*" root.log 匹配至少前面一个0的
grep -o "0*" root.log 精确匹配的
[abc] 匹配括号里面任意一个字符
[a-z] 匹配a-->z
[^a-z] ^在括号里面是取反,即排除a-z
0{3} 重复前面000,
grep -E "0{3}" root.log

0{3,} 至少三次
0{,3} 之多三次
0{3,5} 至少三次



sed -n "s#^.*ddr:##g" xx.log

^.*: 以目标前的匹配
Bc.*$目标后的匹配
第二个#之间不要写东西,相当于把匹配的替换成空的
[root@masters log]# 
[root@masters log]# ifconfig | sed -n "2p" | sed -r 's#(^.*dr:)##g' | sed -r 's#( Bc.*$)##g'
192.168.1.106 


[root@masters ~]# ifconfig eth0 | sed -nr 's#^.*dr:(.*) Bc.*$#1#gp'
192.168.1.106 
1 取值(.*)

sed -ir 's#()#oldboy#g' xx.txt
r 不用转义

主要就是用在三剑客上面

扩展的正则表达式:
主要是用在Egrep 或者grep-E 

+ 重复一个或者一个以上的前面字符
| 查找多个字符串


-----------------------------------------------------------
内核
/etc/sysctl.conf



-----------------------------------------------------------
目录:
/etc/sysconfig/network-scripts/  网卡目录
/etc/init.d/network restart 网卡生效
ifdown eth0 停掉网卡
ifup eth0 启动网卡


/etc/resolv.conf dns配置
/etc/hosts  相当于局域网的dns,主机名和ip的解析
ip  域名
192.168.1.106 hicloud.test.com


更改主机名:
hostname hicloud 临时生效
/etc/sysconfig/network 永久生效


-------------------------------------------------------------------

/etc/fstab 有关文件系统的静态信息
开机挂在磁盘,设置文件系统挂在信息的文件,使得能够开机自动挂在

df -h 查看磁盘挂在信息

mkfs.ext4 /dev/sbd1 格式化磁盘

挂在:
1,mount -t ext4 -o noexec /dev/sbd1 /mnt
2.fstab

设置fstab自动挂在 
/dev/sdb1    /mnt/             ext4 defaults 0 0

mount -a 自动挂在生效

fstab配置错了之后,系统起不来,不能挂在网络设备,只能挂在本机设备
1,开机提示,输入密码,修复
2,救援模式,rescue



-------------------------------------------------------
/etc/rc.local 类似windows的启动
开机启动:
1,chkconfig
2,rc.local

建议 用/etc/rc.local,linux启动流程最后的加载文件

----------------------------------------------------------

/etc/inittab 运行级别文件

----------------------------------------
/etc/init.d   yum/rpm安装的大部分在这下面
--------------------------------------------
/etc/profile.d 登陆的时候执行下面的脚本

-----------------------------------
usr/local 相当于win prog




--------------------------------------
/var 路径
/var/log/messages 系统日志
/var/log/srcure   ssh连接日志
/var/spool/cron/crontab 定时任务



-----------------------------------------------------

chkconfig
处理的命令在/etc/init.d/

sshd    0:off   1:off   2:on    3:on    4:on    5:on    6:off
数字值的是运行级别,分别对应
drwxr-xr-x. 2 root root  4096 Mar 21  2015 rc0.d
drwxr-xr-x. 2 root root  4096 Mar 21  2015 rc1.d
drwxr-xr-x. 2 root root  4096 Mar 21  2015 rc2.d
drwxr-xr-x. 2 root root  4096 May 21 06:27 rc3.d
drwxr-xr-x. 2 root root  4096 Mar 21  2015 rc4.d
drwxr-xr-x. 2 root root  4096 Mar 23  2015 rc5.d
drwxr-xr-x. 2 root root  4096 Mar 21  2015 rc6.d

比如运行界别是3
在rc3.d下面
S***sshd-->../init.d/sshd  代表on状态
K***sshd-->../init.d/sshd 代表off状态
也可自己创建删除软连接,实现on off的状态
 S55sshd -> ../init.d/sshd
55是怎么来的?
是在服务脚本里面的配置的,前几行

#!/bin/bash
#
# sshd          Start up the OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: SSH is a protocol for secure remote shell access. 
#              This service starts up the OpenSSH server daemon.
#


----------------------------------------------------------------------
tar 打包以及压缩,尽量切换到打包文件的上一级目录
tar zcvf etc.tar.gz /etc 压缩
tar tf etc.tar.gz 查看里面的文件


------------------------------------------
cut
cut -d" " -f2,3 xx.log 指定分隔符,取2,3列

----------------------------
wc -l /etc/passwd 显示行数
ps -ef | grep tomcat | wc -l



---------------------------
原文地址:https://www.cnblogs.com/zpitbolg/p/5679431.html