学点程序员必须掌握的Linux知识

2022-09-21 06:45:26 浏览数 (1)

前言

本文关于学习Linux的目的并不是让读者如运维人员那样去精通Linux,而是掌握一些java开发工程师所具备的Linux操作技能。因为很多java程序员在公司负责一个项目的过程中总是避免不了将项目打包后部署到Linux服务器,这时如果你不懂一点与项目部署相关的Linux命令,那你大概只会被你的老板当成一名初级程序员。

1 Linux简介

(1) Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和 多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

(2) Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

(3) 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。官网地址:https://www.kernel.org/

(4)常见发行版

  • 红帽企业版:RedHat Enterprise Linux(RHEL),红帽桌面版Fedora
  • Centos社区发行版:源自RedHat企业版,相比少了一些收费的应用软件
  • Ubentu:桌面版、服务器版、移动版麒麟kylin

区别

(1) 社区版中不提供收费软件(比如jboss)

(2) 社区版不提供技术支持

2 Linux安装

关注笔者的微信公众号,发送关键字【CentOS】,你将获得 CentOS7 64位DVD镜像文件的百度网盘下载地址和提取码

1.1 安装 VMware虚拟化软件

windows系统上安装CentOS7之前需要先安装VMaware Workstation Pro虚拟机.VMaware Workstation Pro 15.0.2下载及安装请参考博客文章《VMware Workstation Pro 15.0.2安装详细步骤》,文章链接如下:https://blog.csdn.net/lihua5419/article/details/84583071

VMaware 虚拟机上安装CentOS7操作系统请参考博客文章《CentOS7安装详细步骤》,文章链接如下:http://www.cnblogs.com/wcwen1990/p/7630545.html

1.2 网络设置

  • 在VMware中修改网关 编辑-虚拟网络编辑器-更改设置-选择对应网卡-子网ip-NAT设置
  • 修改网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
  • 重启网络服务 service network restart

注意:如果ifconfig 命令不存在,则执行如下命令安装 net-tools

yum -y install net-tools

配置网络

代码语言:javascript复制
IPADDR:192.168.33.89
NETMASK=255.255.255.0
GATEWAY=192.168.33.1
DNS1=192.168.33.1

远程访问Linux服务器

一般通过XShell6客工具连接Linux服务器

3 Linux目录介绍

/:根目录

整个文件系统,有一个顶层目录,称为根。

/bin:存放一些可执行的程序、命令。

/boot:系统启动所需的一些文件。

/dev:系统中的设备(硬件在linux中通过“文件”来标识)

/etc:存放系统、软件的配置文件

/home:普通用户目录的主目录,以用户名命名

/lib:系统库目录(32位)

/lib64:系统库目录(64位)

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

/mnt:挂载外部存储设备的文件目录

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

/proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息

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

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

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

/root:root用户的主目录

/sbin:系统的可执行命令

/tmp:系统临时目录

/usr:共享资源目录(多个用户可以共享该目录中的程序)

/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 的预设放置也是在这里

4 Linux 命令

4.1 ls命令

ls /:查看根目录 ls -l: 显示详细信息

ls -lh:显示跟符合人类查看方式

ls -a:显示隐藏文件

4.2 目录切换

pwd:查看当前所在目录

cd:切换目录

cd ..:退回到上一级目录

4.3 创建和删除文件夹命令

mkdir aaa 相对路径写法

mkdir /bbb 绝对路径写法

mkdir -p aaa/bbb/ccc 级联创建目录

touch:创建空文件

rm:删除目录

rm -r:递归删除

rm -rf:递归删除,不提示

>: 重定向,重定向,把一个命令的执行结果,重定向到一个文件中去,屏幕上不会再显示结果.

例如:ls > aaa.txt 重定向,把ls的结果作为字符串写入、覆盖到aaa.txt文件中

ls >> aaa.txt 重定向,把ls的结果作为字符串追加到aaa.txt文件中

echo:输出到控制台

$:作为变量名前缀

代码语言:javascript复制
[root@localhost ~]# echo username
username
[root@localhost ~]# echo $username
fred

4.4 命令文件运行时的路径寻找机制

1、查找可执行的命令所在的路径:which ls 使用shell编写一个程序执行演示。

代码语言:javascript复制
[root@VM_0_10_centos ~]# which ls
alias ls='ls --color=auto'
  /usr/bin/ls

环境变量的问题: 一般通过编辑/etc/profile文件实现

4.5 编辑

vi/vim: 编辑文件,文件不存在时会根据后面的文件名创建文件

-i: 编辑模式

-O:编辑模式(直接到下一行)

-w: 保存

-q: 退出

esc: 退出编辑

4.6 快捷键(非编辑模式下)

a:在光标后一位开始插入

A:在该行的最后插入

I:在该行的最前插入

yy:复制整行

3yy:复制三行

p:粘贴

gg:直接跳到文件首行

G:直接跳到文件的末行

dd:删除一行

3dd:删除三行

/: 搜索内容,n匹配下一个

u:undo(撤销)

ctrl r:redo(执行之前撤销的)

:set nu:设置行号

:set nonu:设置不显示行号

:q! :强制不保存退出

fg 程序编号:切换后台挂起程序

jobs: 查看后台挂起的程序

ctrl z:将程序挂起

4.7 拷贝

cp: 拷贝

示例:cp a.txt b.txt 拷贝a.txt和b.txt两个文件

mv: 移动/改名

示例:mv a.txt aa.txt 将a.txt文件重命名为aa.txt文件

rm: 删除,示例如下

rm -f: 强制删除(不提示,无确认);

rm -rf: 递归强制删除包含子文件的文件夹

5 Linux 权限

5.1 添加用户

useradd tom:添加tom用户

passwd 1234: 给tom用户设置登录密码1234

5.2 Linux文件权限描述格式

Linux权限释义图(来源:菜鸟教程官网)

d rwx rwx rwx

d: 标识节点类型(d: 文件夹;-: 文件;|:链接)

r: 可读,

w: 可写

x: 可执行

  • 第一组rwx:表示这个文件的拥有者对它的权限
  • 第二组rwx:表示这个文件的所属组用户对它的权限
  • 第三组rwx:表示这个文件的其他用户(除以上两种)对它的权限

使用二进制表示权限:例如-rw-rw-r--二进制表示为110,110,100,十进制表示为664

5.3 授权命令 chmod

语法:chmod [-cfvR] [--help] [--version] mode file...

参数说明:

mode : 权限设定字串,格式如下 :

[ugoa...][[ -=][rwxX]...][,...]

其中:

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

-c : 若该文件权限确实已经更改,才显示其更改动作

-f : 若该文件权限无法被更改也不要显示错误讯息

-v : 显示权限变更的详细资料

-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

--help : 显示辅助说明

--version : 显示版本

修改用户对文件的访问权限:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

若要 rwx 属性则 4 2 1=7;

若要 rw- 属性则 4 2=6;

若要 r-x 属性则 4 1=5。

chmod 764 a.txt

6 用户管理

6.1 增加用户

useradd 用户名: 增加用户

passwd 密码: 给用户设置密码`

userdel -r 用户名`:删除用户 加一个-r表示把用户及用户的主目录都删除

exit: 退出会话

6.3 查看所属组

groups:查看当前用户所属组

groups jack:查看指定用户所属组

6.4 su和sudo

su:身份切换 su username 输入密码(root切换不需要输入密码)

sudo:让普通用户具备root的权限(需要配置 /etc/sudoers)

了解完su和sudo,是不是发现sudo有太多的优点了。

su方式切换是须要输入目标用户的password。而sudo仅仅须要 输入自己的password,所以sudo能够保护目标用户的password不外流的。

当帮root管理系统的时候,su是直接将root全部权利交给用户。

而sudo能够更好分工,仅仅要配置好/etc/sudoers,这样sudo能够保护系统更安全,并且分工明白,有条不紊

6.2 增加用户组

groupadd 组名:增加组

usermod -g 组名 用户名:将用户添加到组中

usermod -G 组名1,组名2 用户名 : 将用户添加到多个组中

gpasswd -d 用户名 组名:将用户从组中删除 例如:gpasswd -d jack root | gpasswd -d jack sys

写在最后

本文列举了中高级 java开发人员在工作过程常用的Linux 命令及其用法 ,需要详细学习和掌握Linux 大全 及其详细用法可移步菜鸟教程官网Linux命令大全(https://www.runoob.com/linux/linux-command-manual.html)系统学习

--END--

0 人点赞