Linux基础知识大全(持续更新)

Posted 律为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础知识大全(持续更新)相关的知识,希望对你有一定的参考价值。

后续会为大家持续更新,如有错误欢迎大家指点!

目录

Linux基础知识

系统目录结构

Linux系统安装

基本知识点

命令提示符

命令格式

历史命令和补全功能

开,关机以及重启

目录相关操作

文件相关操作

修改文件权限

文件打包,压缩,解压

查找命令

1.配置网络

2.管理磁盘

3.软件安装

安装软件的三种方法:

安装MySQL

安装Java

安装,配置Hadoop

免密登录

4.shell编程

输入语句

输出语句

文件运行命名格式

定义,调用函数

批量添加用户

统计数据

关闭防火墙


Linux基础知识

系统目录结构

  • /bin: 命令和应用程序。

  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv: 该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin: 系统用户使用的命令和应用程序。

  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src: 内核源代码默认的放置目录。

  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

Linux系统安装

基本知识点

命令提示符

命令格式

历史命令和补全功能

1.按上下键查看历史命令
​
2.history :查看执行过的所有命令
​
history 10:查看执行过的近10条命令
​
3.ctr+r:用执行过的命令快速补全

开,关机以及重启

立即关机:

halt (停止进行,中断)
​
poweroff (定时关机,关闭电源)
​
shutdown -h now (shutdown:关机)

定时关机:

shutdown -h 5               5分钟后自动关机
​
shutdown -h 12:00           中午12点关机

立即重启

reboot
​
shutdown -r now

定时重启

shutdown -r 10                   过10分钟自动重启
​
shutdown -r 22:00             在时间为22:00时候重启

取消以上操作:shutdown -c

目录相关操作

创建

mkdir 目录名    创建目录
​
mkdir    hello                 在当前目录下创建
mkdir    /usr/local/hello      在指定目录下创建
mkdir hello nihao kang         在当前目录下创建       

删除

rm [-rf] 目录名       删除目录                             r:递归删除   f:强制删除  
​
rm -r hello               递归删除当前目录下的hello目录
rm -rf hello              递归删除当前目录下的hello目录(不询问)
rm -rf hello nihao kang   递归删除三个目录 

移动[剪切]

mv 目录 目录新位置
​
mv /usr/local/kang /usr/     将/usr/local下的名为kang的目录移动到/usr下            

重命名

mv 目录名  新目录
​
mv hello nihao    将目录hello改为nihao
​
[移动+重命名]
​
mv /usr/local/kang /usr/nihao           /usr/local/kang将目录移动到/usr下,并重命名为nihao
​
•                                对比移动
​
mv /usr/local/kang /usr/nihao/           /usr/local/kang将目录移动到/usr下
​
注意:若是移动,则/usr/nihao/   local后面要加个/,否则就成移动并重命名了,加/后才表式nihao目录下
     如果当前目录下也有个相同名字的文件的话,那这个原文件会被覆盖(可能会询问否是选择覆盖)

拷贝

  • - -r 是递归把源目录下的目录递归进行移动;
    - -f:强行复制文件或目录,不论目标文件或目录是否已存在;
    - -i:覆盖既有文件之前先询问用户;
    - -p:保留源文件或目录的属性;

    拷贝目录时要加参数 -r

    文件则不需要

注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作

文件相关操作

创建

touch 文件名

删除

rm 文件           删除当前目录下的文件
rm -f 文件       删除当前目录的的文件(不询问)
rm -rf *    将当前目录下的所有目录和文件全部删除

vi

i,o,a进入插入模式
保存并退出: wq
退出编辑:  q
强制退出:  q!
删除当前行:dd 

修改文件权限

-r :可读   -w:可写    -x:可执行
chmod 权限代数 文件名

文件打包,压缩,解压

常见文件格式

rpm     是安装包
​
.tar    打包文件
​
.gz     压缩文件
​
.tar.gz     打包并压缩的文件

打包和压缩,解压

Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。 而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。

命令:tar -zcvf 打包压缩后的文件名 要打包的文件
  z:调用gzip压缩命令进行压缩
  c:打包文件
  v:显示运行过程
  f:指定文件名
​
示例:打包并压缩/usr/tmp 下的所有文件 压缩后的压缩包指定名称为xxx.tar
tar -zcvf ab.tar aa.txt bb.txt 
或:tar -zcvf ab.tar  *

解压

命令:tar [-zxvf] 压缩文件         x:代表解压
tar -zxfv 压缩包
tar -xvf 路径/压缩包 -C 指定目录    C:代表解压到指定的位置               将路径下的压缩包解压到根目录指定目录下

查找命令

目录,文件查找

find 目录 参数 文件名称
find /usr/local -name 'k*'    查找/usr/local目录下的所有以k开头的目录或文件
cat  查看文件最后一屏内容
cat 文件路路径
more:百分比显示
​
使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看
more sudo.conf
whereis 文件   将文件和所在路径都查找出来
which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
which pwd  查找pwd命令所在路径 
which java  查找path中java的路径 

1.配置网络

相关命令和操作

帮助命令

查看命令

ls  :显示出该目录下文件名或目录
​
   (ls /目录:查看指定目录,下同)
​
ls -l/ll:显示出该目录下所有文件的详细信息  
​
   (ll:不属于命令,是快捷方式)
​
ls -al :显示出该目录下所有文件的详细信息(会显示隐藏文件)
​
​

vi编译器

按‘’i/o/a''进入插入模式
​
wq:存盘退出          !q:不存盘退出      q!:强制退出
​
​

ifconfig

查看,启动,关闭网络接口(网卡)和临时修改网络接口

查看所有已开启的网络接口:ifconfig
​
查看所有网络接口(包括未启用接口):ifconfig -a
​
启动:ifconfig eth() up
​
关闭:ifconfig eth() down
​
临时修改网卡信息:ifconfig ens() (IPADDR) netmask (255.255.255.0) 
​
​

配置网络参数

进入配置文件目录—》进入系统配置文件目录—》进入网络脚本文件

cd,cd....cd ,vi                                 (逐步进行)
​
vi /etc/sysconfig/network-scripts/ifcfg-ens()   (一步到位进行修改)
        系统配置     网络脚本       网卡文件

“2改3加”:

BOOTROTO=static (设置静态IP,相当于手动设置IP)
​
(DHCP:自动获得服务器分配的IP地址和子网掩码)
​
ONBOOT=yes(开机自动打开网卡)
​
IPADDR="IP地址"  (最后一个要和物理机不一样)
​
NETMASK=掩码(255.255.255.0)
​
GATEWAY=默认网关 
!若是桥接模式则掩码和默认网关必须和物理机一样
存盘退出

重启网络服务

service network restart  / systemctl restart network

配置域名服务(DNS)

vi /etc/resolv.conf  进入域名服务配置文件
​
nameserver 114.114.114.114
​
systemctl restart NetworkManager  重启域名服务

2.管理磁盘

磁盘文件相关信息

设备文件格式:/dev/xxyn
​
xx     :硬盘接口类型(一般为sd)
​
y      :使用此类接口的第几个硬盘(a-z)
​
n      :分区号(主分区/扩展分区用1-4表示,逻辑分区从5开始)

查看所有磁盘详细信息

fdisk -l

操作

添加硬盘

进入磁盘交互模式进行分区

fdisk /dev/磁盘名
​
n :创建新分区—>p:选择创建主分区        
                                   d :删除某个分区    p :查看分区信息
选择分区号
​
起始额度(可默认)
​
截止额度
​
w :存盘退出

格式化分区

fdisk -t ext4 /dev/硬盘分区

挂载分区到相应目录

创建文件系统(目录)
​
mount /dev/硬盘分区 /创建的目录              挂载到创建的目录
​
mount  查看挂载信息

*对第一个分区进行处理系统会默认对其剩下分区进行相关操作

*分区只是在硬盘做标志信息,格式化后挂载(建立文件系统)才会生效

3.软件安装

安装软件的三种方法:

1.编译安装源码包(tar-)

2.rpm(本地安装)

3.yum(在线安装)

rpm和yum的区别

rpm 只能安装已经下载到本地机器上的rpm 包.

yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。

从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装,

可以完整的删除软件

rpm:删除指定的一个

yum:删除与之相关联的全部安装包

rpm安装,卸载

安装
命令格式:rpm -vih 包名
卸载
命令格式:rpm -e 包名

常用参数

-i, --install  :安装      
​
-v :选项显示详细信息      
​
-h 选项:hash marks输出进度条;每个#表示2%的进度
​
-vv:显示更详细的信息 
​
–nodeps:忽略依赖关系;不建议
​
–force 属性,强制进行安装  
​
-U, --update :升级
​
–force :强制升级,强制进行安装  
​
-e, --erase :卸载 
​
-q, --query:查询 
​
-l:显示套件的文件列表
​
-a,–all:查询所有已经安装过的程序包,可配合grep使用  
​
-V, --verify  :校验
​
–builddb, --initdb:数据库维护

yum安装,卸载

安装
命令格式:yum install -y 包名
卸载
命令格式: yum -y remove 包名

常用参数

 -y:当安装,卸载过程提示选择全部为"yes"
 -q:不显示安装的过程

wget 下载地址

安装mysql

获取安装包进行安装

wget 链接
​
rpm

安装MySQL服务器

yum install -y mysql-server

MySQL服务相关操作

systemctl start mysqld    开启MySQL服务
​
ps -aux|grep mysqld        查看后台MySQL是否运行
​
systemctl enable mysqld   设置开机自启

登录MySQL

获取初始密码

cat /var/log/mysqld.log|grep 'A temporary password'

登录

mysql -u root -p

修改密码

use mysqld;    切换MySQL数据库
​
alter user 'root'@'localhost' identified by 'py.123456'
修改   用户  管理员   本地服务器    登陆密码 

安装Java

查看是否存在java安装包(可略)

筛选

rpm -aq|grep java

删除不需要的版本

下载JavaJDK

下载JDK地址:ww.oracle.com

解压并存放放到指定位置

拖动至Linux系统内,去掉引号

创建目录-移动-解压 / 解压并移动

mkdir 目录名
​
mv 现在的位置 新位置
​
tar [-zxvf] 压缩文件    x:解压     zxvf顺序不能乱,否则报错       

也可在解压到指定位置

tar -xvf 压缩文件 -C 解压后存放的位置       C:解压到指定位置

配置环境变量

copy Java路径

export JAVA_HOME=/usr/java/jdk1.8.0_291-amd64              export:声明为全局变量
export PATH=$PATH:$JAVA_HOME/bin
export CALSSPATH=.:$JAVA_HOME/lib

解释

JAVA_HOME环境变量:jdk的安装路径             Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。
​
PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把   jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好  PATH变量后,就可以在任何目录下执行javac/java等工具了。 
​
CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们  需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。 
​
​

重启系统环境配置文件

source /etc/profile
​
配置成功后无论在哪里都可以调用java(会显示版本信息)
若修改profile文件时覆盖了原PATH路径,解决方法:
​
输入命令:export PATH=/usr/bin:/usr/sbin:/bin:/sbin   后,将原PATH变量修改回来即可

检测是否安装成功:java -version

#

安装,配置Hadoop

主要用来数据的存储(DHFS:分布式文件系统) 和 分布式计算(MapReduce)(并行运算)

MapReduceMapReduce_百度百科 (baidu.com)

HDFShdfs_百度百科

hadoop核心模块

common:    为其他Hadoop模块提供基础服务
​
HDFS:  高吞吐量的分布式文件系统
        提供数据的存储(namenode,DataNode)
​
MapReduce: 分布式的离线并行计算框架
​
YARN:  负责任务调度和资源管理(CPU,内存)
       管理集群各个机器的资源,并合理调度分配给各个程序使用
​

NameNode

NameNode属于HDFS,它位于HDSF的主端,由它来指导DataNode执行底层I/O任务。NameNode相当于HDFS的书记员,它会跟踪文件如何被分割成文件块,而这些块又是被哪些节点存储,以及分布式文件系统整体运行状态是否正常等。 
  运行NameNode会消耗大量内存和IO资源,因此为减轻机器负载,驻留NameNode的服务器通常不会存储用户数据或者进行MapReduce计算任务,这也就意味着一台NameNode服务器不会同时是DataNode或者TaskTracker服务器。 

DataNode

集群中每一个从节点都会驻留一个DataNode的守护进程,用来将HDFS数据库写入或读取到本地文件系统中。当对HDFS文件进行读写时,文件会被分割成多个块,有NameNode告知客户端每个数据驻留在哪个DataNode,客户端直接与DataNode进行通信,DataNode还会与其它DataNode通信,复制这些块以实现冗余。

NameNode跟踪源数据,DataNode提供数据块的备份存储并持续不断地向NameNode报告,以保持元数据最新状态

安装hadooop

编译安装—>解压—>/usr/local/hadoop

检测是否安装成功:hadoop version

Hadoop环境配置

修改Hadoop环境变量文件

vi /usr/local/hadoop/etc/hadppp/hadoop-env.sh(Hadoop的环境变量配置文件)
export JAVA_HOME=java的路径(修改内容)

修改系统环境变量

重启系统环境配置文件

source /etc/profile

配置两个核心文件

common模块的配置文件--core-site.xml

core-site.xml 加2个属性

#指定文件为hdfs,以及namenode主节点运行机器和端口
<configuration>  (配置模块)
   <property>    属性1
     <name>fs.defaultFS</name>     指明hdfs中namenode的名字
     <value>hdfs://localhost:9000</value>     指明hdfs中namenode的地址      
                本地主机名(localhost)
   </property>
#指定hdfs文件系统本地存储目录(自己提前创建),默认的是/tmp,不安全
   <property>    属性2
     <name>hadoop.tmp.dir</name>     指明Hadoop运行时产生文件的存储路径的名字
     <value>hadoop目录/tmp</value>     指明存储路径
   </property>
</configuration>

/tmp是一个特殊的文件夹,系统会自动清理(10天前的)


hdfs模块的配置文件--hdfs-site.xml

hdfs-site.xml 加3个属性

<configuration>     配置模块
​
   <property>     属性1
      <name>dfs.name.dir</name>     存储元数据的位置名字(指示存储位置)
      <value>hadoop目录/name</value>     位置
   </property>
   <property>     属性2
      <name>dfs.data.dir</name>   存储数据的位置名字
      <value>hadoop目录/hdfs/data</value>    位置
   </property>
   <property>     属性3
      <name>dfs.replication</name>   副本属性(备份)
      <value>1</value>     份数
   </property>
</configuration>
​
“元数据(Metadata)描述数据的数据,存储数据的相关信息。(大小,类型,位置等等)
为描述数据的数据(data about data)
​
主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
​
replication:复制

hadoop ssh免密登录

ssh-keygen -t dsa -p '' -f ~/.ssh/id_dsa

-t 生成密匙类型dsa -P ' ' 密码为空 -f 指定生成公匙和私匙的文件名

76 ssh-keygen -t dsa -p '' -f ~/.ssh/id_dsa 77 ssh-keygen 78 cat ~/.ssh/id_dsa.ppi 79 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys 80 ls ~/.ssh 81 ll ~/.ssh 82 chmod 600 ~/ 83 chmod 600 ~/.ssh/authorized_keys 84 ll ~/.ssh 66 cat /etc/profile 67 cd /usr/hadoop-2.10.1 68 ./bin/hdfs namenode -format 69 ./sbin/start-dfs.sh 70 ifconfig-ens33 71 ifconfig -ens33 72 ifconfig

格式化

cd /usr/hadoop-2.10.1
​
./sbin/start-dfs.sh

远程文件发送

ssh-copy-id -i id_rsa.pub root@192.168.182.129

-i 选择文件 发送 root用户@主机名(ip)

4.shell编程

vi 文件名 直接创建文件并进行修改

输入语句

#! /bin/bash
read -p 'input name:' name
​
运行结果:
​
input name:

#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 shell;

后面的/bin/bash就是指明了解释器的具体位置。

Shell 脚本中所有以#开头的都是注释(当然以#!开头的除外)。

输出语句

echo $name
echo:回响,打印
​
echo 字符或已赋值变量$name
​
echo打印已声明变量前要加$,否则打印的是当前字符

文件运行命名格式

文件路径 /文件名

定义,调用函数

#! /bin/bash
function add()

 sum=$[$1+$2]
 echo $sum

read -p 'input number1:' num1
read -p 'input bunber2:' num2
​
add $num1 $num2

bash 文件名 以可执行身份强制执行文件(无执行权限的文件)

批量添加用户

循环结构 批量添加用户

#! /bin/bash
groupadd student
​
for i in 'xiaowang' 'zhangsan' 'wangwu' 'jiangcheng' 'pig'
do  
    useradd -g student $i
    echo '123456'|passwd --stdin $i
done 

do~done构成循环体

执行结果

统计数据

分支,判断语句

统计目录,文件数
​
#! /bin/bash
fnum=0
dnum=0
total=0
for i in `ls`
do
    if [ -d $i ]
    then
       dnum=`expr $dnum + 1`
    else
       fnum=`expr $dnum + 1`
    fi
    total=`expr $total + 1`
done
echo directory:$dnum
echo file:$fnum
echo total:$total
执行结果:
directory:0
file:1
total:7

关闭防火墙

systemctl命令是Linux系统服务管理器命令,由service和chkconfig命令组合而来 system:系统 ctl->control:控制—>系统控制

systemctl stop c    (暂时)
systemctl disable firewalld  (永久开机自动关闭)(禁用)
systemctl status firewalld  (查看状态)
最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
vi /etc/selinux/config
SELINUX=disabled    

hadooop:HDFS/mapreduce

Linux中使用id命令可以查看用户的大多数信息。具体使用方法请参看上一关的实训。

Linux中还可以通过查看/etc/passwd文件来获取用户的信息。具体方法可以参考背景知识。

Linux中还可以使用finger命令来查询用户的信息。

注意Ubuntu系统中默认没有安装finger命令,用户可以通过以下命令来安装finger,然后就可以使用finger

sudo apt-get install finger

具体使用方法如下:

命令格式:finger [命令参数] 参数

常见命令参数

  • -l:多行显示;

  • -s:单行显示。这个选项只显示登入名称、真实姓名、终端机名称、闲置时间、登入时间、办公室号码及电话号码。如果所查询的使用者是远端服务器的使用者,这个选项无效。

案例演示:

使用finger命令查看用户信息。

例如,查看系统中已经存在的用户newUser信息。

[请在右侧“命令行”里直接体验]

Linux用户信息修改命令

Linuxusermod命令是最强大的用户账户修改实用工具。

usermod命令我们在上一关只是简单的用到其-g-G参数对用户的所属组进行修改,本关我们将进一步使用usermod命令的其它属性进行修改更多的属性。

命令格式:usermod [命令参数] 参数

常见命令参数:

  • -c<备注>:修改用户帐号的备注文字;

  • -d<登入目录>:修改用户登入时的目录;

  • -e<有效期限>:修改帐号的有效期限;

  • -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;

  • -g<群组>:修改用户所属的群组;

  • -G<群组>;修改用户所属的附加群组;

  • -l<帐号名称>:修改用户帐号名称;

  • -L:锁定用户密码,使密码无效;

  • -s:修改用户登入后所使用的shell

  • -u:修改用户ID

  • -U:解除密码锁定。

usermod必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。

[转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

 
https://www.cnblogs.com/caozy/p/9261224.html

总结的挺好的  我之前想总结 一直懒 这次国庆加班 也本来计划来着 感冒了 作罢 .. 

 

作者:蓝藻(罗蓝国度)

创建时间:2018.7.3
编辑时间:2019.7.16

前言

本文特点

  • 授之以渔:了解命令学习方法、用途:不再死记硬背,拒绝漫无目的;

  • 准确无误:所有命令执行通过(环境为centos7),拒绝复制粘贴;

  • 实用性高:命令多为实际工作中用到的,实例讲解,拒绝纯理论;

  • 条理清晰:分类归纳,快速找到想要的命令,拒绝天马行空;

  • 总结性强:只列常用语法,易错情况强调,拒绝照搬照套。

学前须知

  • 适用人群:开发、测试、运维
  • 文档用途:linux入门学习、命令备忘录、面试复习
  • 学习途径:书籍(鸟哥的Linux私房菜)、视频:慕课网等、百度谷歌搜索、qq群等
  • 学习环境:虚拟机VirtualBox+centos7
  • 学习记录:多动手,多联想,多记录,特别是遇到问题时
  • 遇到问题:百度谷歌搜索、系统日志(/var/log/)、qq群

学前理论

  • linux主要特征 :一切且文件(目录、硬盘等都是文件);硬件都在/dev 目录,如硬盘、U盘为/dev/sd[a-d]; /dev/sr0(/dev/cdrom)是光驱的设备名(df命令查看),为设备文件,代表的是光驱本身,得把这个设备挂载到目录下(一般为/mnt)(文件系统的临时挂载点),才能对设备上的文件进行读写等操作;

  • 不懂的命令 :man 命令(查用法、全称),只记得关键词,可用man -k 关键词;

  • Linux命令常用结构 :Command [-option] [argument]
    Command:即是要运行的命令的本身,说白了就是一个软件(程序);
    Option:是选项(可选),选项是控制命令运行状态和行为的(可多个选项一起,如df -hT);
    Argument:是参数(可选),是命令要操作对象如文件、路径、数据、目录等;
    在指令的第一部分按[tab]键一下为[命令补全],两下为所有命令选择,在非第一部分按[tab]键两下为[文件补全];

  • linux命令区分大小写

开关机

  • sync :把内存中的数据写到磁盘中(关机、重启前都需先执行sync)
  • shutdown -r nowreboot :立刻重启
  • shutdown -h now :立刻关机
  • shutdown -h 20:00 :预定时间关闭系统(晚上8点关机,如果现在超过8点,则明晚8点)
  • shutdown -h +10 :预定时间关闭系统(10分钟后关机)
  • shutdown -c :取消按预定时间关闭系统

系统信息

  • who am i :查看当前使用的终端
  • who 或 w : 查看所有终端
  • uname -m :显示机器的处理器架构(如x86_64)
  • cat /proc/version :查看linux版本信息
  • uname -r :显示正在使用的内核版本
  • lsb_release -a :查看系统发行版本(如CentOS7)
  • rpm -qa | grep kernel-devel :查看kernel-devel版本(安装软件时编译内核用,故需要保持内核版本一致性)
  • yum install -y "kernel-devel-uname-r == $(uname -r)":安装和Linux内核版本匹配的kernel-devel
  • date :显示系统日期 (date +%Y/%m/%d : 显示效果如2018/01/01)
  • date 070314592018.00 :设置时间(格式为月日时分年.秒 )
  • clock -w :将时间修改保存到 BIOS
  • cal 2018 :显示2018年的日历表
  • clear :清空命令行
  • ifconfig :显示或设置网卡(查ip等)(类似windows中ipconfig)
  • ping -c 3 www.baidu.com :测试百度与本机的连接情况( -c 3表示测试3次)
  • cat /proc/cpuinfo :显示CPU的信息
  • cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l :查看物理CPU个数
  • cat /proc/cpuinfo| grep "cpu cores"| uniq :查看每个物理CPU的核数
  • cat /proc/cpuinfo| grep "processor"| wc -l :查看逻辑CPU个数即线程数

系统性能

  • top :动态实时显示cpu、内存、进程等使用情况(类似windows下的任务管理器)
  • top -d 2 -p 7427 :-d为画面更新的秒数,默认5秒,-p为指定进程pid的信息
  • vmstat 2 10 :每隔2秒采集一次服务器状态,采集10次(查看内存、io读写状态、cpu)
  • free -h :查看系统内存及虚拟内存使用情况
  • df -h :显示磁盘的空间使用情况
  • iostat :可查io读写、cpu使用情况
  • sar -u 3 5 :查看cpu使用情况(3秒一次,共5次)
  • sar -d 2 3 :评估磁盘性能
  • ps aux|grep firefox :获取火狐的进程号(PID)(可查看进程占用cpu、内存百分比及进程触发指令的路径)
  • kill -9 进程号 :强制杀死进程
  • systemctl :查看正在运行的服务

文件和目录

? cd:是Change Directory的缩写,用来切换工作目录,语法:cd [相对或绝对路径或特殊符号]

  • cd :进入该用户的主目录 ~(root用户为/root,其他用户为/home/用户名)
  • cd .. :返回上一级目录(注意要空格)
  • cd - :返回上次所在目录
  • cd / :返回根目录 (绝对路径)
  • cd ./目录1/目录2 :进入当前目录下的子目录(相对路径)
  • pwd :显示工作路径(Print Working Directory 的缩写)

    ?ls:是List的缩写,用于列出目录下的文件,语法:ls [选项][目录或文件名]

  • ls -a :列出文件下所有的文件,包括以“.“开头的隐藏文件
  • **ls -lh *.log** :列出文件的详细信息(.log结尾,*为通配符代表任意多个字符)
  • file 文件或目录 :显示文件的类型(目录、text、zip、shell脚本等)

  • mkdir dir1 :创建目录(dir1)(mkdir为make directory的缩写)
  • mkdir -p ./dir1/dir2 :递归创建目录(-p:父目录不存在时,同时建立)
  • touch a.txt :创建文件a.txt

    ?rm:可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉; 语法:rm (选项)(参数)(注:如果参数中含有目录,则必须加上-r选项);

  • rm 文件 :删除文件
  • rm -r 目录或文件 :删除目录(及目录下所有文件)(非空也可以)
  • rm -rf 目录或文件 :强制删除,如:rm -rf * 为删除当前目录下所有文件
  • find -inum 1842601 -exec rm -rf ; :删除乱码文件或目录(会提示找不到此文件或文件夹但其实已经删除了)(上传中文文件会乱码,rm命令删除不了)(先使用ls -i命令找到inode,即文件或目录前面的数字字符串,如1842601;)

    ?mv:是move的缩写,可以用来剪切移动文件、目录或者将文件改名;
    语法:mv 源文件 目标文件(改名)或目录(移动);

  • mv a b :移动或者重命名一个文件或者目录(存在即移动目录或覆盖文件,不存在即改名)
  • mv /opt/git/g /opt/a :移动g到opt目录下并改名为a(a目录不存在,若存在则为移动g到a目录下)
  • mv -t ./test a.txt b.txt :移动多个文件到某目录下

    ?cp:复制文件或目录;cp命令可以将单个或多个文件复制到一个已经存在的目录下;
    常用:cp -ai 文件或目录 目标目录;

  • cp -ai /opt/abc /opt/git/ :复制abc目录(或文件)到git目录下(选项a表示文件的属性也复制、目录下所有文件都复制;i表示覆盖前询问)

    ?ln:link的缩写,用于建立硬(软)链接,常用于软件安装时建软链接(类似快捷方式)到PATH;
    语法:ln [-s] 源文件 目标文件

  • ln -s /opt/a.txt /opt/git/ :对文件创建软链接(快捷方式不改名还是a.txt)
  • ln -s /opt/a.txt /opt/git/b :(快捷方式改名为b)(下面的一样可以改名)
  • ln -s /opt/mulu /opt/git/ :对目录创建软链接
  • ln /opt/a.txt /opt/git/ :对文件创建硬链接

文件权限

  • chmod [-R] 777文件或目录 :设置权限(chmod a+rwx a=chmod ugo +rwx a=chmod 777 a)

    ?注: r(read)对应4,w(write)对应2,x(execute)执行对应1;
    -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改)

  • chmod [ugoa+-=rwx][文件或目录] :如chmod u-w,g+x,o=r test.txt为user(拥有者)去掉写权限,group(所属组)加上执行权限,other(其他人)权限等于只读;
  • chown [-R] admin:root /opt/ :变更文件及目录的拥有者和所属组(-R递归处理所有文件和文件夹,admin为拥有者,root为所属者)

文件查找

  • locate a.txt :在系统全局范围内查找文件名包含a.txt字样的文件(比find快);

?locate:原理是updatedb会把文件系统中的信息存放到数据库databases中(但一般一天才执行一次,所以locate找不到新创建的文件,需要先手动执行updatedb,再执行locate),locate从数据库中读数据;

? find:在目录结构中搜索文件,并执行指定的操作
语法:find pathname -options [-print -exec ...]
pathname :为 find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录(find查找范围为目标目录及其子目录所有文件及目录);
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command‘ ;,注意 和;之间的空格;
-print: find命令将匹配的文件输出到标准输出;

  • find /home -mtime -2 :在/home下查最近2*24小时内改动过的文件
  • find . -size +100M :在当前目录及子目录下查找大于100M的文件
  • find . -type f :f表示文件类型为普通文件(b/d/c/p/l/f 分别为块设备、目录、字符设备、管道、符号链接、普通文件)
  • find . -mtime +2 -exec rm ; :查出更改时间在2*24小时以前的文件并删除它**
  • find . -name ‘*.log‘ -exec grep -i hello \\; -print :在当前目录及子目录下查出文件名后缀为.log的文件并且该文件内容包含了hello字样并打印,-exec 命令 \\表示对查出文件操作,-i表示不区分大小写;
  • find . -name ‘*.log‘|grep hello :在当前目录及子目录下查出文件名后缀为.log的文件并且文件名包含了hello字样(grep用来处理字符串);

  • grep -i ‘HELLO‘ . -r -n :在当前目录及子目录下查找文件内容中包含hello的文件并显示文件路径(-i表示忽略大小写)

  • which java :在环境变量$PATH设置的目录里查找符合条件的文件,并显示路径(查询运行文件所在路径)
  • whereis java :查看安装的软件的所有的文件路径(whereis 只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令)

查看文件的内容

  • cat [-n] 文件名 :显示文件内容,连行号一起显示

  • less 文件名 :一页一页的显示文件内容(搜索翻页同man命令)

  • head [-n] 文件名 :显示文件头n行内容,n指定显示多少行

  • tail [-nf] 文件名:显示文件尾几行内容,n指定显示多少行,f用于实时追踪文件的所有更新,常用于查阅正在改变的日志文件(如tail -f -n 3 a.log 表示开始显示最后3行,并在文件更新时实时追加显示,没有-n默认10行)

  • sed -n ‘2,$p‘ ab :显示第二行到最后一行;
  • sed -n ‘/搜索的关键词/p‘ a.txt :显示包括关键词所在行
  • cat filename |grep abc -A10 :查看filename中含有abc所在行后10行(A10)、前10行(B10)内容
  • less a.txt|grep git :显示关键词所在行,管道符”|”它只能处理由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后传递给下一个命令,作为标准的输入;

  • cat /etc/passwd |awk -F ‘:‘ ‘print $1‘ :显示第一列

文本处理

  • ls -l>file :输出重定向>(改变原来系统命令的默认执行方式):ls -l命令结果输出到file文件中,若存在,则覆盖

  • cat file1 >>file :输出重定向之cat命令结果输出追加到file文件(>表示覆盖原文件内容,>>表示追加内容)

  • ls fileno 2>file : 2>表示重定向标准错误输出(文件不存在,报错信息保存至file文件);

  • cowsay <a.txt :重定向标准输入’命令<文件’表示将文件做为命令的输入(为从文件读数据作为输入)

  • sed -i ‘4,$d‘ a.txt :删除第四行到最后一行($表示最后一行)(sed可以增删改查文件内容)
  • sed -i ‘$a 增加的字符串‘ a.txt :在最后一行的下一行增加字符串
  • sed -i ‘s/old/new/g‘ a.txt :替换字符串;格式为sed ‘s/要替换的字符串/新的字符串/g‘ 修改的文件

  • vim 文件:编辑查看文件(同vi)

用户与权限

  • useradd 用户名 :创建用户
  • userdel -r 用户名 :删除用户:(-r表示把用户的主目录一起删除)
  • usermod -g 组名 用户名 :修改用户的组
  • usermod -aG 组名 用户名 :将用户添加到组
  • groups test :查看test用户所在的组
  • cat /etc/group |grep test :查看test用户详情:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

  • passwd [ludf] 用户名 :用户改自己密码,不需要输入用户名,选项-d:指定空口令,-l:禁用某用户,-u解禁某用户,-f:强迫用户下次登录时修改口令

  • groupadd 组名 :创建用户组
  • groupdel 用户组 :删除组
  • groupmod -n 新组名 旧组名 :修改用户组名字

  • su - 用户名:完整的切换到一个用户环境(相当于登录)(建议用这个)(退出用户:exit)
  • su 用户名 :切换到用户的身份(环境变量等没变,导致很多命令要加上绝对路径才能执行)
  • sudo 命令 :以root的身份执行命令(输入用户自己的密码,而su为输入要切换用户的密码,普通用户需设置/etc/sudoers才可用sudo)

磁盘管理

  • df -h :显示磁盘的空间使用情况 及挂载点
  • df -h /var/log :(显示log所在分区(挂载点)、目录所在磁盘及可用的磁盘容量)

  • du -sm /var/log/* | sort -rn : 根据占用磁盘空间大小排序(MB)某目录下文件和目录大小

  • fdisk -l :查所有分区及总容量,加/dev/sda为查硬盘a的分区)
  • fdisk /dev/sdb :对硬盘sdb进行分区

  • mount /dev/sda1 /mnt :硬盘sda1挂载到/mnt目录(mount 装置文件名 挂载点)
  • mount -t cifs -o username=luolanguo,password=win用户账号密码,vers=3.0 //10.2.1.178/G /mnt/usb :远程linux 共享挂载windows的U盘,G为U盘共享名,需设置U盘共享
  • mount -o loop /opt/soft/CentOS-7-x86_64-DVD-1708.iso /media/CentOS :挂载iso文件
  • umount /dev/sda1 :取消挂载(umount 装置文件名或挂载点)

压缩、解压和打包备份

? 单纯tar仅为打包(多个文件包成一个大文件),加上参数-j(bzip2格式.bz2)、-z(gzip格式.gz)可以备份、压缩(-c)、解压(-x),备份一般比压缩多加参数-p(保留原本文件的权限与属性),-C可以指定解压到特定目录;bzip2、gzip只能对单一文件压缩;

  • file 文件名 :查文件类型(可看是用哪一种方式压缩的)

  • tar -zxvf a.tar.gz -C ./test :解压tar.gz到当前目录下的test目录
  • tar -zcvf /opt/c.tar.gz ./a/ :压缩tar.gz(把当前目录下的a目录及目录下所有文件压缩为 /opt/目录下的c.tar.gz,这样tar -zxvf c.tar.gz解压出来带有目录a)

  • tar -jxvf a.tar.bz2 :解压tar.bz2(到当前目录)
  • tar -jcvf c.tar.bz2 ./a/ :压缩tar.bz2(把当前目录下的a目录及目录下所有文件压缩到当前目录下为c.tar.gz2)

  • unzip a.zip :解压zip(到当前目录)
  • unzip -o mdmtest.war -d /opt/mdm :推荐使用unzip解压war包(-o覆盖原有文件,-d指定文件解压后存储的目录)
  • zip -r c.zip ./a/ :压缩zip(把当前目录下的a目录及目录下所有文件压缩到当前目录下为c.zip

  • bzip2 -k file1 : 压缩一个 ‘file1‘ 的文件(-k表示保留源文件)(bzip2格式,比gzip好)
  • bzip2 -d -k file1.bz2 : 解压一个叫做 ‘file1.bz2‘的文件

  • gzip file1 : 压缩一个叫做 ‘file1‘的文件(gzip格式)(不能保留源文件)
  • gzip -9 file1 : 最大程度压缩
  • gzip -d file1.gz : 解压缩一个叫做 ‘file1‘的文件

软件安装

  • 尽量用yum源(apt-get)安装,不行就rpm、deb包安装,能不手动编译的就不要手动编译;
  • dpkg只能安装已经下载到本地机器上的deb包. apt-get能在线下载并安装deb包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是dpkg工具所不具备的;
  • rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的;
  • yum、rpm安装文件分布在/usr的bin、lib、share不同目录,不用配置PATH,直接用命令,但可用命令卸载更新;
  • 手动编译软件,默认位置为/usr/local下不同子目录下,不用配置PATH直接用命令(手动指定安装路径需要加PATH),使得软件更新和删除变得很麻烦。编译安装的软件没有卸载命令,卸载就是把所有这个软件的文件删除。

二进制(Binaries)包

yum安装

? 在线下载并安装rpm包,适用于CentOS、Fedora、RedHat及类似系统

  • yum install epel-releas :安装第三方yum源EPEL(企业版 Linux 附加软件包的简称)
  • yum repolist enabled :显示可用的源仓库(/etc/yum.repos.d/目录下配置)
  • yum install yum-fastestmirror :自动选择最快的yum源
  • yum list installed |grep java :列出已安装的软件(查看已安装的JDK)
  • yum remove java-1.8.0-openjdk.x86_64 :卸载软件(卸载JDK)
  • yum list java* :列出已安装和可安装的软件(查看yum库中的JDK包)
  • yum install [-y] java-1.8.0-openjdk :安装软件JDK(-y自动安装)(推荐这种方式安装)
  • yum install docker-ce-18.03.1.ce :安装指定版本的软件(已知docker-ce.x86_64 18.03.1.ce-1.el7.centos,则rpm包名为docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm)
  • yum check-update [kernel] :列出所有可更新的软件(检查更新kernel)
  • yum update tomcat :更新软件(可所有)
  • rpm -ql 软件名称 :查询yum安装路径(软件名称可通过rpm -qa|grep java)
  • yum info kernel :查看软件(kernel)的信息
  • yum clean all :(清除缓存,使最新的yum配置生效)

rpm包手动下载安装

? yum中没有时用,适用于CentOS、Fedora、RedHat及类似系统;

  • wget -P /opt https://网址 :下载到/opt目录

  • rpm -ivh wps-office-版本.x86_64.rpm :安装rpm包(包要先下载)(要先装依赖包)
  • rpm -e wps-office :卸载软件(注意不要软件名不要版本号)
  • rpm -qa |grep wps :查看安装的rpm包
  • rpm -ql 软件名称 :查看rpm包安装路径(软件名称可通过rpm -qa|grep java)

apt方式安装

? 安装deb包,类似yum安装,适用于Debian, Ubuntu 以及类似系统;

  • apt-get install aptitude :安装aptitude工具,实现依赖自动安装,依赖版本自动降级或升级
  • aptitude install 软件 :安装软件(推荐这种方式安装)

  • apt-cache search 软件 :搜索软件
  • apt-get install 软件 :安装软件
  • apt-get purge 软件 :卸载软件(包括配置文件,只删除软件purge换成remove)
  • apt-get upgrade :更新所有已安装的软件包
  • apt-get update :升级列表中的软件包
  • apt-get clean :从下载的软件包中清理缓存

deb包安装

? 适用于Debian, Ubuntu 以及类似系统;

  • dpkg -i package.deb :安装一个 deb 包
  • dpkg -r package_name :从系统删除一个 deb 包
  • dpkg -l |grep chrome :查询系统中所有已经安装的 deb 包
  • dpkg -L 软件名称 :查软件安装的文件

解压即用

? 大多数非开源的商业软件都采取这种办法;

? 二进制(Binaries)包如apache-jmeter-3.3.tgz,下载复制解压到/opt,然后然后将该软件的 bin 目录加入到 PATH 中即可(vim /etc/profile export PATH=$PATH:/opt/apache-jmeter-3.3/bin);

软件自己的模块/包管理器

? 如python:系统的源中不可能包含该软件的所有模块; 系统的源中该软件的模块的更新要远远滞后于最新版本;手动安装python,并用Python 自带的 pip 安装模块(类似yum);

  • pip install redis :安装python软件包redis
  • pip unstall redis :卸载
  • pip show --files redis :pip查看已安装的包
  • pip list --outdated :检查更新

源代码(Source)包

编译安装

? 源代码包(一般有install文件)如hello-2.2.tar.bz2,下载复制到/opt;

  • tar -jxvf hello-2.2.tar.bz2 :解压
  • ./configure --prefix=/opt/软件目录名称 :为编译做好准备,加上 prefix 手动指定安装路径
  • make :编译
  • make install :安装
  • make clean :删除安装时产生的临时文件
  • vim /etc/profile export PATH=$PATH:/opt/目录/bin :手动指定安装路径需要加path
  • hello :执行软件:看INSTALL和README文件(是否源码包、如何安装、执行都看这两个)
  • rm -rf 软件目录名称 :卸载软件

转载请注明出处:https://www.cnblogs.com/caozy/p/9261224.html
持续更新,建议收藏

评论发邮箱可免费赠送带目录电子挡

以上是关于Linux基础知识大全(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

linux常用指令大全(持续更新中)

Linux命令大全,唯一以案例详解文,持续更新中

持续更新中Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章

linux 基础实用命令整理--后续还会持续更新

浅谈OpenStack T版服务组件--Neutron计算服务(#^.^#) 持续更新中

浅谈OpenStack T版服务组件--Neutron计算服务(#^.^#) 持续更新中