Java

Linux 常用命令

2022-08-23  本文已影响0人  丿星纟彖彳亍

系统安全

阿里云挖矿木马处理

阿里云服务器centos7挖矿病毒处理

阿里云服务器更改ssh端口号

常用操作

查看linux中某个端口是否被占用

1> 使用lsof 查看该port是否被占用
lsof -i:port

2> 使用netstat 过滤端口80的使用状态
netstat -antpu |grep 80

linux查看软件安装目录的方法

方法1:whereis 软件名

whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

方法2
ps -ef|grep 软件名
ls -l /proc/进程号/cwd

linux中源码包编译安装后,不受systemctrl控制,启动/关闭服务方式:

启动:/usr/local/nginx/sbin/nginx【没有报错提示,代表成功了】
关闭:/usr/local/nginx/sbin/nginx -s stop

报错:Address already in use 【把http关掉】
注意:同一个端口在使用过程中,不能同时被两个程序占用

正常yum安装的非源码包,受systemctrl控制,可以systemctrl控制启动/关闭

重启:systemctrl restart httpd
启动:service start httpd
关闭:service stop httpd

Linux里面#、0、1、2、@、*、$$、?、!、$_的含义

Linux里面隐藏所敲打的命令【常用于屏蔽显示密码及位数】

Linux里面的三种引号

双引号(“ ”):界定一个完整的字符串
单引号(‘ ’):界定一个完整的字符串,且实现屏蔽特殊符号
反引号():引用命令、提取命令结果 命令==$(命令)

bc计算器里的scale取结果位数

bc [选项]
-i:强制进入交互式模式; -l:定义使用的标准数学库; -w:对POSIX bc环境信息; -v:显示指令版本信息; -h:显示指令的帮助信息; scale=n,管道给计算器后的值,取n位小数

Linux系统里面ssh操作

Linux系统里面scp和sz/rz操作

利用SSH上传、下载(使用sz与rz命令)

Xshell 利用 #sftp 传输文件

Linux里面char与varchar的区别

在mysql教程中char与varchar都是用来存储字符串的,但是他们的保存方式不一样,char有固定的长度,而varchar属于可变长的字符类型。

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

适宜使用char类型的情况:

建议:
myisam存储引擎:建议使用固定长度,数据列代替可变长度的数据列。
memory存储引擎:目前都使用固定数据行存储,因此无论使用char varchar列都没关系
innodb存储引擎:建议使用varchar 类型

MySQL里面数值类型的数

类型 大小 范围(有符号 范围(无符号) 用途
tinyint 1字节 -128~127 0~255 微小整数
smallint 2字节 -32768~32767 0~65535 小整数
mediumint 3字节 -223~223-1 0~2^24-1 中整数
int 4字节 -231~231-1 0~2^32-1 大整数
bigint 8字节 -263~263-1 0~2^64-1 极大整数
float 4字节 单精度浮点数
double 8字节 双精度浮点数
decimal(M,D) 其中M为有效位数、D为小数位数,M应大与D,占M+2字节

mysql数据库中以:数据类型(m) 来约束数据,其中数字m在不同的数据类型中表示含义是不同的;这里以整形数据为例,例如tinyint(m)、int(m)、bigint(m),其中m代表显示宽度,对输入的值的大小没有影响,当字符长度超过(m)时,显示的值就是字符的真实位数(总位数超过m位);当字符长度小于(m)时,显示值是字符值加填充值(总位数等与m位),未设置时,系统默认拿空格填充,人眼看不出变化,一般设置为zerofill(表示用0填充),这样可以保持数据完整性和美观性。

Linux中重要的文件/etc/passwd和/etc/shadow

linux操作系统上的用户如果需要登录主机,当其输入用户名和密码之后:
首先在/etc/passwd文件中查找是否有你的账号,如果没有无法登录,如果有的话将该用户的UID和GID读出来,此外将此用户的shell设置也一并读出。
然后根据UID到/etc/shadow文件中去寻找相应用户的密码,如果匹配一致
进入shell控制的阶段。

/etc/passwd由“:”分割成7个字段

- cat -n /etc/passwd |head -5      //按行查看/etc/passwd前5行,以“:”为分割符号,分割成7个字段
     1    root:x:0:0:root:/root:/bin/bash
     2    bin:x:1:1:bin:/bin:/sbin/nologin
     3    daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4    adm:x:3:4:adm:/var/adm:/sbin/nologin
     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

第一字段:用户名

第二字段:用户的密码原来直接存储在第二字段,但是为了安全,最后专门有了/etc/shadow文件,现在默认用x替代

第三字段:用户的uid,一般情况下root为0,1-499默认为系统账号,有的更大些到1000,500-65535为用户的可登录账号,有的系统从1000开始。

第四字段:用户的gid,linux的用户都会有两个ID,一个是用户uid,一个是用户组id,在我们登录的时候,输入用户名和密码,其实会先到/etc /passwd查看是否有你输入的账号或者用户名,有的话将该账号与对应的UID和GID(在/etc/group中)读出来。然后读出主文件夹与 shell的设置,然后再去检验密码是否正确,正确的话正常登录。

第五字段:用户的账号说明解释

第六字段:用户的家目录文件夹

第七字段:用户使用的shell,如果换成/sbin/nologin/就是默认没有登录环境的。

/etc/shadow由“:”分割成9个字段

[root@53 ~]# cat /etc/shadow |head -5
root:$6$mRObz2Sl$lHrUUJD7SIGDupGx7GnSKceTwfg/lK.qxYHOshnMwsCgYtcEcW45QvVsdiZ5l6y89nY7qkwAF0J.646WgFcRu0:17297:0:99999:7:::
bin:*:16579:0:99999:7:::
daemon:*:16579:0:99999:7:::
adm:*:16579:0:99999:7:::
lp:*:16579:0:99999:7:::

第一字段:用户名,跟/etc/passwd对应。

第二字段:用户的密码加密字段,加密密码,加密算法升级为SHA512散列加密算法,如果密码位为“!!”或“*”代表没有密码,不能登录,其shell为/sbin/nologin。

第三字段:密码最后一次修改的时间,距离Linux诞生的日期(从1970-01-01开始,为什么?因为unix1969年发布雏形,基于当时对系统的考虑,就这样了),以1970年1月1日作为标准时间,每过一天时间间隔的时间戳加1天。

第四字段:密码最少多少天之后可以修改,要过多少天才可以更改密码,默认是0,即不限制密码的有效期

第五字段:密码多少天之后必须修改(例子中99999就是表明可以一直不用修改密码),若设置成20,即20天后到期,必须修改密码,不然登录不了系统。

第六字段:密码到期前的警告期限,若设置为6,即到期前6天将通知用户。密码修改之前几天提醒我修改(例子中是7天之前)

第七字段:账号失效宽限期(和第5字段相对比),要是没有修改延长几天,若设置为2,到期过后2天后再不修改密码,用户锁定。

第八字段:账号的生命周期(要用时间戳表示),到了指定的期限,账号将失效。无论怎样到这个时间过期(例子中的时间从1970-01-01算)

第九字段:保留字段,目前无含义

Linux系统推算root密码最后一次更改日期,计算距离1970-1-1时间:

[root@52 ~]# date -u -d"1970-01-01 UTC $((13025*86400))seconds"   //这个13025是指相对1970年1月1日到现在已经经过多少天, 其中86400是一天多少秒?   60*60*24=86400秒
2005年 08月 30日 星期二 00:00:00 UTC
[root@52 ~]# date -u -d"1970-01-01 UTC $((17297*86400))seconds"  //例如上面例子中的root密码最后一次更改时间如此
2017年 05月 11日 星期四 00:00:00 UTC

设置ssh欢迎页面信息

/etc/issue # 登录前提示
/etc/motd # 登录后提示
ssh还可以修改/etc/ssh/sshd_config里Banner项所指示的文件

Linux命令查看日历

[root@room8pc205 ~]# cal 
用法:
cal [选项] [[[日] 月] 年]
选项:
 -1, --one        只显示当前月份(默认)
 -3, --three      显示上个月、当月和下个月
 -s, --sunday     周日作为一周第一天
 -m, --monday     周一用为一周第一天
 -j, --julian     输出儒略日
 -y, --year       输出整年
 -V, --version    显示版本信息并退出
 -h, --help       显示此帮助并退出

Linux命令查看天气预报

前提:命令行查询天气预报,需要能连上因特网的 Linux

原理:http://wttr.in 是一个允许你搜索世界各地天气预报的网站,而且它的是以 ASCII 字符的形式来显示结果的。通过使用 curl 访问 http://wttr.in ,就能直接在终端显示查询结果了。

[root@room8pc205 ~]# curl wttr.in/New+York  //显示纽约天气

[root@room8pc205 ~]# curl wttr.in   //获取所在地的天气信息,根据IP地址定位,可能有误差

[root@room8pc205 ~]# curl wttr.in/shenzhen   //获取指定位置的天气

[root@room8pc205 ~]# curl wttr.in/New+York   //你可以通过在 wttr.in 后加上斜杠和城市名称的方式来获得其他城市的天气情况。不过要把名字中的空格替换成 + 。

[root@room8pc205 ~]# curl wttr.in/New_York  //你也可以以 Unix 时区的形式来填写城市名称

[root@room8pc205 ~]# curl wttr.in/JFK   //若你对地区的三位机场代号很熟悉,你也可以使用机场代号来查询天气。一般来说使用机场要比使用城市更贴近你,而且更精确一些。

[root@room8pc205 ~]# curl wttr.in/~Statue+Of+Liberty  //通过使用 ~ 字符,你可以让 wttr.in 通过地标来猜测天气情况。

[root@room8pc205 ~]# curl wttr.in/@linuxconfig.org   //你想不想知道 LinuxConfig 托管地的天气?现在有一个方法可以知道! wttr.in 可以通过域名获取天气。是的,这个功能可能不那么实用,但这很有趣啊。

更改温度单位:默认情况下, wttr.in 会根据你的实际地址来决定显示哪种温度单位(C 还是 F)。基本上,在美国,使用的是华氏度,而其他地方显示的是摄氏度。你可以指定显示的温度单位,在 URL 后添加 ?u 会显示华氏度,而添加 ?m 会显示摄氏度。

[root@room8pc205 ~]# curl wttr.in/New_York?m

[root@room8pc205 ~]# curl wttr.in/Toronto?u

在 ZSH 上有一个很奇怪的 bug,会使得这两条语句不能正常工作,如果你需要更换单位,恐怕需要改成使用 Bash 了。

注释:ZSH是一个Linux用户很少使用的shell,这是由于大多数Linux产品安装,以及默认使用bash shell。几乎每一款Linux产品都包含有zsh,通常可以用apt-get、urpmi或yum等包管理器进行安装

Linux服务器jps报process information unavailable

在Linux下执行 jps 是快速查看Java程序进程的命令,一般情况下hadoop,hbase,storm等进程都是通过jps查看,有些时候因为进程没有被正常结束,比如资源占用过大时挂掉或者没有结束进程就直接重启计算机,会导致原有进程变为-- process information unavailable这样的空值,有时候不用管它,一段时间后会自动消失,如果一直不消失的情况下,可以使用如下方法清理:

进入/tmp目录 cd /tmp 可以看到有很多以hsperfdata_{用户名}这样的目录,比如:hsperfdata_hbase,hsperfdata_kafka,hsperfdata_root这样的目录,是因为进程虽然在内存中关闭了,但是Linux还会在/tmp下寻找这些临时文件,而此时临时文件并没有没正常删除,这时候直接执行 rm -rf hsperfdata_* 删除这些目录,然后再次执行 jps 查看,以上那些进程就不存在了。

总的来说直接执行 rm -rf /tmp/hsperfdata_ * 可以快速清除那些残留进程

如果有很多正常运行的进程时,其中夹杂部分残留进程,这个时候不建议全部删除上面的目录,这时候要根据目录和进程的对应关系分析出残留的单个目录来删除无用的进程即可

添加用户并修改用户密码以及删除用户及用户家目录:

[root@localhost /]# useradd --help
用法:useradd [选项] 登录
useradd -D
useradd -D [选项]

选项:
  -b, --base-dir BASE_DIR       新账户的主目录的基目录        #以这个指定目录为基目录,在其目录下创建用户家目录,如不指定则默认以/home目录为基目录
  -c, --comment COMMENT         新账户的 GECOS 字段
  -d, --home-dir HOME_DIR       新账户的主目录                   #指定用户家目录,一般用绝对路径,优先级最高,指定后用户家目录为该目录,一般不指定已存在的目录,否则将不能删除用户家目录
  -D, --defaults                显示或更改默认的 useradd 配置
 -e, --expiredate EXPIRE_DATE  新账户的过期日期
  -f, --inactive INACTIVE       新账户的密码不活动期
  -g, --gid GROUP               新账户主组的名称或 ID     #指定新建用户的主组
  -G, --groups GROUPS   新账户的附加组列表        #指定新建用户附属组
  -h, --help                    显示此帮助信息并推出
  -k, --skel SKEL_DIR   使用此目录作为骨架目录
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -l, --no-log-init     不要将此用户添加到最近登录和登录失败数据库
  -m, --create-home     创建用户的主目录
  -M, --no-create-home          不创建用户的主目录
  -N, --no-user-group   不创建同名的组
  -o, --non-unique              允许使用重复的 UID 创建用户
  -p, --password PASSWORD               加密后的新账户密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             新账户的登录 shell
  -u, --uid UID                 新账户的用户 ID
  -U, --user-group              创建与用户同名的组
  -Z, --selinux-user SEUSER     为 SELinux 用户映射使用指定 SEUSER

[root@localhost /]# userdel --help
用法:userdel [选项] 登录

选项:
  -f, --force                   force some actions that would fail otherwise e.g. removal of user still logged in or files, even if not owned by the user
  -h, --help                    显示此帮助信息并推出
  -r, --remove                  删除主目录和邮件池       #删除用户时顺带将用户家目录删除,此项最常用
  -R, --root CHROOT_DIR         chroot 到的目录
  -Z, --selinux-user            为用户删除所有的 SELinux 用户映射

useradd -d /usr/sam sam # 创建sam用户,并指定sam的家目录为/usr/sam。不加-d指定的话,系统默认在/home目录下创建用户的家目录

userdel -r sam # 删除sam用户及sam用户的家目录,-r表示删除用户家目录及其邮件池
useradd -b /test sara # 创建sara用户,以/test目录为基目录创建家目录,查看用户家目录为/test/sara

useradd -M -s /sbin/nologin -g nginx nginx # -M 创建用户时不创建用户家目录;-s 指定创建的用户所使用的shell,/sbin/nologin表示不允许登录,如果nginx组不存在时会有报错提示,需要先创建nginx组

useradd -g sara1 -G sara2,sara3 sara #-g 创建用户时指定用户的属组sara1

例子1:

    [root@localhost ~]# useradd -s /bin/sh -g sara1 -G sara2,sara3 sara        #创建sara用户时,指定登录的shell是/sbin/nologin,即不允许该用户登录,-g 指定用户的主组(唯一) -G 指定用户的附属组(可以指定多个组)

    [root@localhost ~]# ls /home/                                            #若没有特殊指定,默认将用户的家目录放到/home下

    sara

    [root@localhost ~]# id sara

    uid=500(sara) gid=500(sara1) 组=500(sara1),501(sara2),502(sara3)        #主组为sara1附加组为sara2和sara3

Linux中对比两个文件内容

linux下清空文件内容的3个命令

1、使用echo "" > file_name,直接将空字符串重定向并覆盖到目标文件

2、使用cat /dev/null > file_name,读取dev目录下的一个null文件,并重定向覆盖目标文件,类似方法1

3、使用vi或vim进入文件,输入冒号:—— %d——回车即可清空整个文件——保存Esc:wq

复制

1、复制前者到后者中
cat start-smservice.sh >> start-holservice.sh
Windows中对比两个文件用Beyond Compare,Linux中常用diff命令,详细使用方法参考以下链接:
https://www.cnblogs.com/wangqiguo/p/5793448.html#_label6

判断

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真

开启虚拟内存

这个技术在云服务器上使用,可以省很多银子的哦!!!
全部执行过程:

[root@VM_0_8_centos ~]# free -m # 查看内存使用情况
              total        used        free      shared  buff/cache   available
Mem:           1838        1502          69           0         265         183
Swap:             0           0           0
[root@VM_0_8_centos ~]# mkdir /swap
[root@VM_0_8_centos ~]# dd if=/dev/zero of=/swap/swapadd bs=1024 count=2024288 # 创建虚拟内存磁盘卷 大概count=2024288,2G左右,可以视磁盘大小和需求创建。 默认存放在/swap/swapadd,可以是自己的任何目录。
2024288+0 records in
2024288+0 records out
2072870912 bytes (2.1 GB) copied, 18.7357 s, 111 MB/s
[root@VM_0_8_centos ~]# mkswap /swap/swapadd # 将磁盘卷转为虚拟内存卷
Setting up swapspace version 1, size = 2024284 KiB
no label, UUID=a6a67e41-fb1f-417c-aa03-cf8c91fc0d65
[root@VM_0_8_centos ~]# swapon /swap/swapadd # 启用虚拟内存服务
swapon: /swap/swapadd: insecure permissions 0644, 0600 suggested.
[root@VM_0_8_centos ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1838        1503          75           0         258         180
Swap:          1976           0        1976
[root@VM_0_8_centos ~]# 

开机自动挂载
编辑/etc/fstab文件,加入以下信息:
/swap/swapadd swap swap defaults 0 0
调整swap优先级
临时:·sysctl vm.swappiness=100·
永久:·vi /etc/sysctl.conf·
在文档的最后加上:
·vm.swappiness=100·

移动虚拟内存空间
如果当前的虚存所在的磁盘空间不够,可以首先关闭虚存服务,将其移动到别的磁盘,再启用即可。

swapoff -v /swap/swapadd
mv /swap/swapadd /mnt/swap
swapon /swap/swapadd

set -e

set-e:表示后续所有的bash命令的返回code如果不是0,那么脚本立即退出,后续的脚本将不会得到执行的机会;
set+e:这个是默认的状态,表示就算后续的命令如果返回值不是0,那么脚本依然向下执行;

上一篇 下一篇

猜你喜欢

热点阅读