Linux简单操作

bash shell 介绍和使用

什么是Bash shell(壳)

是一个命令解释器,就是一个软件  执行就是bash,可以在里面输入命令,做交互,exit退出

能干什么

原来在windows上点点点完成的是,它都能做到

使用Shell实现对Linux系统的大部分管理,例如:
1.文件管理(文件创建,移动,复制,删除,编辑…)
2.权限管理(不同用户不通权限) useradd ... 添加用户 passwd ...登录用户
3.用户管理(创建,删除….)
4.磁盘管理(挂载)
5.网络管理
6.软件管理
等等

平时我们如何使用Shell呢?

1 输入命令,低效
2 shell script:shell脚本  ,批量执行命令

shell提示符

[root@lqz ~]#
# root:当前用户
# @ :没有意义
#lqz:主机名
# ~:家目录
# #:表示超级用户
[lqz@lqz ~]$ 

Shell基础语法

#  命令  选项  参数   三部分组成
ls -a  /temp      
ls --all
# 以下三个一样
ls -l -a
ls -la
ls -al

命令补全

# 一下或者两下tab建
# 一下的话会直接找到你要用的命令
# 两下,可能会用到的全列出来

# ifconfig 在7的版本没有,需要装软件
yum insatll net-tools -y
yum insatll net-tools

# yum install bash-completion -y   补齐选项
ls - 两下tab建,所有的选项都会提示出来

命令快捷键

Ctrl + a    #光标跳转至正在输入的命令行的首部
Ctrl + e    #光标跳转至正在输入的命令行的尾部
Ctrl + c    #终止前台运行的程序   ##################
Ctrl + d    #在shell中,ctrl-d表示推出当前shell。
Ctrl + z    #将任务暂停,挂至后台
Ctrl + l    #清屏,和clear命令等效。  ##############
Ctrl + k    #删除从光标到行末的所有字符
Ctrl + u    #删除从光标到行首的所有字符
Ctrl + r    #搜索历史命令, 利用关键字,Tab建选中,只能找到最近的一条
Ctrl + w    #按单词或空格进行向前删除
Ctrl + 左右建 #按单词或空格进行向前向后跳

#在命令行前加面加 "#" 则该命令不会被执行

history

# history查看历史命令
# !数字   快速执行数字那一行
# !yum    快速执行最近一条yum命令


# history -d 70  把历史记录的第70行删除
# history -c   清空所有记录(连到人家服务器,操作完了,执行一下)
# history -w   可以把 历史记录写到用户家路径的.bash_history文件中

命令别名

 1 设置别名
 alias www='ls /'  只在当前bashshell中生效
 2 永久生效(全局,局部),
	echo "alias wk='ifconfig'" >> /etc/bashrc
 3 unalias wk  
 4 如果写到配置文件中,取消的话unalias wk+去配置文件删除
 5 内置的别名:在环境变量的配置文件中放着
	alias ls
 6 /bin/ls -al /root   # ls 内置了别名

 7 命令 --help
 8 man 命令

目录介绍

1 linux 是单根 / 根路径,windows是多根
2 bin和sbin:bin普通用户命令,sbin超级用户命令  都是usr下的文件夹软链接到根路径
3 home 、root:home普通用户的家路径,home下的用户名的文件夹
	-用户一登录系统,是在自己的家路径 jack--》/home/jack

目录之usr

/usr,相当于C:Windows
/usr/local,软件安装的目录,相当于C:Program
/usr/bin/,普通用户使用的应用程序(重要)
/usr/sbin,管理员使用的应用程序(重要)
/usr/lib,库文件Glibc 32bit
/usr/lib64,库文件Glibc 64bit

1 df -h  # 查看系统中文件的使用情况
2 du -sh /usr/  #查看当前目录下各个文件及目录占用空间大小



# 补充:远程执行ssh命令:
# ansiable:python写的,批量执行命令(速度比较慢,大量的主机,会卡顿)
# salstack:在客户端装agent,
# zabbix:监控,php写的,监控mysql运行情况

# /boot
存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)

常用命令

1 tree /home/  树状形式显示 yum install tree
2 cat :查看文本内容
    cat >> test2.txt <<EOF
    > ads
    > adf
    > EOF
3 less,more:文本查看,分页
	less /etc/services
4 head -n1 /etc/services :查看该文件第一行
5 ps aux | head -n5 :查看前5个进程
6 tail -f /var/log/messages   :动态查看文件变化
7 grep:查找命令
	-grep "lqz" test2.txt   查找文件中有lqz的行
    -ps aux | grep ssh    查看sshd进程是否在运行
8 less打开文件:ctrl+b:下翻页   	ctrl+f:上翻页


9 wget:下载yum install wget
	wget 路径  默认下载在当前路径
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
10 curl:连通性
	你的django:127.0.0.1:8080端口,先在本地curl一下,看看能不能通,可能是防火墙,阿里云的安全组
	curl -o /home/a.png https:72743-20190.png
11 上传下载 (4g以内)
	yum install lrzsz -y
    rz:上传,选择文件直接上传
    sz:sz 文件路径  可以下载到当前主机
12 which 命令:
去/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 路径找有没有
13 whereis -b ls  查找ls命令,只找二进制(可执行文件)
14 sort
	sort file.txt  对内容进行排序
    sort -t ":" -k2 file.txt
    sort -t ":" -n -k2 file.txt
15 uniq 去重,连续挨着的才能去,所以要跟sort连用
	sort file2.txt | uniq
16 cut 
    Im lqz, is QQ 306334678
    cut -d " " -f2,5 file.txt #把字符串按“ ” 分割,取出第2和第5个
17 wc
    wc -l /etc/services 
    ls | wc -l # 统计当前路径下有多少文件和文件夹
    ps aux |grep ssh | wc -l # 统计有多少个ssh相关的进程

文件属性文件类型

ls -l
ls -lh  以人性化显示,kb,gb
-:文件类型       
rw-r--r--.:权限 
1:硬链接的
root:属主(属于哪个用户)
root:属组(属于哪个组)
43856 :大小
Aug 19 11:54 :修改时间
a.png:文件名字

文件类型:
-   #普通文件(文本, 二进制, 压缩, 图片, 日志等) 
d   #目录文件

b   #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c   #设备文件(字符设备),终端 /dev/tty1, /dev/zero
s   #套接字文件, 进程间通信(socket)
p   #管道文件
l   #链接文件

通过file来查看详细的类型
  file a.txt 
  file /bin/ls
        

软连接,硬连接

1 软链接和硬链接:软链接新建inode,硬链接指向同一个inode
2 软链接---》快捷方式
	-ln -s a.png /home/jack/a.png
	-一般咱们对可执行文件建立软链接(删除不会删除原来)
    -软链接目录: 
    	redis-3.2.1---->编译安装
        redis-3.2.1/bin  路径配到环境变量
        软件升级
        redis-4.2.1
        
        
        -建立软链接redis---》redis-3.2.1
        redis/bin  路径配到环境变量
        软件升级
        redis软链接到---》redis-4.2.1
3 ln  /root/file /tmp/file_hard  (了解)

vim

# yum install vim -y
# 普通模式、编辑模式、命令模式
# 普通模式:
	-上下翻
    -yy  复制一行
    -p   粘贴
    -dd  剪切
    -p   把上面剪切的粘贴上
# 编辑模式
	-i:insert插入
    -a:append追加
    -o:换行
    -正常写就可以了
    -esc回到普通模式
    
# 命令模式:
	-不能从编辑模式直接进,只能先到普通模式按 :  进入命令,退出命令模式esc
     -w  表示保存
     -q   退出
     -!  强制退出
     -修改了文件后保存:  wq    wq!
     -修改了不想保存退出: q     q!
     -:set nu 显示行号
     -:set nonu 不显示行号
     -/字符串    搜索这个字符串
     -:%s#sbin#test#g #替换整个文本文件中包含sbin的替换为test

用户相关

#1  id  查看当前用户信息
uid=0(root) gid=0(root) groups=0(root)
#2  用户信息保存在 cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
#3  密码存放路径 cat /etc/shadow
#4 约定不同用户的uid属于某个范围(了解)
# 5 用户的增,删,改
	-useradd(一个用户只能属于一个主组,属于多个附加组)
    	-groupadd sa  新增一个组
        -groupadd sa1  新增一个组
        -groupadd students 新增一个组
        -useradd -u 5001 -g students -G sa,sa1 -c "2020 new student" -s /bin/bash lqz1
    -创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统 
       useradd mysql -M -s /sbin/nologin
    -usermod
    	-usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx
        -usermod -L change_bgx  #锁定后会无法登陆系统
        -usermod -U change_bgx
    -userdel
    	-userdel egon  # 删除用户,不删家目录
        -userdel -r egon1 # 删除用户,删家目录
        
#6  改密码
	-passwd root
#7 组增删改
	-groupadd no_gid   新增组
    -groupmod -g 1111 student  改组id号
    -groupmod student -n new_student  改组名字
    -groupdel new_student   删除组(组下没有人,把人删除,再删)
 
# 8 su 和sudo
	-su 切换用户
    	-su - jack:打开新的shell,会加载自己的环境变量
        -su jack:不打开新的shell,不会加载它的环境变量
    -sudo 普通用户可以有一些超级用户的权限,不需要输入密码
    	usermod jack -G wheel  # 把jack用户加入到了wheel组
        -你这个用户没有权限,你尝试 sudo mkdir ll试一下,不行,超级管理员没有给你配这个权限

特殊权限:权限属性chattr

#选项: + 增加权限 -减少权限 =等于某个权限
# a:让文件或目录仅可追加内容
# i:不得任意更动文件或目录
# 给某个文件或者文件夹加特殊权限
	-chattr +i lqz.txt
    -chattr -i lqz.txt

压缩解压

#1  Windows的压缩包与Linux的压缩包能否互通
	windwods:rar,zip  
    linux:tar.gz,zip互通,不支持rar
# 2 gzip (只能压一个文件,不能压文件夹,会把原来的删除)
	-gzip file
    -gzip -d file
    -有什么用?
   	-cd /etc/yum.repos.d/
#3 zip的压缩和解压
	-yum install zip unzip -y
    -zip  filename.zip  filename  # 压单个文件
    -zip -r home.zip /home/   #把home文件夹压缩
    -unzip  home.zip   #解压
    -unzip -l  home.zip # 不解压,看内容
    -unzip home.zip  -d /opt/   # 把当前路径下的home.zip 解压到opt
    
 # 4 tar打包与压缩
	tar -czf 文件        --->压缩成tar.gz
    tar -xf  xx.tar.gz  --->解压xx.tar.gz
   
    tar -xzvf  xx.tar.gz :解压tar.gz,详细过程列出来
   
    tar -czf home.tar.gz dd/ lqz1 lqz2 /home/	# 支持跨文件夹压缩
    
    tar czf etc.tar.gz --exclude=etc/services etc/  # 排除文件
    tar xf /etc/local.tar.gz  -C /tmp  # -C指定解压到哪个路径

软件管理:rpm

#1  红帽的软件安装包(windows的:exe,mis)
#2  mount /dev/cdrom /mnt 把光盘挂在到 /mnt文件夹
#3  Linux中除了rpm安装软件,是否还有安装软件方式
	-源码安装-->官网下源码--》编译安装---》最新
    -rpm包,预先编译打包,安装简单,yum安装,本质就是rmp安装--》稍微老一些
    -二进制包:绿色包
    
    -安装rpm的软件:rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
    -强制安装:rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm
    
    -rpm -q :查看这个软件是否安装********
    -rpm -qa |grep tr  :列出所有安装的软件
    -rpm -ql :查询指定软件包所安装的目录、文件列表rpm -ql unzip *****
    -rpm -qc unzip:查看这个软件的配置文件位置
    -rpm -qf /etc/pam.d/vsftpd  :查看配置文件属于哪个软件
    -rpm -qlp trace-cmd-2.6.0-10.el7.x86_64.rpm :查看该软件包安装后会释放哪些文件
    
    -使用远程地址安装:rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.8-2.el7.x86_64.rpm
        
    -rpm -Uivh  升级软件需要用  U
    -rpm -e zabbix-agent
    
# 缺点:无法自动处理依赖关系 有一些包需要依赖其他包才能下载 用rpm无法下载 即使忽略依赖关系下载下来 也没办法使用

yum仓库,源

# 1 Yum是RedHat以及CentOS中的软件包管理器。能够通过互联网下载 .rpm 包并且安装,并可以自动处理依赖性关系,无须繁琐地一次次下载、安装

# 2 cd /etc/yum.repos.d/  路径下有xx.repo 文件---》yum源

# 3 换阿里云的源
	wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
        
# 4 配置其他源
	-wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
	-yum install nginx 
    
    -yum provides ipconfig  # 通过命令查软件,这个命令属于哪个软件

   	-rpm -qf `which ifconfig` # 查命令属于哪个软件,前提是该软件安装了

基本权限chmod

1 rwx                 r-x       r-x
  属主(文件所有者)      属组权限    其他人权限
2 权限详解
    r:read读权限
    w: write写权限
    x:可执行
3 修改权限
	7=4(r)+2(w)+1(x)
	chmod 777 文件夹/文件

软件管理之二进制安装

1 会了yum安装,为什么还要会二进制安装(编译安装)
	-官方不提供yum安装
    -二进制安装是最新的
2 向服务器传递文件的几种方式 
	-scp nginx-1.18.0.tar.gz root@101.133.225.166:/home/jack 
    -sz,rz
    -xftp软件来传
    
    
3 源码安装nginx
	-1 下载
    -2 解压
    -2.1 安装依赖
    	-yum install -y pcre-devel gcc gcc-c++ make zlib-devel openssl-devel
    -3 通过configure 生成配置信息,配置相关的选项,并生成Makefile,软件安装的信息
    	./configure --prefix=/usr/local/nginx
    -4 make 按照Makefile生成的安装软件
    -5 make install:将二进制文件拷贝至对应的目录中
    -6 目录介绍
    	conf :配置文件都放在这
        html :静态文件存放路径,index.html
        logs :日志
        sbin :可执行文件
    -7 命令介绍
        nginx  # 启动
        nginx -s reload # 重新加载,修改配置文件
        nginx -s restart  # 重启
        nginx -s stop # 停止
    -8 在任意路径敲nginx都能执行
    	-建立软链接  ln -s /usr/loacl/nginx/sbin/nginx /sbin/nginx
        -把/usr/loacl/nginx/sbin/路径加入环境变量
        -想使用systemctl 管理(制作系统服务)

进程管理

#1  ps -aux 用它,[系统进程]
#2  ps -ef
#3  ps -aux|grep id,进程名字,
# 4 top实时看状态
# 5 kill -l
# 6 kill -9 进程id号 强行关闭
# 7 pkill -9 nginx  关闭nginx所有进程
# 8 killall nginx   关闭nginx所有进程


# 通过来管理进程screen
yum install screen -y
创建一个窗口
screen -S myjobs
执行耗时任务,进程
ctrl+a+d  退出当前bashshell但是耗时任务还在后台运行
screen -r myjobs 调到前台执行
screen -list  查看所有任务

系统服务

#1  centos6 上启动服务service start network
#2  centos7 启动服务:systemctl start network

#3  cd /usr/lib/systemd/system/

###制作系统服务

#4 vim mynginx.service

[Unit]
Description=my nginx
After=network.target  #在哪个服务启动后启动
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecRestart=/usr/local/nginx/sbin/nginx -s restart
ExecReload=/usr/local/nginx/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target

# 以后就支持使用 systemctl start mynginx.service

# 查看服务状态:
	systemctl status mynginx.service
    # disabled表示没有开机自启动
    Loaded: loaded (/usr/lib/systemd/system/mynginx.service; disabled; vendor preset: disabled)
# 开机自启动
	systemctl enable mynginx
# 取消开机自启动
systemctl disable mynginx.service
posted @ 2023-11-10 20:02  PiggThird  阅读(28)  评论(0)    收藏  举报