【Linux系统】Ubuntu的简单操作

什么是 Ubuntu?

Ubuntu(乌帮图)是一个非洲词汇,它的意思是"人性对待他人"或"群在故我在"。Ubuntu发行版将Ubuntu精神带到软件世界之中。

目前已有大量各种各样基于GNU/Linux的操作系统,例如:Debian,SuSE,Gentoo,RedHat和Mandriva,当然还有Ubuntu。Debian是一个广受称道、技术先进且有着良好支持的发行版,Ubuntu正是基于Debian之上,旨在创建一个可以为桌面和服务器提供一个最新且一贯的Linux系统。

Ubuntu项目完全遵从开源软件开发原则,并鼓励人们使用、完善和传播开源软件。也就是说Ubuntu目前是并将永远是免费的。

GNU/Linux系统简介
  • 桌面系统Gnome

    • 成熟的linux桌面系统有Gnome和KDE,其中Gnome用C编写,而KDE则是用C++编写的。
  • 终端与shell

    • 打开一个终端,即运行一个shell程序。shell是一个命令行解释器,它使得用户能够与操作系统进行交互。
  • APT软件包管理

    • 常用命令集有: apt-get ,apt-cache等。
  • Linux分区与目录结构

    • Linux中分区从属于目录,Windows中目录从属于分区。

    常用目录

     / 根目录
     /root  root  用户目录
     /home/username  普通用户目录
     /etc  配置文件目录
     /bin  命令目录
     /sbin  管理命令目录
     /usr/bin | /usr/sbin  系统预装的其他命令
    

Linux系统的框架(简易版本):(绘画能力有限,见谅!)

shell是一个命令解释器,它可以用来启动、挂起、停止甚至编写程序。shell是Linux操作系统的一个整体组成部分,也是Linux操作系统和UNIX设计的一部分。

shell命令提示符
  • Shel提示符标识了命令行的开始,通常Shell命令提示符采用以下的格式:
    • username@hostname:pathname$
    • 其中:
      • username ------> 当前登陆的用户名
      • @ ------> 用户名与主机名的分隔符
      • hostname ------> 当前登陆的主机名
      • : ------> 主机名与路径名的分隔符
      • pathname ------> 当前路径名
      • $ ------> 普通用户命令开始提示符(超级用户是#)
shell命令格式
  • $command [-options argument1 argument2 ------> 命令名 [选项] <参数1> <参数2>...
  • 其中:
    • command ------> 命令名称
    • options ------> 选项(一般由连字符-引导) : [选项]是对命令的特别定义,以减号(-)开始,多个选项可以用一个减号(-)连起来,例如:ls -l -h 与 ls -lh 相同。
    • argument ------> 参数:<参数>提供命令运行的信息,或者是命令执行过程中所使用的文件名。
      • 命令的三要素之间要用空格隔开。
      • 一条命令要书写多行,用反斜杠 \ 表明未结束。
      • 多条命令同时写在一行,用分号 ; 隔开。
      • Shell命令是Linux和Unix系统中的基础,用于完成各种操作,如文件管理、程序执行、文本处理等。

shell的种类 :sh、bash、csh、tcsh、ash 等。

(1).sh shell

全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

(2). csh shell

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

(3). tcsh shell

是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

(4). ash shell

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

(5). bash shell

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

shell常用命令

工具命令

	man 是 manual 的缩写
	man 帮助用法演示
    	man ls
	man 也是一条命令,共分为9章,可以使用man命令获得man的帮助
    	man 7 man
	要想掌握一个函数:你必须了解它的原型:通过man手册获取printf的原型
		man 3 printf 
		
	help
	shell(命令解释器)自带的命令成为内部命令,其他的是外部命令
	内部命令使用 help 帮助
    	help cd
	外部命令使用help帮助
    	ls --help
    	touch --help //可以来查看touch指令的用法
    	
	可以通过type来判断一个命令是内部还是外部命令
   	 	type ls
    	type cd
    
    history 显示历史命令
    	history [选项]
    	
    echo 显示文本或变量的内容 --> echo [选项] [字符串/变量]
    	echo "Hello World"
    	echo $PATH
    	
    date 显示系统日期和时间
    	date [选项]

文件管理

显示当前的目录:

	pwd 显示当前的目录名称

查看文件:

	ls 查看当前目录下的文件
	ls /  /root    这样会同时查看根目录和 /root目录下的文件
常用参数
	-l 长格式显示文件
	-a 显示隐藏文件
	-r 逆序显示(默认按照文件名排序)
	-t 按照时间顺序显示   ls -l -r -t (会按照时间逆向排序) ls -lrt
	-R 递归显示    -h 人性化显示、    -d 只显示目录

更改当前的操作目录:

	cd 更改当前的操作目录:
	cd /path/to/... 绝对路径:相对于根目录来说的,从根目录出发
	cd ./path/to/... 相对路径: 相对于当前路径,从当前路径出发
	cd ../path/to/... 相对路径

	cd 目录	//切换路径
	cd 	//切换回自己的工作目录
	cd ..		//切换到上一级
	cd -		//切换到上一次

目录文件的创建与删除:

	mkdir  建立空目录
	mkdir a

	常用参数
		-p  递归创建多级文件夹

	rmdir 删除空文件夹
	rmdir a

	rm 可以删除非空目录及文件

	常用参数
		-r 删除目录
		-f 强制删除,不提示
		需要注意,rm -rf 后面可以跟多个目录
		不要出现 rm -rf / usr 这种,会从根目录开始删除

复制和移动目录:

	cp 复制文件和目录
	cp /root/a /tmp

	常用参数
		-r/R 递归复制目录
		-v 显示过程
		-p 保留文件原有更新时间(属性)
		-a 时间戳+所有权+复制连接文件属性而非档案本身    -f 强行覆盖    -i 覆盖之前先行提示

	mv 移动文件或者重命名
	mv /a /other
	mv /a /tmp
	mv /a /tmp/b(移动+重命名)

	常用参数
		-i 覆盖文件前提示

生成文件:

	touch (1)是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;(2)是用来创建新的空文件。
	touch(空格)文件名	------> 示例: touch hello.c     ---->在当前位置下创建一个文件,名为:hello.c 
	
	touch file{1..10}	//创建file1---file10共10个文件
	touch -t 201810121230 hh.sh 【-t用十进制数】	//设定文件的时间戳
	touch -r hh hh.sh    【touch -r目标文件  源文件】	 //更新log.log的时间和log2012.log时间戳相同
	
	常用参数
		-a 仅更改访问时间
		-c, --no-create 不创建任何文件
		-d, --date=STRING 解析 STRING 并使用它来代替当前时间
		-f (忽略)
		-h, --no-dereference 影响每个符号链接而不是任何引用的文件(仅在可以更改符号链接的时间戳的系统上有用)
		-m 仅更改修改时间 
		-r, --reference=FILE 使用此文件的时间而不是当前时间
		-t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间 
		--time=WORD 更改指定时间:WORD 为 access、atime 或 use:等同于 -a      
								WORD 为 modified 或 mtime:等同于 -m 
		--help     显示此帮助并退出     
		--version  输出版本信息并退出

通配符

常用通配符:

	* 匹配任何字符串
	? 匹配1个字符串
	[xyz] 匹配xyz任意一个字符
	[a-z] 匹配一个范围
	[!xyz]或者[^xyz] 不匹配

文本内容查看

	cat 文本内容显示到终端
		显示全部
		
	head 查看文件开头
		head test.txt  默认查看前10行
	    head -5 test.txt 
		head -c 20 runoob_notes.log  显示文件前 20 个字节

	tail 查看文件结尾
		tail -1000f catalina.out
		常用参数 
		-f 文件内容更新后,显示信息同步更新
		
	grep 根据模式匹配搜索文件内容 --> grep [选项] 模式 [文件]
		grep "hello" myfile.txt
		
	find 根据指定条件搜索文件 --> find [路径] [选项] -name 模式
		find /home -name "*.txt"

	sort 对文本文件进行排序 --> sort [选项] [文件]
		sort myfile.txt
	
	wc 统计文件内容信息    
		wc -l /tmp/test.txt    查看文件有多少行
		-c或--bytes或------chars:只显示Bytes数;
		-l或------lines:只显示列数;
		-w或------words:只显示字数。

	more 逐页显示文件内容 分行显示
		more myfile.txt
	less 逐行显示文件内容,支持向上翻页
		less myfile.txt

打包和压缩

最早的Linux备份介质是磁带,使用的命令是tar。可以打包后的磁带文件进行压缩储存,压缩的命令是 gzip 和 bzip2,经常使用的扩展名是 .tar.gz .tar.bz2 .tgz。

	tar 打包命令
	常用参数
		c 打包
		x 解包
		f 指定操作类型为文件       v 显示进度    P 使用绝对路径
	打包
	tar cf /tmp/etc-backup.tar /etc      把  /etc 这个文件夹打包放在/tmp/etc-backup.tar会提示,但是也能成功:tar: Removing leading `/' from member names

	tar cPf /tmp/etc-backup.tar /etc      使用绝对路径 (没有提示)
	tar czf /tmp/etc-backup.tar.gz /etc  (tar集成了gzip和bzip2)
	tar cjf /tmp/etc-backup.tar.bz2 /etc  (压缩比例更高)

	解包
	tar xf /tmp/etc-backup.tar -C /root  把 tar包解压到 /root 目录下
	tar zxf /tmp/etc-backup.tar.gz -C /etc
	tar zjf /tmp/etc-backup.tar.gz -C /etc
	
	gzip 压缩文件 --> gzip [选项] 文件 --> 由于tar集成了gzip和bzip2,所以通常情况下直接使用tar即可
		gzip myfile.txt
		gunzip myfile.txt.gz
		
	zip 压缩文件 --> zip [选项] 文件/目录
		zip myfile.zip myfile.txt
		unzip myfile.zip

用户与权限管理

	useradd 新建用户
		useradd user1 (可以用 id user1 来验证是否存在)
		创建一个用户后,自动在 /home建立Home目录,并且创建一些隐藏文件。同时,在 /etc/passwd 这个文件里会加入新用户user1的数据,/etc/shadow里面也有会相关数据(密码相关)。如果没有组的话,创建一个同名的组。
		userdel 删除用户
		userdel user1
		userdel -r user1 同时删除Home目录
	passwd 修改用户密码
		passwd user1
		passwd 更改当前用户密码
		/etc/passwd 和 /etc/shadow 里面的数据也被删除
	usermod 修改一个用户账户
		usermod -d /home/other user1  Home目录从 /home/user1 改成 /home/other
	chage 修改用户生命周期    设置用户密码的过期时间,甚至用户本身的过期时间

组管理命令

	groupadd 新建用户组
		groupadd group1
		useradd user1
		usermod -g group1 user1 把user1这个用户的组改成group1
		useradd -g group1 user2 新建用户user2时就把它放到group1组下
	groupdel 删除用户组    groupdel group1 删除组group1

用户切换

	su 切换用户
		su - USERNAME 使用 login shell 方式切换用户
		su USERNAME 不完全切换,比如还是在 /root下而不会自动跳转到用户家目录

	sudo 以其他用户身份执行命令
		visudo 设置需要使用sudo的用户(组)

用户和用户组的配置文件介绍

	/etc/passwd 用户配置文件,7个字段

	user3:x:1003:1003::/home/user3:bin/bash
	user3:用户名称
	x:是否需要密码验证,x表示需要,空表示不需要
	1003:用户的uid,用户的id信息,唯一识别用户的标识。root是0。
	1003:用户的gid,表示组id信息
	第五个字段:注释
	/home/user3:Home目录
	/bin/bash:用户登录后的命令解释器。/sbin/nologin 表示不能登录

	/etc/shadow 保存用户和用户密码相关信息的
	第一个字段:用户名称
	第二个字段:用户加密过后的密码(看到也没用,经过处理,即使相同的密码也会显示不同)

	/etc/group 用户组相关的配置文件,4个字段
	group:x:10:another
	group:组的名称
	x:是否需要密码验证
	10:gid
	another:其他组设置,说明another这个用户的第二个组是group比如输入 id user1uid=1001(user1) gid=1001(group1) 组=1001(group1)id anotheruid=1002(another) gid=1002(another) 组=1003(group)  查找another信息,发现他的第二个组是group

文件和目录的权限表示方法

	文件类型
	-    普通文件
	d   目录文件
	b   块特殊文件
	c   字符特殊文件
	l    符号链接
	f    命名管道
	s    套接字文件


	文件权限的表示方法

		字符权限表示方法
		r    读
		w    写
		x    执行

		数字权限的表示方法
		r=4
		w=2
		x=1

	文件权限的表示方法
	rwxrwxrwx
	第一个表示文件属主的权限,第二个表示文件属组的权限,第三个表示其他用户的权限

	创建新文件有默认权限,根据umask值计算,属主和属组根据当前进程的用户来设定


	目录权限的标识方法
	x    进入目录
	rx   显示目录内的文件名
	wx   修改目录内的文件名

文件权限的修改方法和数字表示方法

	修改权限命令(测试的时候别用root,root不受限制)

	chmod    修改文件、目录权限
		chmod u+x /tmp/testfile    u表示属主
		chmod u=rwx /tmp/testfile  
		chmod g-r  /tmp/testfile   g表示属组
		chmod 0-r /tmp/testfile    o表示其他用户
		chmod a+r /tmp/testfile    a表示所有
		chmod 755 /tmp/testfile	   如果属主没有权限,所属的组有权限,以属主为准,还是没有权限。
	chown    更改属主、属组
		chown user1 /test   把test这个目录的属主改成user1
		chown :group /test   把test这个目录的属组给成group    chown user1:group /test   一起修改
	chgrp    可以单独更改属组、不常用

	linux一般创建一个文件默认会赋予666权限,然后根据用的umask值来计算。
	用户默认umask值为022,所以一般是 666-022=644,对应rw-r--r--

特殊权限

	SUID  用于二进制可执行文件,执行命令时取得文件属主权限
 		 如,/usr/bin/passwd

	SGID  用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
  		 文件共享时使用
	SBIT  用于目录,该目录下新建的文件和目录,仅root和自己可以删除
  		 如 /tmp

网络管理

网络状态查看

	net-tools VS iproute

	1. net-tools
		ifconfig
		route
		netstat

	2. iproute2
		ip
		ss

网卡名称:

   ifconfig查看网卡名称
        · eth0 第一块网卡(网络接口)
        · 你的第一个网络接口可能叫做下面的名字
            · eno1 板载网卡
            · ens33 PCI-E网卡
            · enp0s3 无法获取物理信息的 PCI-E 网卡
            · CentOS7使用了一致性网络设备命名,以上都不匹配则使用eth0
 
     当工作中大量管理网卡,所有设备的网卡最好都是以 eth0 命名,这样可以批量操作。
     网络接口命名修改
     网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
     编辑 /etc/default/grup 文件,增加 biosdevname=0 net.ifnames=0
     更新 grub
         # grub2-mkconfig -o /boot/grub2/grub.cfg
     重启
         # reboot

     组合,biosdevname=0 net.ifnames=0,则网卡名为 eth0
              biosdevname=1 net.ifnames=0,则网卡名为 em1
              biosdevname=0 net.ifnames=1,则网卡名为 ens33

ifconfig:

	普通用户要使用ifconfig,要使用 /sbin/ifconfig
	如果只想要看某一张网卡,可以 ifconfig 网卡名
	
	mii-tool eth0  查看网卡物理连接情况
	route -n 查看网关(路由),使用 -n 参数不解析主机名(把ip解析成域名)

网络配置命令:

	ifconfig <接口> <IP地址> [netmask 子网掩码]      设置网卡的ip地址
	ifup   <接口>    启用网卡
	ifdown <接口>    禁用网卡

网关配置命令:

	添加网关
	route add default gw <网关ip>
	route add -host <指定ip> gw <网关ip>
	route add -net <指定网段> netmask <子网掩码> gw <网关ip>

网络故障排除

	ping 检测是否连接到主机
	    ping www.baidu.com 
	traceroute  跟踪当前主机到目标主机的网络状态,-w 1超时最多等1秒
	    traceroute -w 1 www.baidu.com
	    
	mtr  显示自己主机的网络状态
	
	nslookup  域名解析成ip
	    nslooup www.baidu.com
	
	telnet  检测端口
	    telnet www.baidu.com 80
	
	tcdump  网络抓包   -i any 抓取所有网卡里的数据包,-n 把域名解析成 ip ,port 80 抓取指定端口  host 10.0.0.1 抓取当前主机到某个主机的数据包
	    tcpdump -i any -n port 80
	    tcpdump -i any -n host 10.0.0.1
	    tcpdump -i any -n host 10.0.0.1 and port 80
	    tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename 捕获并且保存
	
	netstat 监听地址 -n 域名转换,-t 显示tcp ,-p 进程 ,-l tcp状态 listen
	    netstat -ntpl
	
	ss 跟netstat一样,参数也一样,显示的格式不一样
	
	网络服务管理程序分为两种,分别是 SysV 和 systemd(centos7)
	service network status|start|stop|restart
	
	网络配置文件
	
	/etc/sysconfig/network-scripts/ifcfg-eth0 (网卡配置项)
	/etc/hosts

软件包管理

rpm

	rpm 命令常用参数
	    -q 查询软件包    rpm -qa 查询所有软件包    rpm -q vim-common 查询某个软件包
	    -i  安装软件包    rpm -i vim-enhanced-7.4.160-5.el7.x84_64.rpm  (要全称)
	    -e 卸载软件包    rpm -e vim-enhanced   (只要名字,不需要版本号等)用 rpm 安装的问题:如果一个软件包依赖其他软件包,那么就会安装失败。需要操作者自己解决依赖关系。

yum

	CentOS yum源
	    http://mirror.centos.org/centos/7/
	国内镜像
	    https://opsx.alibaba.com/mirror
	yum 配置文件
	    /etc/yum.repos.d/CentOS-Base.repo
	
	可以修改配置文件
	[base]
	name=CentOS-$releasever - Base -mirrors.aliyun.com
	failovermethod=priority
	baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
	             http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
	gpgcheck=1
	gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
	
	或者直接用别人已经写好的配置文件
	wget -O /etc/yum.repo.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo需要清除缓存yum makecache
	
	常用选项
	
	install 安装软件包
	remove 卸载软件包
	list |grouplist 查看软件包
	update 升级软件包

其他安装方式

	二进制安装
	源代码编译安装
	
	wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
	tar zxf openresty-VERSION.tar.gz
	cd openresty-VERSION/
	./configure --prefix=/usr/local/openresty
	make -j2   (用2核编译)
	make isntall

升级内核

	rpm 格式内核
	    查看内核版本
	        uname -r
	    升级内核版本
	        yum install kernel-3.10.0   这种方式一般不能升级到最新
	        epel软件仓库会有较高的软件版本。yum install epel-release -y
	    升级已安装的其他软件包和补丁
	        yum update    除了升级内核,还会升级软件包。正常不要使用。
	
	
	源代码编译安装内核
	yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
	
	下载并解压缩内核
	https://www.kernel.org
	tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
	
	配置内核编译参数
	cd /usr/src/kernels/linux-5.1.10/
	make menuconfig | allyesconfig | allnoconfig
	make allyesconfig (无脑全选)
	
	使用当前系统内核配置
	cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
	
	
	查看cpu
	lscpu
	
	编译
	make j2 all
	
	安装内核
	make modules_install
	make install

进程管理

进程的概念和查看进程

	进程-运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
	
	查看命令
	ps
	    -e 表示所有的终端运行的进程
	    -f  显示更多信息,比如 UID、PPID(父进程)、CMD(命令的完整路径)
	    -L  多显示 LWP ,线程信息
	    ps -eLf  常用命令
	
	pstree  查看进程树
	    
	top  动态查看进程信息top -p 进程号

	shutdown 关机或重启系统 --> shutdown [选项] 时间
		shutdown -h now
	
	结论:
	进程也是树形结构
	进程和权限有着密不可分的关系

进程的优先级调整

	调整优先级
	    nice 范围从 -20 到 19,值越小优先级越高,抢占资源就越多
	        nice -n 10 ./rest.sh  启动的时候调整为 10
	    renice 重新设置优先级
	        renice -n 15 19312  已经处于启动的情况下进行调整。根据进程号
	进程的作业控制
	    &符号,后台运行
	        ./test.sh &
	    jobs 把处于后台运行的程序调到前台显示
	        jobs 能得到一个编号
	        fg 编号,可以调到前台
	    ctrl +z,把已经处于前台的程序调到后台,状态会stop

信号量

信号量是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。

	使用信号的常用快捷键和命令
	kill -l 查看所有的信号
	    SIGINT 通知前台进程组终止进程 ctrl + c,2号信号
	    SIGKILL 立即结束程序,不能被阻塞和处理 kill -9 pid ,9号信号 

守护进程和系统日志

	守护进程(精灵进程)
	
	使用 nohup 与 & 符号配合运行一个命令 (nohup进程不是守护进程)
	    nohup 命令使进程忽略 hangup(挂起)信号。关掉终端这个进程依然可以运行,忽略输入并且把输出打印到 nohup.out
	守护进程(daemon)和一般进程有什么差别呢?
	    开机自启,守护进程不需要终端,输出可以打印到特殊的文件中,进程所占用的目录是根目录。cd /proc/ 这个目录是内存信息,相应的进程会有进程号同名的目录。
	
	使用 screen 命令,进入screen环境后,如果远程连接断掉了,可以通过screen恢复工作现场
	    screen 进入 screen 环境
	    ctrl +a然后再单独按d退出(detached)screen 环境
	    screen -ls 查看 screen 的会话
	    screen -r sessionid 恢复会话系统日志文件 /var/log系统常规日志:messages内核运行情况:dmesg安全日志  secure定时任务日志 cron

内存和磁盘管理

内存和磁盘使用率查看

	内存使用率查看
	free
	    -m  以兆的方式显示
	    -g   以G的方式显示,但是会被四舍五入。一般不用
	top
	
	磁盘使用率的查看
	fdisk
	    -l 查看
	    磁盘分区一块硬盘最多分15个分区
	df 既能够看到分区,又能够看到挂载到的目录
	    -h 人性化可读
	du (实际占用的空间)
	    -h 人性化显示
	    -s  只显示总计
	du与ls的区别
	    du 是实际占用的,ls算上空洞数据。

常见文件系统

Linux 支持多种文件系统,常见的有:

	ext4(centos6)
	xfs(centos7)
	NTFS(需安装额外软件,window常用,有版权)

磁盘分区和挂载

	常用命令
	fdisk
	mkfs
	parted
	mount
	
	
	常见配置文件
	/etc/fstab
	
	用fdisk创建分区(一个硬盘设备可以创建多个分区,也可以创建一个)
	1:fdisk -l 查看有几个硬盘设备及分区
	2:fdisk /dev/sdc    (比如有设备sdc,则可以针对sdc进行分区)
	3:之后 m 键是帮助
	4:n 表示新建一个分区
	5:新建分区时,需要选择主分区和扩展分区,其中 p表示主分区,最多有4个。e表示扩展分区(里面可以建立逻辑分区)。一般把一块硬盘划分为一个主分区。使用扩展分区时,只能建立3个主分区。
	6:选择区分编号1-4
	7:指定分区扇区大小,默认2048
	8:指定分区大小。默认全部。可以 + 20G等可以选择分区大小
	9:q 表示退出,分区不生效。w 表示生效
	
	建立完分区后,需要对分区进行格式化。
	
	mkfs.ext4  mkfs.xfs等命令
	mkfs.ext4 /dev/sdc1
	
	然后要进行操作,linux里都是文件级别的操作,需要挂载到某个目录下
	mkdir /mnt/sdc1
	mount /dev/sdc1 /mnt/sdc1 挂载上去
	对/mnt/sdc1的读写就会落入sdc1设备上
	
	1、一个硬盘
	2、进行分区
	3、格式化
	4、挂载
	5、对指定目录进行操作
	
	
	需要注意的事情:
	如果一个硬盘大于 2T ,不能使用 fdisk 进行分区,需要使用 parted
	parted /dev/sdd
	help 获取帮助
	
	mount 进行挂载是临时的,不是固化的
	vim /etc/fstab
	在文件中新增下面一句话
	/dev/sdc1 /mnt/sdc1 ext4 defaults(表示权限)0 0

系统综合状态查询

	使用 sar 命令查看系统综合状态
	    sar -u 1 10 CPU的查看,每隔1秒做采样,采样10次,
	    sar -r 1 10 看内存
	    sar -b 1 10 IO的情况(磁盘读写)
	    sar -d 1 10 查看每块磁盘的读写
	    sar -q 1 10 查看进程
	使用第三方命令查看网络流量
	yum install epel-release
	yum install iftop (网络情况)
	iftop -p (默认eth0)

将文件连接并传输到远程系统
scp

scp 命令用于Linux之间复制文件和目录,scp是 secure copy 的缩写。scp 是linux系统下基于ssh登录进行安全的远程文件拷贝命令。scp是加密的,rcp是不加密的,scp是rcp的加强版。

	scp [可选参数]  file_source file_target
	scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
	           [-l limit] [-o ssh_option] [-P port] [-S program]
	           [[user@]host1:]file1 ... [[user@]host2:]file2
	    
	    参数说明:
	    	-1: 强制scp命令使用协议ssh1
			-2: 强制scp命令使用协议ssh2
			-4: 强制scp命令只使用IPv4寻址
			-6: 强制scp命令只使用IPv6寻址
			-B: 使用批处理模式(传输过程中不询问传输口令或短语)
			-C: 允许压缩 (将-C标志传递给ssh,从而打开压缩功能)
			-p: 保留源文件的修改时间,访问时间和访问权限
			-q: 不显示传输进度条
			-r: 递归复制整个目录
			-v: 详细方式显示输出。scp和ssh(1)会显示出整个过程的调式信息。这些信息用于调试连接,验证和配置问题
			-c cipher:以cipher将数据传输进行加密,这个选项将直接传递给ssh
			-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh
			-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
			-l limit: 限定用户所能使用的带宽,以Kbit/s为单位
			-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式
			-P port: 注意是大写的P, port是指定数据传输用到的端口号
			-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项

		从本地复制文件到远程
		scp local_file remote_username@remote_ip:remote_folder  // 从本地复制文件到远程
		scp local_file remote_ip:remote_folder  // 省略了用户名,默认为root,等同于 scp local_file root@remote_ip:remote_folder
                    
		从远程复制到本地
		从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可:
		scp remote_username@remote_ip:remote_folder local_file

ssh

SSH 为Secure Shell 的缩写,SSH为创建在应用层和传输层基础上的安全协议。通过SSH协议远程登录其他主机。

	SSH(远程连接工具[客户端命令])连接原理:ssh服务是一个守护进程(daemon),系统后台监听客户端 /usr/bin/ssh 的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(默认监听在22端口),包括公共密钥等交换信息。
	ssh服务端由2部分组陈: openssh(提供ssh服务) openssl(提供加密的程序)
	备注:ssh的客户端图形化工具有: xshell、securecrt、Mobaxterm等
	
	传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
	而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
	SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的"通道"。
	
		ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
		ssh username@remote_ip

sshpass

sshpass 实用程序旨在使用键盘交互密码身份验证模式运行SSH ,但以非交互方式运行。

SSH使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。sshpass 在专用的TTY中运行SSH,让SSH认为它是从交互式用户那里获取密码的。

	安装 sshpass:
		yum install sshpass -y
		
	sshpass [-f filename | -d num | -p password | -e] [options]
		-p 密码 密码在命令行中给出。 (这是最不安全的选择,不应使用)
			用于sshpass通过SSH登录到远程服务器。假设密码为 abc。以下是使用sshpass选项的几种方法。
			 	sshpass -p "abc" ssh <username>@<服务器地址>
			-p在shell脚本中使用时,该选项如下所示:
			 	sshpass -p "abc" ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
		
		-f 文件名 密码是文件名的第一行。 
				echo'abc' > pass_file
				chmod 0400 pass_file
				sshpass -f pass_file ssh <username>@<服务器地址>
			
			在shell脚本中使用以下选项:
				sshpass -f pass_file ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
			
		-d number number是sshpass从运行程序继承的文件描述符。从打开的文件描述符中读取密码。 
		
		-e 密码来自环境变量"SSHPASS"。(密码应该是文件名的第一行)
				SSHPASS='abc' sshpass -e ssh <username>@<服务器地址>
			
			在shell脚本中使用时,该选项如下所示:
				SSHPASS ='abc' sshpass -e ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
			
			sshpass搭配使用rsync:
			下面使用了 -e 选项,该选项将密码传递给环境变量SSHPASS
				SSHPASS='abc' rsync --rsh="sshpass -e ssh -l <username>" /环境变量地址/地址
			可以 -f 像这样使用开关:
				rsync --rsh="sshpass -f pass_file ssh -l <username>" /环境变量地址/地址
			
			可以使用 sshpassGPG 加密的文件。使用该-f开关时,参考文件为纯文本格式。
				echo 'abc' // 创建文件
				.sshpasswd
				gpg -c .sshpasswd // 使用gpg加密文件
				rm .sshpasswd // 删除包含明文的文件
				gpg -d -q .sshpassword.gpg // 使用
				pass_file; sshpass -f pass_file ssh <username>@<服务器地址>

写代码中需要注意的点:

	shell 指令在linux中严格区分大小写, l  L 不同
	
	使用分号( ; ) 可以在一行中输入多个命令
		ls;lld ; echo "helloworld" ; lok
		
	按下Table键,自动补齐命令、目录或文件名
	
	系统会将过去输入过的命令记忆下来,只要按方向键中的上下箭头
	
	输入输出重定向:
		输入定向: 
		输出定向: >, >>
		如下图所示:


	管道:可以将多个命令组合到一起,把管道左边的命令的输出 作为右边命令的输入

这只是一些常用的Linux Shell命令的介绍和用法,还有很多其他命令可以去进一步了解和使用。使用这些命令可以帮助您更好地管理和操作Linux系统。

以上。仅供学习与分享交流,请勿用于商业用途!

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

相关推荐
我是唐青枫1 分钟前
Linux dnf 包管理工具使用教程
linux·运维·服务器
编程修仙1 小时前
Collections工具类
linux·windows·python
芝麻团坚果1 小时前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
写点什么啦1 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw1 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
不爱学习的YY酱2 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
DC_BLOG2 小时前
Linux-Nginx虚拟主机
linux·运维·nginx
XY.散人2 小时前
初识Linux · 信号处理 · 续
linux·信号处理
1900432 小时前
linux复习5:C prog
linux·运维·服务器
猫猫的小茶馆2 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件