lunix常用命令

linux如何关闭防火墙

1) 重启后生效 
开启: chkconfig iptables on
关闭: chkconfig iptables off

2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。

在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

 iptables基本操作笔记

drwxrwxrwx权限对应数字

 

Linux下设置开机自启动Tomcat

 

Centos 7 firewall 命令

查看已经开放的端口:

firewall-cmd --list-ports

开启端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

–zone #作用域

–add-port=80/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

重启防火墙

firewall-cmd --reload #重启firewall
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

 

查看端口占用

 

[scidb@localhost bin]$ sudo netstat -anp | grep 2181

 https://www.linuxidc.com/Linux/2017-12/149195.htm

Linux source命令

Linux source命令:

通常用法:source filepath 或 . filepath

功能:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。

source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。这从用法中也能看出来。

 

source filepath 与 sh filepath 、./filepath的区别

  1. 当shell脚本具有可执行权限时,用sh filepath与./filepath是没有区别的。./filepath是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。

  2. sh filepath 会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export。

  3. source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

 

Linux 查看进程和删除进程

1. 在 LINUX 命令平台输入 1-2 个字符后按 Tab 键会自动补全后面的部分(前提是要有这个东西,例如在装了 tomcat 的前提下, 输入 tomcat 的 to 按 tab)。
2. ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看所有进程里 CMD 是 java 的进程信息
ps -aux | grep java
-aux 显示所有状态
ps
3. kill 命令用于终止进程
例如: kill -9 [PID]
-9 表示强迫进程立即停止
通常用 ps 查看进程 PID ,用 kill 命令终止进程

注:

kill -9 还杀死不了线程,用父线程

kill -HUP pid 

1. ps 简介
ps 命令就是最根本相应情况下也是相当强大地进程查看命令.运用该命令可以确定有哪些进程正在运行和运行地状态、 进程 是否结束、进程有没有僵死、哪些进程占用了过多地资源等等.总之大部分信息均为可以通过执行该命令得到地.
2. ps 命令及其参数
ps 命令最经常使用地还是用于监控后台进程地工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设
备进行通信地,所以如果需要检测其情况,便可以运用 ps 命令了.
该命令语法格式如下:
ps [选项]
-e 显示所有进程,环境变量
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a
显示终端上地所有进程,包括其他用户地进程
r
只显示正在运行地进程
x
显示没有控制终端地进程
O[+|-] k1 [,[+|-] k2 [,…]] 根据 SHORT KEYS、k1、k2 中快捷键指定地多级排序顺序显示进程列表.
对于 ps 地不同格式都存在着默认地顺序指定.这些默认顺序可以被用户地指定所覆盖.在这里面“+”字符是可选地,“-” 字符是倒转指定键地方向.
pids 只列出进程标识符,之间运用逗号分隔.该进程列表必须在命令行参数地最后一个选项后面紧接着给出,中间不能插入 空格.比如:ps -f1,4,5.
以下介绍长命令行选项,这些选项都运用“--”开头:
--sort X[+|-] key [,[+|-] key [,…]] 从 SORT KEYS 段中选一个多字母键.“+”字符是可选地,因为默认地方向就是按 数字升序或者词典顺序.比如: ps -jax -sort=uid,-ppid,+pid.
--help 显示帮助信息.
--version 显示该命令地版本信息.
在前面地选项说明中提到了排序键,接下来对排序键作进一步说明.需要注意地是排序中运用地值是 ps 运用地内部值,并非 仅用于某些输出格式地伪值.排序键列表见表 4-3.
表 4-3 排序键列表
c
cmd
可执行地简单名称
C
cmdline
完整命令行
f
flags
长模式标志
g
pgrp
进程地组 ID
G
tpgid
控制 tty 进程组 ID
j
cutime
累计用户时间
J
cstime
累计系统时间
k
utime
用户时间
K
stime
系统时间
m
min_flt
次要页错

 ex:

 ps -ef 或 ps -aux 查看所有进程

查看具体进程:$ ps -ef | grep firefox

改进2——使用pgrep:

一看到pgrep首先会想到什么?没错,grep!pgrep的p表明了这个命令是专门用于进程查询的grep。

$ pgrep firefox

改进3——使用pidof:

看到pidof想到啥?没错pid of xx,字面翻译过来就是 xx的PID。

$ pidof firefox-bin

 

关闭进程:

$ kill -s 9 1827

其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。

 

改进4:

$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9

说明:

“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。

“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。

“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。

“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。

改进5:

知道pgrep和pidof两个命令,干嘛还要打那么长一串!

$ pgrep firefox | xargs kill -s 9

改进6:

$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: No such process

有一个比较郁闷的地方,进程已经正确找到并且终止了,但是执行完却提示找不到进程。

改进7:

难道每次都要调用xargs把PID传递给kill?答案是否定的:

$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`

改进8:

没错,命令依然有点长,换成pgrep。

$kill -s 9 `pgrep firefox`

改进9——pkill:

看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。

$pkill -9 firefox

说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。

改进10——killall:

killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。

$killall -9 firefox

 

 

在linux中,&和&&,|和||介绍如下:

&  表示任务在后台执行,如要在后台运行redis-server,则有  redis-server &

&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'    

| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l

|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"

 find命令详解:

 查找文件
find ./ -type f

查找目录
find ./ -type d

查找名字为test的文件或目录
find ./ -name test

查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find ./ -regex .*so.*\.gz

查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)
find ./ -type d -print -exec ls {} \;

查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -ok ls {} \;

查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)
find ./ -type d -exec ls {} +

查找文件名匹配*.c的文件
find ./ -name \*.c

打印test文件名后,打印test文件的内容
find ./ -name test -print -exec cat {} \;

不打印test文件名,只打印test文件的内容
find ./ -name test -exec cat {} \;

查找文件更新日时在距现在时刻二天以内的文件
find ./ -mtime -2

查找文件更新日时在距现在时刻二天以上的文件
find ./ -mtime +2

查找文件更新日时在距现在时刻一天以上二天以内的文件
find ./ -mtime 2

查找文件更新日时在距现在时刻二分以内的文件
find ./ -mmin -2

查找文件更新日时在距现在时刻二分以上的文件
find ./ -mmin +2

查找文件更新日时在距现在时刻一分以上二分以内的文件
find ./ -mmin 2

查找文件更新时间比文件abc的内容更新时间新的文件
find ./ -newer abc

查找文件访问时间比文件abc的内容更新时间新的文件
find ./ -anewer abc

查找空文件或空目录
find ./ -empty

查找空文件并删除
find ./ -empty -type f -print -delete

查找权限为644的文件或目录(需完全符合)
find ./ -perm 664

查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -664

查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w

查找所有者权限有读权限的目录或文件
find ./ -perm -u=r

查找用户组权限有读权限的目录或文件
find ./ -perm -g=r

查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r

查找所有者为lzj的文件或目录
find ./ -user lzj

查找组名为gname的文件或目录
find ./ -group gname

查找文件的用户ID不存在的文件
find ./ -nouser

查找文件的组ID不存在的文件
find ./ -nogroup

查找有执行权限但没有可读权限的文件
find ./ -executable \! -readable

查找文件size小于10个字节的文件或目录
find ./ -size -10c

查找文件size等于10个字节的文件或目录
find ./ -size 10c

查找文件size大于10个字节的文件或目录
find ./ -size +10c

查找文件size小于10k的文件或目录
find ./ -size -10k

查找文件size小于10M的文件或目录
find ./ -size -10M

查找文件size小于10G的文件或目录
find ./ -size -10G

ln

ln 主要用于在两个文件中创建链接,链接又分为 Hard Links (硬链接)和 Symbolic Links (符号链接或软链接),其中默认为创建硬链接,使用 -s 参数指定创建软链接。

  • 硬链接主要是增加一个文件的链接数,只要该文件的链接数不为 0 ,该文件就不会被物理删除,所以删除一个具有多个硬链接数的文件,必须删除所有它的硬链接才可删除。
  • 软链接简单来说是为文件创建了一个类似快捷方式的东西,通过该链接可以访问文件,修改文件,但不会增加该文件的链接数,删除一个软链接并不会删除源文件,即使源文件被删除,软链接也存在,当重新创建一个同名的源文件,该软链接则指向新创建的文件。
  • 硬链接只可链接两个文件,不可链接目录,而软链接可链接目录,所以软链接是非常灵活的。

ex:

ln -s ./script/test.sh test

用 ls -l 可以看到。

$ ls -l test
lrwxrwxrwx 1 username username 16 May  3 13:42 test -> ./script/test.sh

文件属性的第一个 l 就表示其是一个链接,从后面可以看到是指向./script/test.sh脚本的

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部

xargs要处理的文件如果不是在结尾,需要加上 -i这个参数

xargs常见命令参数


args:xargs的默认命令是echo,空格是默认定界符。  默认替换符号是{}
  

1
2
3
4
-I {}批定了替换字符串,表示文件内容,能循环按要求替换相应的参数  使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,
    当-I与xargs结合使用,每一个参数命令都会被执行一次:  
        -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
  -d 自定义定界符

常用的命令展示

 

多行内容的单输出且每行3个

1
[root@localhost ftl]# cat /home/omc/ftl/logs.txt |xargs -n3

image

查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

1
[root@localhost log]# find /home/omc/ -maxdepth 1 -user root -type f | xargs file {}

image

在/var/log/下查找log文件,复制文件到/home/omc/ftl且把结果保存到/home/omc/ftl/logs.txt文件中

1
2
3
4
[root@localhost log]# find /var/log/*.log -type f | xargs -i cp {} /home/omc/ftl
[root@localhost log]# ll -ltr /home/omc/ftl
[root@localhost log]# find /var/log/*.log -type f > /home/omc/ftl/logs.txt
[root@localhost log]# ll /home/omc/ftl/logs.txt

image

删除 /home/omc/ftl/下的log文件

1
2
[root@localhost ftl]# ll *.log |xargs rm -rf {}     【错误】
[root@localhost ftl]# ls *.log |xargs rm -rf {}     【正确】

image

在当前目录下查找所有用户权限644的文件,并更改权限600

1
2
3
[root@localhost ftl]# ll *.txt
[root@localhost ftl]# find /home/omc/ftl -perm 644 | xargs chmod 600
[root@localhost ftl]# ll *.txt

image

 

用grep命令在当前目录下的所有普通文件中搜索omc这个词

1
2
find /etc/ -name \* -type f |xargs grep "omc"  >/tmp/ftl
    ==>find /etc/ -name "*" -type f |xargs grep "omc"  >/tmp/ftl

image

使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]

find /var/ -name "*.log" |xargs -I [] cp [] /tmp/ 【xargs 默认用是i表示{},用I可以替换符号】

ll -ltr /tmp/ | more 5

image

xargs的-p参数的使用

find . -name "*.log" |xargs -p -i cp {} ../ltesig/

【-p参数会提示让你确认是否执行后面的命令,y执行,n不执行】

image

利用for循环实现和xargs同样的效果

1
2
find /home/omc/ -name *.txt | xargs    -i cp {} /home/omc/h
cat logs.txt |while read line;do echo $line >> logs_bak.txt; done;

image

利用xargs关闭不常用的系统启动软件

1
chkconfig | awk '{print $1}' | grep -Ev "sshd|network|crond|sysstat|rsyslog" | xargs -I{} chkconfig {} off

 

image

xargs总结示范:

1
2
3
4
5
find . -name "*.log" |xargs -p -i cp {} ../ltesig/ 【正确】
find . -name "*.log" |xargs -p cp {} ../ltesig/    【错误】
find . -type f -print | xargs file                 【正确】
find . -type f -print | xargs rm {}                【错误】
总结一下:如果命令后面可以跟内容,且没有目的路径的时候,可以省略-i,否则得加上

 

 

 

 

linux的nohup命令的用法

 linux命令大全

Linux常用基础命令

 附录:

系统信息:

arch 显示机器的处理器架构(1) 
uname -m 显示机器的处理器架构(2) 
uname -r 显示正在使用的内核版本 
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) 
hdparm -i /dev/hda 罗列一个磁盘的架构特性 
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 
cat /proc/cpuinfo 显示CPU info的信息 
cat /proc/interrupts 显示中断 
cat /proc/meminfo 校验内存使用 
cat /proc/swaps 显示哪些swap被使用 
cat /proc/version 显示内核的版本 
cat /proc/net/dev 显示网络适配器及统计 
cat /proc/mounts 显示已加载的文件系统 
lspci -tv 罗列 PCI 设备 
lsusb -tv 显示 USB 设备 
date 显示系统日期 

ctime=`date +%Y-%m-%dT%k:%M:%S` #格式化时间,如2018-01-13T11:09:19, 注意%k 与 %H的区别,前者返回9,后者返回09.

YESTERDAY=`date +%Y-%m-%d -d "-1 days"` 获取昨日日期
cal 2007 显示2007年的日历表 
date 041217002007.00 设置日期和时间 - 月日时分年.秒 
clock -w 将时间修改保存到 BIOS 

查询网关地址(如将centos服务器网络获取类型由dhcp切换为static时,需要获取到ip及网关信息进行固化配置时会用到,如本地ip为10.34.0.123,则通过如下命令查询到网关为第一个3.254):

netstat -rn

CentOS / RedHat 系列,查看操作系统信息(如果没有lsb_release命令, 使用"yum install redhat-lsb"安装):

lsb_release -a

关机 (系统的关机、重启以及登出 )

shutdown -h now 关闭系统(1) 
init 0 关闭系统(2) 
telinit 0 关闭系统(3) 
shutdown -h hours:minutes & 按预定时间关闭系统 
shutdown -c 取消按预定时间关闭系统 
shutdown -r now 重启(1) 
reboot 重启(2) 
logout 注销 

4.文件和目录

cd /home 进入 '/ home' 目录' 
cd .. 返回上一级目录 
cd ../.. 返回上两级目录 
cd 进入个人的主目录 
cd ~user1 进入个人的主目录 
cd - 返回上次所在的目录 
pwd 显示工作路径 
ls 查看目录中的文件 
ls -F 查看目录中的文件 
ls -l 显示文件和目录的详细资料 
ls -a 显示隐藏文件 
ls *[0-9]* 显示包含数字的文件名和目录名 
tree 显示文件和目录由根目录开始的树形结构(1) 
lstree 显示文件和目录由根目录开始的树形结构(2) 
mkdir dir1 创建一个叫做 'dir1' 的目录' 
mkdir dir1 dir2 同时创建两个目录 
mkdir -p /tmp/dir1/dir2 创建一个目录树 
rm -f file1 删除一个叫做 'file1' 的文件' 
rmdir dir1 删除一个叫做 'dir1' 的目录' 
rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 
rm -rf dir1 dir2 同时删除两个目录及它们的内容 
mv dir1 new_dir 重命名/移动 一个目录 
cp file1 file2 复制一个文件 
cp dir/* . 复制一个目录下的所有文件到当前工作目录 
cp -a /tmp/dir1 . 复制一个目录到当前工作目录 
cp -a dir1 dir2 复制一个目录 
ln -s file1 lnk1 创建一个指向文件或目录的软链接 
ln file1 lnk1 创建一个指向文件或目录的物理链接 
touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) 
file file1 outputs the mime type of the file as text 
iconv -l 列出已知的编码 
iconv -f fromEncoding -t toEncoding inputFile > 
outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \;
batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)

5.文件搜索

find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
find / -user user1 搜索属于用户 'user1' 的文件和目录 
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 ^     
find /tmp -name \*.hprof -exec rm -f {} \;批量删除java堆栈.hprof文件 find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 whereis halt 显示一个二进制文件、源码或man的位置 which halt 显示一个二进制文件或可执行文件的完整路径 grep -rn "query_string" * Linux目录下全局查找所有文件中是否包含指定字符串(-r:递归;-n:显示行号)

6.挂载一个文件系统

mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出 
fuser -km /mnt/hda2 当设备繁忙时强制卸载 
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 
mount /dev/fd0 /mnt/floppy 挂载一个软盘 
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom 
mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件 
mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统 
mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备 
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享 

7.磁盘空间

df -h 显示已经挂载的分区列表 
ls -lSr |more 以尺寸大小排列文件和目录 
du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间' 
du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小 
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统) 
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)
查询hdfs文件系统中表文件大小,按从大到小的顺序排列(取前10列),单位GB:
hdfs dfs -du /dw/default | sort -rn | head -n 10 | awk '{printf("%.2f\t\t%.2f\t\t%s\t\n",$1/1024/1024/1024,"\t"$2/1024/1024/1024,"\t"$3)}' 

8.系统负载 -- top

top -d 20 -p 1303              将进程号1303的系统负载,每隔20秒刷新一次。英文状态下,按住c键,将展示进行的详细环境信息,对于java程序调试来说,非常友好。 
top -d 20 -n 3 -b > test.txt   每隔20秒,一共执行3次, 将统计结果导入到test.txt文件中。           

top命令显示不全,添加-w参数:

命令为:top -b -n 1

  • -b为 批处理模式,
  • -n为刷新的次数

发现信息显示不全,最后man top,加一个参数w后,完全显示

top -b -n 1 -w 512

如果需要显示完整的COMMAND命令,使用top -c参数

top -c -bw 500

查看完整进程名, 按500个字符长度查看(这样基本可以查看到完整的命令)

9.用户和群组

groupadd group_name 创建一个新用户组 
groupdel group_name 删除一个用户组 
groupmod -n new_group_name old_group_name 重命名一个用户组 
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户 
useradd user1 创建一个新用户 
userdel -r user1 删除一个用户 ( '-r' 排除主目录) 
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 
passwd 修改口令 
passwd user1 修改一个用户的口令 (只允许root执行) 
chage -E 2005-12-31 user1 设置用户口令的失效期限 
pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 
grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 
newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组 

案例 1:

1-创建用户、2-追加附加组、3-删除附加组

useradd san_zhang -m
passwd san_zhang san_zhang@163.com

从管道输出中修改密码(如果非root且可以转为root,请使用sudo)

echo san_zhang@163.com | sudo passwd --stdin san_zhang

2 将san_zhang追加到附加组hdfs中

可以添加多个附加组,多个组之间用空格隔开,如"hdfs,yarn,spark"),其默认在san_zhang中

usermod -aG hdfs san_zhang

此时查看其所在的用户组,可以发现其所属组为san_zhang,附加组为hdfs,如下:

id san_zhang
uid=1001(san_zhang) gid=1001(san_zhang) groups=1001(san_zhang),992(hdfs)

引申:如果上一步顺序写错,误将hdfs追加到san_zhang用户组中,如使用了如下错误的命令:

usermod -aG san_zhang hdfs

则此时查看hdfs所属组,就会发现其也在san_zhang组下了

id hdfs
uid=995(hdfs) gid=992(hdfs) groups=992(hdfs),994(hadoop),1001(san_zhang)

这时再查看san_zhang组,就会看到误加入的hdfs用户了

groups san_zhang
san_zhang : san_zhang hdfs

3 从san_zhang组中删除误加入的hdfs用户

gpasswd -d hdfs san_zhang 

执行后的日志:Removing user hdfs from group san_zhang

案例 2:

统计某个分组下有哪些用户

[root@cdh01 ~]# grep hdfs /etc/group hdfs:x:993:

[root@cdh01 ~]# awk -F : '{print 4}' /etc/passwd | grep '993' hdfs 993

10.文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消

ls -lh 显示权限 
ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限 
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 
chown user1 file1 改变一个文件的所有人属性 
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 
chgrp group1 file1 改变文件的群组 
chown user1:group1 file1 改变一个文件的所有人和群组属性 
find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 
chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 
chmod u-s /bin/file1 禁用一个二进制文件的 SUID位 
chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 
chmod g-s /home/public 禁用一个目录的 SGID 位 
chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 
chmod o-t /home/public 禁用一个目录的 STIKY 位 

11.文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消

chattr +a file1 只允许以追加方式读写文件 
chattr +c file1 允许这个文件能被内核自动压缩/解压 
chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 
chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 
chattr +s file1 允许一个文件被安全地删除 
chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 
chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 
lsattr 显示特殊的属性 

12.打包和压缩文件

bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 
bzip2 file1 压缩一个叫做 'file1' 的文件 
gunzip file1.gz 解压一个叫做 'file1.gz'的文件 
gzip file1 压缩一个叫做 'file1'的文件 
gzip -9 file1 最大程度压缩 
rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包 
rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1' 
unrar x file1.rar 解压rar包   #如果无unrar命令,参考:Linux CentOS 7.0 下 rar unrar的安装
tar -cvf archive.tar file1 创建一个非压缩的 tarball 
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 
tar -tf archive.tar 显示一个包中的内容 
tar -xvf archive.tar 释放一个包 
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 
tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 
tar -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包 
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 
tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包 
zip file1.zip file1 创建一个zip格式的压缩包 
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包 
unzip file1.zip 解压一个zip格式压缩包 

13.OS包管理器

①、RPM 包 - (Fedora, Redhat及类似系统)

rpm -ivh package.rpm 安装一个rpm包 
rpm -ivh --nodeps package.rpm 安装一个rpm包而忽略依赖关系警告 
rpm -U package.rpm 更新一个rpm包但不改变其配置文件 
rpm -F package.rpm 更新一个确定已经安装的rpm包 
rpm -e [--nodeps] package_name.rpm 删除一个rpm包[--nodeps表示忽略依赖关系] 

rpm -e --nodeps `rpm -qa | grep clickhouse` 批量删除所有 ClickHouse 已安装的 rpm 包,并忽略彼此间的依赖关系
rpm -qa 显示系统中所有已经安装的rpm包 
rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包 
rpm -qi package_name 获取一个已安装包的特殊信息 
rpm -qg "System Environment/Daemons" 显示一个组件的rpm包 
rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 
rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 
rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 
rpm -q package_name --whatprovides 显示一个rpm包所占的体积 
rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l 
rpm -q package_name --changelog 显示一个rpm包的修改历史 
rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 
rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 
rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 
rpm --checksig package.rpm 确认一个rpm包的完整性 
rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 
rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 
rpm -Va 检查系统中所有已安装的rpm包- 小心使用 
rpm -Vp package.rpm 确认一个rpm包还未安装 
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包 
rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包 

②、YUM 软件包升级器 - (Fedora, RedHat及类似系统)

yum install package_name 下载并安装一个rpm包 (如: yum -y install zip unzip)
yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 
yum update package_name.rpm 更新当前系统中所有安装的rpm包 
yum update package_name 更新一个rpm包 
yum remove package_name 删除一个rpm包 
yum list | grep tmux  列出所有可安裝的软件清单命令
yum search package_name 在rpm仓库中搜寻软件包 
yum clean packages 清理rpm缓存删除下载的包 
yum clean headers 删除所有头文件 
yum clean all 删除所有缓存的包和头文件 

③、DEB 包 (Debian, Ubuntu 以及类似系统)

dpkg -i package.deb 安装/更新一个 deb 包 
dpkg -r package_name 从系统删除一个 deb 包 
dpkg -l 显示系统中所有已经安装的 deb 包 
dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包 
dpkg -s package_name 获得已经安装在系统中一个特殊包的信息 
dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表 
dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表 
dpkg -S /bin/ping 确认所给的文件由哪个deb包提供 

④、APT 软件工具 (Debian, Ubuntu 以及类似系统)

apt-get install package_name 安装/更新一个 deb 包 
apt-cdrom install package_name 从光盘安装/更新一个 deb 包 
apt-get update 升级列表中的软件包 
apt-get upgrade 升级所有已安装的软件 
apt-get remove package_name 从系统删除一个deb包 
apt-get check 确认依赖的软件仓库正确 
apt-get clean 从下载的软件包中清理缓存 
apt-cache search searched-package 返回包含所要搜索字符串的软件包名称 

14.文本查看、处理

 ①、查看文件内容

cat file1 从第一个字节开始正向查看文件的内容 
tac file1 从最后一行开始反向查看一个文件的内容 
more file1 查看一个长文件的内容 
less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作 
head -2 file1 查看一个文件的前两行 
tail -2 file1 查看一个文件的最后两行 
tail -f /var/log/messages 实时查看被添加到一个文件中的内容 

②、文本处理

cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT 
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中 
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中 
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug" 
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇 
grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行 
grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug" 

grep -E 'string_1|string_2' /var/log/test.log 在日志中同时查询包含 string_1或包含string_2的记录

# 匹配redis中, field 中包含以1到4位数字开头,以"_已下单"结尾的字符, 并将其 value 值带出来(-A1)
redis-cli -h 111.111.111.111 -p 7001 -c -a ${PASSWORD} 
--raw hgetall 2022-03-24_ORDER_STAT | grep -E "^[[:digit:]]{1,4}_已下单" -A1 grep -Hnr docker * 在本层或子文件夹里递归查找包含指定字符“docker”的文件,并显示文件名+行号,如果精确匹配文本,加o参数。
参数含义:(H:每次匹配时将文件名打印出来;n:打印字符串所在的行号;r:递归查找;o:精确匹配到单词,多一个字符都不行)

“grep显示匹配行的上下行内容”专题:

grep -A2 2 test.txt  返回匹配行和匹配行的后两行
 
grep -B2 2 test.txt  返回匹配行和匹配行的前两行
 
grep -C2 2 text.txt 或者 grep -A2 -B2 2 test.txt 返回匹配行和匹配行的前后两行
  • -A -B -C 后面跟阿拉伯数字
  • -A 返回匹配后和它后面的n行,(After,之后)。
  • -B 返回匹配行和它前面的n行,(Before,之前)。
  • -C 返回匹配行和它前后各n行,通-A和-B联用,(Context,上下文即前后)。
sed -i 's/string1/string2/g' example.txt 
将example.txt文件中的 "string1" 替换成 "string2"(如果不加-i参数,则在内存中替换; 添加-i参数,则在文件中直接替换) sed '/^$/d' example.txt 从example.txt文件中删除所有空白行 sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行 echo 'hElloWorld' | tr '[:lower:]' '[:upper:]' 找出所有的小写字母并全部替换为大写字母 sed -e '1d' result.txt 从文件example.txt 中排除第一行 sed -n '/string1/p' 查看只包含词汇 "string1"的行 sed -e 's/ *$//' example.txt 删除每一行最后的空白字符 sed -e 's/string1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部 sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容 sed -n '5p;5q' example.txt 查看第5行 sed -e 's/00*/0/g' example.txt 用单个零替换多个零 sed -i '3i helloword' test.txt 在test.txt文件的第三行插入‘helloword’字符串

“sed按指定字符串删除”专题:

用sed删除匹配到字符串的行:

语法:sed-i'/关键字符/d'文件名

举例1:匹配"\etc\install.sh"

sed -i '/\/etc\/install.sh/d' 1.txt
  • -i 表示操作在源文件上生效.否则操作内存中数据,并不写入文件中. 在分号内的/d表示删除匹配的行。

举例2:删除以a开头的行

sed -i '/^a.*/d' tmp.txt
  • ^a表示开头是a, .*表示后跟任意字符串

Example-1:  使用sed进行文本批量替换

#!/bin/bash
 
ddl_file_path=/c/Users/user/Downloads/sqoop_data/hive_2_mysql
 
ls $ddl_file_path | while read f;
do
echo "--------->"$ddl_file_path/$f
## Template
#sed -i 's///g' $ddl_file_path/$f
#sed -i "s///g" $ddl_file_path/$f
sed -i 's/111.111.111.111:3306/222.222.222.222:3307/g' $ddl_file_path/$f
sed -i "s/'password_1'/'password_2'/g" $ddl_file_path/$f
done
# echo -e "=========>\n\t Files contains keyword "/WARN:" in path $ddl_file_path are deleted!!!"
#!/bin/bash
 
set -x
 
## Template
#sed -i 's///g' $ddl_file_path/$f
#sed -i "s///g" $ddl_file_path/$f
 
## Func 1 - 实现在所有文件的第四行、第五行插入指定文本
 
ddl_file_path=/e/迅雷下载/user_data_after
 
ls $ddl_file_path | while read f;
do    
    # 如果文件不是文件夹类型,才允许插入操作
    if [ ! -d $f ];then
        echo "--------->"$ddl_file_path/$f
 
        sed -i '4i retries=10' $ddl_file_path/$f
        sed -i '5i retry.backoff=3' $ddl_file_path/$f
    fi
done
 
 
## Func 2 - 如果文件夹不存在,则创建;反之提示文件已存在
 
if [ ! -d "beijing" ];then
    mkdir beijing
else
    echo "File already exists"
fi

文件类型的参数判别:

shell脚本判断文件类型
 
shell判断文件,目录是否存在或者具有权限 
#!/bin/sh 
 
myPath="/var/log/httpd/" 
myFile="/var/log/httpd/access.log" 
 
# 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 
if [ ! -x "$myPath"]; then 
mkdir "$myPath" 
 fi 
 
 # 这里的-d 参数判断$myPath是否存在 
 if [ ! -d "$myPath"]; then 
 mkdir "$myPath" 
 fi 
 
 # 这里的-f参数判断$myFile是否存在 
 if [ ! -f "$myFile" ]; then 
 touch "$myFile" 
 fi 
 
 # 其他参数还有-n,-n是判断一个变量是否是否有值 
 if [ ! -n "$myVar" ]; then 
 echo "$myVar is empty" 
 exit 0 
 fi 
 
 # 两个变量判断是否相等 
 if [ "$var1" = "$var2" ]; then 
 echo '$var1 eq $var2' 
 else 
 echo '$var1 not eq $var2' 
 fi 

文件的判别逻辑:

-a file exists. 
-b file exists and is a block special file. 
-c file exists and is a character special file. 
-d file exists and is a directory. 
-e file exists (just the same as -a). 
-f file exists and is a regular file. 
-g file exists and has its setgid(2) bit set. 
-G file exists and has the same group ID as this process. 
-k file exists and has its sticky bit set. 
-L file exists and is a symbolic link. 
-n string length is not zero. 
-o Named option is set on. 
-O file exists and is owned by the user ID of this process. 
-p file exists and is a first in, first out (FIFO) special file or 
named pipe. 
-r file exists and is readable by the current process. 
-s file exists and has a size greater than zero. 
-S file exists and is a socket. 
-t file descriptor number fildes is open and associated with a 
terminal device. 
-u file exists and has its setuid(2) bit set. 
-w file exists and is writable by the current process. 
-x file exists and is executable by the current process. 
-z string length is zero. 
 
注意-s 和 -f 参数的区别
cat -n file1 标示文件的行数 
cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行 
echo a b c | awk '{print $1}' 查看一行第一栏 
echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 
paste file1 file2 合并两个文件或两栏的内容 
paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分 
sort file1 file2 排序两个文件的内容 
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 
sort file1 file2 | uniq -u 删除交集,留下其他的行 
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) 
comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 
comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 

 

综合案例:

①:本机tcp各种状态数统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
CLOSE_WAIT 2
ESTABLISHED 276
SYN_SENT 2
TIME_WAIT 63270

awk 'BEGIN { sum = 0; for (i = 0; i < 20; ++i) { sum += i; if (sum > 50) exit(10); else print "Sum =", sum } }'

②:使用cut提取文本字符串:

按“:”分割,提取/etc/passwd中第1,3,4,5列数据,按原分隔符":"进行拼接。

 head -n 5 /etc/passwd | cut -d : -f 1,3-5

③:使用uniq进行滤重

cut的具体用法,如下:

A).去除重复行

sort target_file | uniq

B).查找非重复行

sort target_file | uniq -u

C).查找重复行

sort target_file | uniq -d

D).统计每一个文件出现的次数

sort target_file | uniq -c

④:排序

sort linux下的排序工具

参数说明:

  • -r  降序排列
  • -u  去重
  • -n  以数字大小排序(默认是首字母排序)
  • -t  指定分隔符 这里我们指定'|'为分隔符
  • -k  指定分隔后的第几位进行排序 这里我们指定第2位

 systemctl命令:

Linux 服务管理两种方式service和systemctl,systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。systemd对应的进程管理命令是systemctl

1. systemctl命令兼容了service
即systemctl也会去/etc/init.d目录下,查看,执行相关程序

systemctl redis start
systemctl redis stop

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2017-10-26 08:42  让代码飞  阅读(367)  评论(0)    收藏  举报

导航

一款免费在线思维导图工具推荐:https://www.processon.com/i/593e9a29e4b0898669edaf7f?full_name=python