• linux 系统学习



    这里的知识点是基于java全栈开发的linux,而不是运维级别。

    VMware安装

    我们一般都是用的windows系统,但是想用到linux时就必须先安装一个虚拟机(在这安装的是VMWare WorkStation Pro),然后再到虚拟机里面安装一个linux操作系统镜像,这样就可以使用linux操作系统了。

    linux的安装

    因为WM只是一个软件。这个软件可以从计算机中虚拟多个操作系统出来。所以如果想要使用linux,那么必须要创建虚拟机,再到虚拟机上安装操作系统之后才能使用。
    安装注意点:

    • linux有很多版本,我装的是CentOS 7。它有最小安装版本和视图界面等版本。安装的时候按需选择,还有就是网络适配器记得打开。
    • cat /etc/redhat-release 检测linux版本

    虚拟机安装以后,我们不使用的时候可以挂起虚拟机,而不是关机。挂起是保存了当前虚拟机的状态,下次再使用的时候,这些状态还在。关机则是所有数据都清空了。

    安装XShell 和 XFTP

    linux系统我们一般当做服务器系统,而服务器一般是在云端。我们操作云端的linux系统,一般则使用XShell 和 XFTP。
    XShell(端口号22)是我们通过命令操作linux系统,而XFTP(端口号21)是上传文件的。

    开机/关机

    开机会启动很多程序,它们在windows叫做“服务”service,在linux就叫做“守护进程”daemon。
    开机成功后,进入登录界面,输入用户名,密码是不显示的,输入完成回车即可。
    最高管理权限账户为root,可以操作一切。
    用户的登录方式有三种:

    • 图形界面登录
    • 命令行登录
    • ssh登录,即远程登录,这里使用xShell

    登录成功以后,在光标左侧显示的信息依次是:[用户名@主机名 当前目录]#或者$,最后的#指当前用户是普通用户,$指超级用户root。
    双击xShell上的命令窗口的tab标签,可以新建一个当前主机的窗口并自动连接

    关机重启

    在linux领取内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

    • sync 将数据有内存同步到硬盘中
    • reboot 重启
    • shutdown -r now 立刻重启,shutdown会给别的用户提示
    • shutdown -h now 立刻关机,其中now相当于时间为0
    • shutdown -h 20:25 系统在今天的20:25会自动关机
    • shutdown -h +10 系统再过10分钟后自动关机
    • init 0 关机
    • init 6 重启

    SSH 远程登录 TODO

    linux目录结构

    在linux中,一切皆文件。
    linux没有盘符这个概念,只有一个根目录/,所有文件都在它下面

    • /bin: (binaries)存放系统命令的目录,所有用户都可以执行。
    • /sbin: (super user binaries) 保存和系统环境设置相关的命令,只有超级用户root可以使用这些命令,有些命令可以允许普通用户查看。
    • /usr/bin:存放系统命令的目录,所有用户可以执行。这些命令和系统启动无关,单用户模式下不能执行
    • /usr/sbin:存放根文件系统不必要的系统管理命令,超级用户可执行
    • /root: 存放root用户的相关文件,root用户的家目录。宿主目录 超级用户
    • /home:用户的主目录,每个用户都有一个自己的目录,目录名以用户名命名。
    • /tmp:(temporary)存放临时文件,用完即丢的文件,比如安装包
    • /etc:(etcetera)存放所有的系统管理所需要的配置文件和子目录
    • /usr:(unix software resource)用户的很多应用程序和文件都放在这个目录下,类似于Windows的program files目录
    • /proc:虚拟文件系统,数据保存在内存中,存放当前进程信息
    • /boot:系统启动目录
    • /dev:(devices)存放设备文件,在linux中访问设备的方式和访问文件的方式是相同的
    • /sys :虚拟文件系统,数据保存在内存中,主要保存于内存相关信息
    • /lib:存放系统程序运行所需的共享库,类似Windows里的DLL文件
    • /lost+found:一般情况下是空的,当系统非法关机后,会存放一些文件。
    • /var:(variable)动态数据保存位置,包含经常发生变动的文件,如邮件、日志文件、计划任务等
    • /mnt:(mount)挂载目录。临时文件系统的安装点,默认挂载光驱和软驱的目录。我们后面会把一些本地文件挂载在这个目录下
    • /media:挂载目录。 挂载媒体设备,如软盘和光盘
    • /misc:挂载目录。 挂载NFS服务
    • /opt: 第三方安装的软件保存位置。比如:redis、mysql、docker等
    • /srv : 服务数据目录
    • /www:存放服务器网站相关的资源,环境,网站的项目

    每个用户都有一个用户目录,位于/home/用户目录,称之为用户工作目录或家目录。

    linux 命令

    键入ls --help,一般是linux命令自带的帮助信息
    在敲出命令的前几个字母的同时,按下tab,系统会自动帮我们补全命令
    Linux所有的目录和文件名大小写敏感

    可以使用main 命令来查看各个命令的使用文档,如:main cp

    exit 退出

    如果是图形界面,退出当前终端;
    如果是使用ssh远程登录,退出登陆账户;
    如果是切换后的登陆用户,退出则返回上一个登陆账号。

    常用命令

    • clear 作用为清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrl + l ( “l” 为字母 )。
    • pwd 命令可以显示当前的工作目录
    • echo "内容" >> filename 写入字符串,到指定文件

    文件管理

    可以使用whereis xxxx来查找软件安装位置

    绝对路径和相对路径

    • 绝对路径:从/目录开始描述的路径为绝对路径,如:/usr/local
    • 相对路径:从当前位置开始描述的路径为相对路径,如:./../
    • 相对路径还有~cd ~进入进入当前用户的主目录
    • pwd 显示当前所在目录

    ./ 和 ../ 的区别
    ./表示当前目录
    ../表示上一级目录
    在根目录/.``..都表示当前目录,它就是顶级目录。

    ll 查看文件信息

    ll等同于ls -l,显示一个目录内所有文件的属性及文件所属的用户和组

    ls 查看文件信息

    ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令
    语法:ls 选项[-ald] [文件或目录]

    • ls -a 显示指定目录下所有子目录与文件,包括隐藏文件
    • ls -l 以列表方式显示所有文件的详细信息
    • ls -h 配合-l以列表的方式显示所有文件大小
    • ls -d 可以查看当前目录的属性

    在Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。

    • *,文件代表文件名中所有字符
    • ls te*,查找以 te 开头的文件
    • ls *html,查找结尾为 html 的文件
    • ,代表文件名中任意一个字符
    • ls ?.c,只找第一个字符任意,后缀为 .c 的文件
    • ls a.?,只找只有3个字符,前2字符为 a. ,最后一个字符任意的文件
    • [],"[" 和 "]" 将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
    • [abc],匹配 a、b、c 中的任意一个
    • [a-f],匹配从 a 到 f 范围内的的任意一个字符
    • ls [a-f]*,找到从 a 到 f 范围内的的任意一个字符开头的文件
    • ls a-f,查找文件名为 a-f 的文件,当 “-” 处于方括号之外失去通配符的作用
    • \,如果要使通配符作为普通字符使用,可以在其前面加上转义字符。“?” 和 “*” 处于方括号内时不用使用转义字符就失去通配符的作用。
    • ls \*a,查找文件名为 *a 的文件

    cd 切换目录

    cd可以帮助用户切换工作目录。
    语法:cd [目录]

    • cd / 进入用户的主目录。
    • cd test 进入当前目录下的test目录,test前面省略了./ 【这个是相对目录】
    • cd /root/test 进入root目录下的test目录 【这个是绝对目录】
    • cd ~ 切换到当前用户的主目录(/home/用户目录)
    • cd . 切换到当前目录
    • cd .. 切换到上级目录
    • cd - 可进入上次所在的目录

    mkdir 创建目录

    mkdir命令可以创建一个新的目录。参数-p表示如果路径里面某一级目录不存在,则会创建这一级目录,不然会报错。
    需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。
    语法:mkdir [目录名]

    • mkdir test 在当前目录下创建一个test的目录
    • mkdir /root/test 在root目录下创建一个test目录
    • mkdir /root/test1/test2/test3 创建目录 这里会报错,因为test1,test2目录不存在 解决办法是 mkdir -p /root/test1/test2/test3
    • mkdir /root/test4 /root/test4 同时创建两个目录
    • mkdir test6 test7 在当前目录下创建两个目录
    • mkdir 'pargam files' 创建一个有空格的目录不推荐使用

    rmdir 删除目录

    rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录需要添加-p参数。

    • rmdir -p /test1/test2/test3

    touch 创建文件

    touch命令可以创建一个新空文件
    语法:touch [文件名]

    • touch test 在当前目录下创建一个test的文件
    • touch /root/test 在root下创建一个test的空文件
    • touch test1 test2 在当前目录下创建两个空文件
    • touch 'test1 test2' 在当前目录下创建一个有空格的文件不推荐使用

    rm 删除文件或目录

    rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。
    语法:rm -r [文件或目录]
    常用参数:

    • -f,强制删除,忽略不存在的文件,无需提示
    • -r,递归的删除目录下的内容,删除目录时必须加这个参数
    • -v,显示删除进度
    • -i,询问是否删除
      案例:
    • rm test1 删除test1文件
    • rm -r test1 删test1文件或者test1目录里面的所有内容会提示
    • rm -rf test1 删除test1文件或者目录不提示
    • rm -rf /root/mywork 删除root下面的mywork文件或者目录不提示
    • rm -rf / 删除根目录下的所有文件,包括操作系统文件 千万不要使用

    cp 拷贝文件或目录

    cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令。
    复制文件或目录,默认的cp只能复制文件,不能是目录,如果是目录要使用-r
    如果文件名重复,会提示是否覆盖?键入y/n即可
    语法:cp -r [源文件或目录] [目的目录]
    常用参数:

    • -a,通常在赋值目录时使用,它保留链接、文件属性,并递归的复制目录
    • -n,已经存在的目标文件而不提示
    • -i,交互式复制,在覆盖目标文件之前将给出提示要求用户确认
    • -r,若给出的源文件是目录,则cp将递归复制该目录的所有子目录和文件,目标文件必须为一个目录名
    • -v,显示拷贝进度

    案例:

    • cp -r /root/mywork /root/helloworld 把mywork目录及子目录复制到helloworld里面
    • cp - /root/install.log /root/helloworld 把install.log文件复制到helloworld里面
    • cp -rvif /root/install.log /root/helloworld 把install.log文件复制到helloworld里面,并显示进度

    mv 移动/重命名文件

    mv命令来移动文件或目录,也可以给文件或目录重命名。
    语法:mv [源文件或目录] [目的目录]
    参数:

    • -f,强制
    • -u,只替换已经更新过的文件
      案例:
    • mv /root/install.log /root/mywork/install.log 把install.log移动到mywork里面
    • mv /root/install.log /root/ins.log 把install.log 重命名为 ins.log

    ln 建立文件链接

    Linux链接文件类似于Windows下的快捷方式
    链接文件分为软链接和硬链接。

    • 硬链接:硬链接只能链接普通文件,不能链接目录,会同步更新。两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在。可以防止误删ls -ilh 可以查看文件的硬盘地址,可以看到硬链接的地址的原文件的地址一样,这也就是为什么能同步更新的原因了
    • 软链接(符号链接):软链接不占用磁盘空间,源文件删除则软链接失效。
      语法:ln -s [源文件] [目标文件]
      参数:-s 创建软链接。
      注意:如果软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。
      案例:
    • ln /etc/issue /root/etc/issue.bak.hard 硬链接,如果删除了issue文件,issue.bak.hard依然可以使用
    • ln -s /etc/issue /root/etc/issue.soft 软链接,如果删除了etc/issue文件,那么issue.soft就失效了

    find 搜索文件

    find命令通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。
    语法:find [搜索路径] [搜寻关键字]
    案例:

    • find /etc -name init 在目录/etc中查找文件init
    • find / -size +204800 在根目录下查找大于100MB的文件
    • find / -user sam 在根目录下查找所有者为sam的文件
    • find /etc -ctime -1 在/etc下查找24小时内被修改过属性的文件和目录
    • find /etc -size +163840 -a -size -204800 在/etc下查找大于80MB小于100MB的文件
    • find /etc -name inittab -exec ls -l {} \ 在/etc下查找inittab文件并显示其详细信息

    tar 压缩/解压缩

    tar是Linux中最常用的备份工具,此命令可以把一系列文件归档压缩到一个大文件中,也可以把压缩文件解开以恢复数据。
    语法: tar [参数] 打包文件名 文件
    参数:

    • -c 创建压缩文件
    • -v 显示进度
    • -f 指定压缩后的文件名,它必须放在最后
    • -t 列出压缩后的文件中包含的文件的文件名
    • -x 解压缩文件
    • -z 打包同时压缩
      注意:-f后面一定是.tar文件,所以必须放在参数的最后,其他参数顺序任意
      案例:
    • tar -zcvf test.tar.gz test 把test文件或目录压缩成test.tar.gz
    • tar -zxvf test.tar.gz 解压test.tar.gz
    • tar -zxvf xxx.tar.gz -C ./dir1 解压到指定目录,大写的C

    文件基本属性(权限)

    Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

    注意:通常,Linux系统只允许文件的属主(所有者)或超级用户root拥有改变文件的读写权限。

    用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

    • 读权限(r) 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
    • 写权限(w) 对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
    • 可执行权限(x) 对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
    [root@localhost ~]# cd /usr
    [root@localhost usr]# ls -lh
    总用量 112K
    dr-xr-xr-x.  2 root root  20K 2月   9 15:08 bin
    drwxr-xr-x.  2 root root    6 4月  11 2018 etc
    drwxr-xr-x.  2 root root    6 4月  11 2018 games
    drwxr-xr-x. 43 root root 8.0K 2月   9 15:08 include
    dr-xr-xr-x. 28 root root 4.0K 2月   9 15:05 lib
    dr-xr-xr-x. 37 root root  20K 2月   9 15:08 lib64
    drwxr-xr-x. 22 root root 4.0K 2月   9 15:05 libexec
    drwxr-xr-x. 14 root root  157 2月   9 14:57 local
    drwxr-xr-x. 11 root root  151 2月   9 15:14 nginx
    dr-xr-xr-x.  2 root root  12K 2月   9 15:08 sbin
    drwxr-xr-x. 78 root root 4.0K 2月   9 15:08 share
    drwxr-xr-x.  4 root root   34 2月   8 10:52 src
    lrwxrwxrwx.  1 root root   10 2月   8 10:52 tmp -> ../var/tmp
    

    每个文件的权限属性由左边第一部分的10个字母来确定。如:drwxr-xr-x,可以从左到右用0-9来表示:

    • 第0位代表文件的类型:
      • d 代表目录
      • - 代表普通文件
      • l 代表软链接文件
      • c 代表装置文件里面的串行端口设备,如:键盘、鼠标(一次性读取装置)
      • b 代表装置文件里面的可供储存的接口设备(可随机存取装置)
      • s 表示管道文件
    • 第1到第9位,以3个rwx为一组,分别代表三组权限:文件所有者、所有者的同组用户、其他用户拥有的权限。有权限则会显示对应的字符,没有权限则用-表示。
      • 第1、4、7位表示读权限,如果是r,则有读权限;如果是-,则没有读权限
      • 第2、5、8位表示读权限,如果是w,则有写权限;如果是-,则没有写权限
      • 第3、6、9位表示读权限,如果是x,则有执行权限;如果是-,则没有执行权限
        每一个用户都有他自身的读、写和执行权限。

    chmod 修改文件权限

    chmod修改文件权限有两种格式:字母法和数字法

    字母法

    语法:chmod [u/g/o/a] [+/-/=] [rwx] 文件
    说明:

    • u user,表示该文件的所有者
    • g group,表示该文件的所有者属于同一用户组
    • o others,表示其他以外的人
    • a 表示者三者都是
    • + 增加权限
    • - 撤销权限
    • = 设定权限
    • r read,表示可读取,对于一个目录,没有这个权限意味着不能通过ls查看这个目录的内容
    • w write,表示可写入,对于一个目录,没有这个权限意味着不能在这个目录下创建新文件
    • x execute,表示可执行,对于一个目录,没有这个权限意味着不能通过cd进入这个目录
    数字法

    文件的权限字符为-rwxrwxrwx,这9个权限是3个3个一组的。其中,我们可以使用数字来代表各个权限:

    • r,与4等价
    • w,与2等价
    • x,与1等价
      每种身份(owner|group|others)各自的三个权限(r/w/x)分数是需要累加的,例如:-rwxrwx---分数是:
    • owner = rwx = 4+2+1 = 7
    • group = rwx = 4+2+1 = 7
    • others = --- = 0+0+0 = 0
      chmod 770 filename即可

    chown 修改文件所有者

    • chown abc hello.java 将hello.java文件的所有者改为用户abc

    chgrp 修改文件所在组

    • chgrp abc hello.java 将hello.java文件的所有用户组改为用户组abc

    文件内容查看

    cat 查看/合并文件

    cat命令用于显示文件内容。或者合并文件。
    参数:

    • -n 显示文件里数据的行号。
      语法:
    • cat [文件名] 显示内容。
    • cat [文件名1] >> [文件名2] 把文件名1里面的内容追加到文件名2里面
    • cat [文件名1] > [文件名2] 先清空文件名2,再把文件名1里面的内容追加到文件名2里面
      案例:
    • cat install.log 查看当前目录下的install.log文件
    • cat /root/install.log 查看root目录下的install.log文件
    • cat test1.txt test2.txt >>test3.txt 把test1.txt和test2.txt里面的内容追加到test3里面
    • cat test1.txt test2.txt > test3.txt 先清空test3.txt,再把test1.txt和test2.txt里面的内容追加到test3里面

    tac 查看文件

    tac是从最后一行开始显示
    cat是从第一行开始显示内容

    nl 查看文件

    nl filename命令,显示文件内容的时候,顺便输出行号

    more 翻页显示文件内容

    more filename,查看的时候,可以键入:

    • 空格 代表翻页,
    • enter 代表向下看一行,
    • :f 显示当前行号

    less 翻页显示文件内容

    与more类似,但是比more更好的是,它可以往前翻页
    less filename,查看的时候,可以键入:

    • 空格,翻页
    • 上下键,代表翻动页面
    • q,退出
    • /字符串,向下查询字符串,高亮显示。这时,键入n继续搜寻下一个
    • ?字符串,向上查询字符串,高亮显示。这时,键入N继续搜寻下一个,向上查找

    head 只看前面几行

    head -n 20 filename,只显示前20行

    tail 只看末尾几行

    tail -n 20 filename,只显示最后20行

    grep 搜索文本

    grep命令允许对文本文件进行查找。意思是搜索文件里面的内容。如果找到匹配模式,grep打印包含模式的所有行。
    一般在前面的指令输入完之后,再通过管道符|继续执行grep xxxxx指令,意思是在前面指令的执行结果中搜索xxxxx内容,并返回结果,也可以理解成过滤。
    语法:grep [指定字串] [源文件]
    参数:

    • -v 显示不包含匹配文本的所有行,相当于求反
    • -n 显示匹配行及行号
    • -i 忽略大小写

    用户管理

    用户是Linux系统工作中重要的一环,在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。
    Linux系统中的root账号通常用于系统的维护和管理,它对Linux操作系统的所有部分具有不受限制的访问权限,也就是超级用户、超级管理员。
    在Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为标准用户
    在大多数版本的Linux中,都不推荐直接使用root账号登录系统。
    在工作中,如果你不是DBA,用的应该都不是root账户
    对用户信息的操作实际上是对/etc/passwd的更新。

    whoami 查看当前用户

    whoami命令用户查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。
    由于系统管理员通常需要使用多种身份登录系统。例如通常使用普通用户登录系统,然后再以su命令切换到root身份进行管理。这时候就可以使用whoami来查看当前用户的身份。

    useradd 添加用户

    添加用户账号可以使用adduseruseradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。
    语法:useradd [参数] 新建用户名

    说明:
    Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
    每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
    用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的;
    如果创建用户的时候,不指定用户组名,那么系统会自动创建一个和用户名一样的用户组名。
    linux中一切皆文件,这里的添加用户就是往某个文件中写入了新用户信息,即/etc/passwd

    参数:

    • -d 指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目录下建立与用户名同名目录为主目录
    • -m 自动建立目录
    • -g 指定组名称
    • -G 指定用户所属的附加组

    案例:

    • useradd -d /home/abc abc -m 创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
    • useradd -d /home/a a -g test -m 创建用户a,如果/home/a目录不存在,就自动创建这个目录,同时用户属于test组

    userdel 删除用户

    案例:

    • userdel abc 删除用户abc,但不会自动删除该用户的主目录
    • userdel -r abc 删除用户abc,同时删除用户的主目录

    usermod 修改用户

    修改用户的参数和添加用户的参数相同
    涉及目录操作,如果目录不存在,建议先创建对应的目录。
    修改完毕之后查看配置文件即可!

    • usermod -d /home/目录名 用户名 修改用户主目录
    • usermod -g 用户组 用户名 修改用户所在组

    su 切换用户

    su命令切换用户,su后面可以加“-”。
    susu –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录。
    案例:

    • su 切换到root用户
    • su root 切换到root用户
    • su - 切换到root用户,同时切换目录到/root
    • su - root 切换到root用户,同时切换目录到/root
    • su 普通用户 切换到普通用户
    • su - 普通用户 切换到普通用户,同时切换目录到该用户主目录

    passwd 修改口令

    超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名。
    输入口令是看不见的,盲敲,然后回车即可。
    案例:

    • 当前用户是root,passwd abc,修改用户abc的口令
    • 当前用户是普通用户,passwd,修改自己的口令

    锁定账户

    可以通过passwdusermod实现。
    比如某个账号不使用了,可以锁定它,然后这个账号就登录不上系统了。

    • passwd -S 用户名 查看账号锁定状态,也可以在文件/etc/shadow中查看,如果用户名:之后是两个!!,就表示这个账号被锁定了。
    • passwd -l 用户名 锁定之后,这个账号就不能登录了,默认配置是没密码就不能登的,意思是可以改。
    • passwd -u 用户名 解锁这个账号
    • passwd -d 用户名 清空这个账号的密码,没有密码也不能登录
    • usermod -L 用户名 锁定之后,这个账号就不能登录了
    • usermod -U 用户名 解锁这个账号
    • touch /etc/nologin 除root以外的用户不能登录了

    /etc/passwd | /etc/shadow 文件介绍

    • /etc/passwd中每一行记录对应着一个用户,每行记录又被:分隔为7个部分,其格式和含义如下:
    # 用户名:口令:用户id:用户组id:注释性描述:用户主目录:登录shell
    # 口令一般用x表示,已经加密了,看不到。真正加密的口令放在/etc/shadow文件中
    root:x:0:0:root:/root:/bin/bash
    
    • /etc/shadow文件格式与/etc/passwd类似,由若干个字段组成,用:分隔
    # 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    root:加密口令::0:99999:7:::
    

    用户组管理

    每个用户都有一个用户组,也叫属组。这个用户组的名字与用户名相同,它是在创建用户时同时创建。
    系统可以对一个用户组中的所有用户进行集中管理。
    工作中一般有开发、测试、运维、root等用户组。
    用户组的操作实际上是对/etc/group文件的更新

    • cat /etc/group 查看有哪些用户组
    • groupadd abc 新建用户组abc
    • groupdel abc 删除用户组abc
    • groups abc 查看用户abc在哪些组
    • groupmod -g 新id abc 修改abc用户组的id
    • groupmod -n 新名字 abc 修改abc用户组的名字
    • newgrp abc 当前账号切换到abc用户组

    进程管理

    在linux中,每一个程序都是有自己的一个进程,每一个进程都有一个id号。
    每一个进程,都有一个父进程。
    进程可以有两种存在方式:前台运行和后台运行。
    一般服务是后台运行的,程序是前台运行的。

    ps 查看进程信息

    进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。
    ps命令可以查看进程的详细状况。
    参数:

    • -a 显示终端上的所有进程,包括其他用户的进程
    • -u 显示进程的详细状态
    • -x 显示没有控制终端(后台运行)的进程
    • -r 只显示正在运行的进程
    • -ef 可以查看到父进程的信息,但我们一般通过目录树结果来查看
      案例:
    • ps -ef | grep java 表示查看所有进程里 CMD 是 java 的进程信息
    • ps -aux | grep java 表示查看所有进程里 CMD 是 java 的进程信息

    端口号

    • netstat -tunlp 用于显示tcp,udp的端口和进程等相关情况
      • -t 显示所有TCP协议连接情况
      • -u 显示所有UDP协议连接情况
      • -n 网络IP地址的形式,显示当前建立的有效连接和端口
      • -l 仅仅显示连接状态为listening的服务网络状态
      • -p 显示pid/program name
      • -a 显示本机所有连接和监听地端口
      • -r 显示路由表信息
      • -s 显示按协议的统计信息
      • -v 显示当前有效的连接
      • -i 显示自动配置端口的状态

    案例:

    • netstat -tnlp //查看当前所有tcp端口
    • netstat -tnlp | grep 端口号 查询具体端口号的信息,
    • netstat -tnulp | grep 80 //查看所有80端口使用情况
    • netstat -unlp //查看当前所有udp端口
    • netstat -anlp 查看一台服务器上面哪些服务及端口
    • netstat -tnp | grep :3306 | wc 查看某一端口的连接数量,比如3306端口
    • netstat -an 查看网络端口使用情况
    • netstat -an | grep 3306 //查看所有3306端口使用情况
    • netstat -anp 显示系统端口使用情况
    • netstat -anp | grep 3306 查看某一端口的连接客户端IP 比如3306端口
    • lsof -i :port,查看指定端口运行的程序,同时还有当前连接。
    • ps -ef | grep mysqld 查看一个服务有几个端口。比如要查看mysqld

    pstree 进程树

    pstree -pu 显示进程树

    • -p 显示父id
    • -u 显示用户组

    kill 终止进程

    kill命令终止指定进程号的进程,相当于Windows的结束任务。需要配合ps使用,查看进程号pid
    我们平时写的java代码,如果死循环了,可以选择结束进程。
    语法:kill [-signal] pid
    signal信号值从0到15,其中 9为绝对终止,可以处理一般信号无法终止的进程。
    案例:

    • kill -9 3333 绝对终止pid为3333的进程

    系统管理

    cal 查看当前日历

    cal查看当前日历
    参数:-y表示整年日历

    查看/配置网卡信息

    ifconfig 或者 ip addr

    ping 测试远程主机连通性

    ping 192.168.137.111

    防火墙管理

    6.X 版本:

    • service iptables status 查看防火墙状态
    • service iptables start 开启防火墙
    • service iptables stop 关闭防火墙

    7.X 版本:

    • firewall-cmd --state 查看防火墙状态
    • systemctl status firewalld.service 查看防火墙状态
    • systemctl start firewalld.service 开启防火墙
    • systemctl stop firewalld.service 关闭防火墙
    • systemctl disable firewalld.service 禁止防火墙开机启动
    # 查看防火墙规则
    firewall-cmd --list-all # 查看全部信息
    # 查看所有开启的端口,如果是阿里云,需要配置安全组规则
    firewall-cmd --list-ports
    
    # 开启端口
    # --zone # 作用域
    # --add-port=9000/tcp # 添加端口,格式为:端口/通讯协议
    # --permanent # 永久生效,没有此参数重启后失效
    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    
    # 重启防火墙
    systemctl restart firewalld.service
    

    下载

    yum -y install vim 下载并安装vim编辑器

    环境安装

    安装软件一般有三种方式:

    • rpm 可以在官网下载
    • 解压缩,下载linux的压缩包,上传到linux服务器,解压缩安装
    • yum 在线安装

    rpm安装jdk

    下载jdk rpm。去Oracle官网下载即可。上传到linux服务器。

    • java -version 先检测当前系统是否存在java环境。
    • 如果有的话,视情况是否需要卸载并重新安装。
    • rpm -qa|grep jdk 检测jdk版本信息
    • rpm -e --nodeps 上一步检测的jdk信息
    • rpm -ivh rpm包 安装jdk

    配置环境变量

    rpm 安装jdk是不需要配置环境变量的。yum安装也不需要。
    解压缩的方式需要手动配置,/etc/profile在文件的最后面增加java的环境变量配置,类似Windows环境变量

    JAVA_HOME=/usr/java/jdkxxxxxxxxxx
    CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
    export CLASSPATH JAVA_HOME
    
    #java environment
    export JAVA_HOME=/usr/java/jdk1.8.0_xxx
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin
    

    配置完成后,需要刷新一下这个文件,让它生效。source /etc/profile

    可以发布一个项目试一下,先打包项目,生成jar包

    # 查看所有开启的端口,如果是阿里云,需要配置安全组规则
    firewall-cmd --list-ports
    # 开启防火墙端口
    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    # 重启防火墙
    systemctl restart firewalld.service
    # 解压/运行jar包
    java -jar xxxxx.jar
    

    项目就开启了,端口9000

    解压缩安装tomcat

    有的项目是war包,就需要在tomcat下运行了。
    下载tomcat。官网下载即可。并上传linux。
    tar -zxvf apache-tomcat-xxxx.tar.gz 解压这个文件
    在刚才解压的tomcat目录下,执行./bin/startup.sh即启动了tomcat

    磁盘管理

    • df列出文件系统整体的磁盘使用量,以byte为单位
    • df -h列出文件系统整体的磁盘使用量,以M或者G为单位
    • du -sm /* 检查根目录下每个目录所占磁盘空间使用量,系统初期最大的就是我们的用户目录/usr,因为很多文件和程序都在这里面

    挂载外部设备

    • mount /dev/设备名 /mnt/设备名 将外部设备xxx挂载到/mnt目录下,来实现访问

    yum安装

    yum -y install 包名 -y含义是所有的提示都选择y

  • 相关阅读:
    Quartz.net
    Perfview 分析进程性能
    windbg 分析cpu异常
    ansible-vault 教程
    ansible 自动化运维(2)
    简单生成随机测试数据
    基于 RabbitMQ-EasyNetQ 实现.NET与Go的消息调度交互
    自绘 TreeDataView 控件
    C# 创建音频WAVE文件头信息(*.wav)
    C# GOF 23种设计模式 学习Log【更新中】
  • 原文地址:https://www.cnblogs.com/sspeng/p/15987440.html
Copyright © 2020-2023  润新知