目录
流行的Linux发行版本
Linux系统的启动顺序
禁止使用ping命令
鉴定故障解决办法
user 不在 sudoers 文件中。此事将被报告解决办法
修改文件或目录的所属用户与权限
1、chgrp:更改文件属组
2、chown:更改文件属主,也可以同时更改文件属组
处理目录的常用命令
读取文件内容
文件解压缩
Linux系统用户管理
Linux系统用户组的管理
实例1:
Linux磁盘管理
df
du
fdisk
磁盘格式化
磁盘挂载与卸除
Linux vi/vim
Linux yum命令
yum常用命令
国内 yum 源
安装步骤
Linux apt命令
apt 常用命令
Shell教程
Shell脚本
Shell环境
Shell变量基础
Shell 参数传递
Shell 运算符
算术运算符:
关系运算符
布尔运算符
逻辑运算符
字符串运算符
文件测试运算符
流行的Linux发行版本
Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
Linux系统的启动顺序
- 内核的引导。
- 运行 init。
- 系统初始化。
- 建立终端 。
- 用户登录系统。
禁止使用ping命令
通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
要想重新允许,则将1变为0即可:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
鉴定故障解决办法
su root鉴定故障是因为在安装linux系统时没有给root用户设置密码,重新设置密码即可:sudo passwd root
user 不在 sudoers 文件中。此事将被报告解决办法
以root用户登录、给/etc/sudoers加写权限。
vim /etc/sudoers
添加如下行即可:
修改文件或目录的所属用户与权限
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为 d 则是目录
- 当为 **** 则是文件;
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
更改文件属性:
1、chgrp:更改文件属组
语法:
chgrp [-R] 属组名 文件名
参数选项
- R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
语法:
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
如果我们需要将文件权限设置为 rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定.
处理目录的常用命令
- ls(英文全拼:list files): 列出目录及文件名
- cd(英文全拼:change directory):切换目录
- pwd(英文全拼:print work directory):显示目前的目录
- mkdir(英文全拼:make directory):创建一个新的目录
- rmdir(英文全拼:remove directory):删除一个空的目录
- cp(英文全拼:copy file): 复制文件或目录
- rm(英文全拼:remove): 删除文件或目录
- mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
读取文件内容
# 输出文件内容
cat 文件名
# 输出指定行
# 从头部输出(指定行)内容,默认10行
head [-n number] 文件名
# 从尾部输出(指定行)内容,默认10行
tail [-n number] 文件名
文件解压缩
tar
解包:tar zxvf filename.tar
打包:tar czvf filename.tar dirname
gz命令
解压1:gunzip filename.gz
解压2:gzip -d filename.gz
压缩:gzip filename
.tar.gz 和 .tgz
解压:tar zxvf filename.tar.gz
压缩:tar zcvf filename.tar.gz dirname
压缩多个文件:tar zcvf filename.tar.gz dirname1 dirname2 dirname3.....
bz2命令
解压1:bzip2 -d filename.bz2
解压2:bunzip2 filename.bz2
压缩:bzip2 -z filename
.tar.bz2
解压:tar jxvf filename.tar.bz2
压缩:tar jcvf filename.tar.bz2 dirname
bz命令
解压1:bzip2 -d filename.bz
解压2:bunzip2 filename.bz
.tar.bz
解压:tar jxvf filename.tar.bz
z命令
解压:uncompress filename.z
压缩:compress filename
.tar.z
解压:tar zxvf filename.tar.z
压缩:tar zcvf filename.tar.z dirname
zip命令
解压:unzip filename.zip
压缩:zip filename.zip dirname
Linux系统用户管理
添加用户:useradd 选项 用户名
参数说明:
- 选项:
- c comment 指定一段注释性描述。
- d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- g 用户组 指定用户所属的用户组。
- G 用户组,用户组 指定用户所属的附加组。
- s Shell文件 指定用户的登录Shell。
- u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- 用户名:指定新账号的登录名
例1:useradd -d /home/zhen -m zhen
此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)。
例2:useradd -s /bin/sh -g group -G adm,root zhen
此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
这里可能新建组:#groupadd group及groupadd adm
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
删除账号:userdel 选项 用户名
常用的选项是 r,它的作用是把用户的主目录一起删除。
例1:userdel -r zhen
修改账号:usermod 选项 用户名
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等
,这些选项的意义与useradd
命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
用户口令管理:passwd 选项 用户名
可使用的选项:
- l 锁定口令,即禁用账号。
- u 口令解锁。
- d 使账号无口令。
- f 强迫用户下次登录时修改口令。
例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******
为用户设置空口令:passwd -d zhen
锁定用户账户:passwd -l zhen
Linux系统用户组的管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
新建用户组:groupadd 选项 用户组
可以使用的选项有:
- g GID 指定新用户组的组标识号(GID)。
- o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
例1:
# 此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
groupadd group1
例2:
# 此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
groupadd -g 101 group2
删除用户组:groupdel 用户组
修改用户组:groupmod 选项 用户组
常用的选项有:
- g GID 为用户组指定新的组标识号。
- o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- n新用户组 将用户组的名字改为新名字
实例1:
groupmod -g 102 group2
此命令将组group2的组标识号修改为102。
实例2:
groupmod –g 10000 -n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3。
切换到其他用户组:newgrp 组名
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
批量添加用户:
Linux磁盘管理
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
- df(英文全称:disk full):列出文件系统的整体磁盘使用量
- du(英文全称:disk used):检查磁盘空间使用量
- fdisk:用于磁盘分区
df
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法:df [-ahikHTm] [目录或文件名]
选项与参数:
- a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
- k :以 KBytes 的容量显示各文件系统;
- m :以 MBytes 的容量显示各文件系统;
- h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
- H :以 M=1000K 取代 M=1024K 的进位方式;
- T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
- i :不用硬盘容量,而以 inode 的数量来显示
du
inux du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍 Linux du 命令。
语法:du [-ahskm] 文件或目录名称
选项与参数:
- a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
- h :以人们较易读的容量格式 (G/M) 显示;
- s :列出总量而已,而不列出每个各别的目录占用容量;
- S :不包括子目录下的总计,与 -s 有点差别。
- k :以 KBytes 列出容量显示;
- m :以 MBytes 列出容量显示;
fdisk
fdisk 是 Linux 的磁盘分区表操作工具。
语法:fdisk [-l] 装置名称
选项与参数:
- l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
磁盘格式化
mkfs [-t 文件系统格式] 装置文件名
选项与参数:
- t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
磁盘挂载与卸除
Linux 的磁盘挂载使用 mount
命令,卸载使用 umount
命令。
磁盘挂载语法:
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
磁盘卸载命令 umount
语法:**umount [-fn] 装置文件名或挂载点
选项与参数:
- f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
- n :不升级 /etc/mtab 情况下卸除。
例子:树莓派优盘挂载与卸除
优盘插入前:
优盘插入后:
可见多了一个分区sda4
df -h查看磁盘情况:(插入后已自动挂载到/media/pi/振这个位置)
手动卸载:(umount /dev/sda4)
将优盘重新挂载到/home/pi/zhen目录下(目录不存在则需要创建)
访问时发现挂载点为只读的解决办法:**sudo mount -o uid=pi,gid=pi /dev/sda4 /home/pi/zhen
-o 参数指定下用户和用户组即有了权限。
创建挂载点的时候记得也付下权限 mkdir -m 777 文件夹
其他权限问题:待研究
靠谱的解决权限问题的方案:
树莓派4B挂载U盘,修改owner,权限等失败问题解决_雨痕云的博客-CSDN博客
Linux vi/vim
第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等
第二部分:一般模式切换到编辑模式的可用的按钮说明
第三部分:一般模式切换到指令行模式的可用的按钮说明
特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。
举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。
Linux yum命令
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令。
yum 语法:yum [options] [command] [package ...]
- **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
- **command:**要进行的操作。
- **package:**安装的包名。
yum常用命令
-
- 列出所有可更新的软件清单命令:yum check-update
-
- 更新所有软件命令:yum update
-
- 仅安装指定的软件命令:yum install <package_name>
-
- 仅更新指定的软件命令:yum update <package_name>
-
- 列出所有可安裝的软件清单命令:yum list
-
- 删除软件包命令:yum remove <package_name>
-
- 查找软件包命令:yum search <keyword>
-
- 清除缓存命令:
- yum clean packages: 清除缓存目录下的软件包
- yum clean headers: 清除缓存目录下的 headers
- yum clean oldheaders: 清除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
国内 yum 源
网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。
将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。
安装步骤
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)
- CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
- CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
- CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
运行以下命令生成缓存
yum clean all
yum makecache
除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。
中科大的 yum 源,安装方法查看:Centos 镜像使用帮助 - LUG @ USTC
sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html
Linux apt命令
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
apt 语法:apt [options] [command] [package ...]
- options:**可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
- command:**要进行的操作。
- package:安装的包名。
apt 常用命令
-
列出所有可更新的软件清单命令:sudo apt update
-
升级软件包:sudo apt upgrade
列出可更新的软件包及版本信息:apt list --upgradeable
升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade
-
安装指定的软件命令:sudo apt install <package_name>
安装多个软件包:sudo apt install <package_1> <package_2> <package_3>
-
更新指定的软件命令:sudo apt update <package_name>
-
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>
-
删除软件包命令:sudo apt remove <package_name>
-
清理不再使用的依赖和库文件: sudo apt autoremove
-
移除软件包及配置文件: sudo apt purge <package_name>
-
查找软件包命令: sudo apt search <keyword>
-
列出所有已安装的包:apt list --installed
-
列出所有已安装的包的版本信息:apt list --all-versions
Shell教程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
Shell变量基础
#!/bin/bash
# 定义一个变量
NAME="ZHEN"
#使用变量$
echo "My Name is ${NAME}"
for skill in CPP JAVA NODEJS;do
echo "I am good at ${skill}Language"
done
# 只读变量的定义
myVar="onlyreadVar"
readonly myVar
myVar="changemyVar"
# 删除变量
unset myVar
echo ${myVar}
str='this is a string'
# 单引号限制1:引号中任何字符串原样输出,单引号中的变量是无效的
# 单引号限制2:单引号中不能出现单独的一个引号(对单引号转移也不行),但可以成对出现
myname="mazhen"
str="hello, I know you are \"${myname}\"!\n"
echo -e ${str}
# 双引号优点:双引号里可以有变量;双引号里可以出现转义字符
# 拼接字符串
a="hello"
b="hello, "${a}"!"
b1="hello, ${a}!"
echo $b $b1
b2='hello, '$a'!'
b3='hello, ${a}!'
echo $b2 $b3
# 获取字符串长度
string="abcd"
echo ${#string} #输出 4
# 提取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
# 查找字符串
string="runoob is a great site"
echo `expr index "$string" io` #输出4
# 定义数组
arr=(1 2 3 4)
arr1=(
1
2
3
4
)
arr2[0]=1
arr2[1]=22222
# 读取数组
var1=${arr2[1]}
echo $var1
# 获取数组长度
length=${#arr1[@]}
echo "arr1 length is $length"
# 多行注释 除了多行# 还可以写成下面:
:<<EOF
dddd
ddd
dddd
EOF
Shell 参数传递
可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
#!/bin/bash
# author zhen
echo "Shell 传递参数实例!"
echo "执行的文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
# echo "please input your name:\n"
# read name
#echo "your name is ${name}"
echo "参数个数为:$#"
echo "传递的参数作为一个字符串显示:$*"
# $* 和 $@
echo "-- \$* 演示 --"
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 --"
for i in "$@";do
echo $i
done
Shell 运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
# 两数之和为 : 4
算术运算符:
注意:
- 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
- if...then...fi 是条件语句,后续将会讲解。
- 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
布尔运算符
逻辑运算符
字符串运算符
文件测试运算符
---------------------------------------------------------------------暂停----------------------------------------------------