chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

Linux经验汇总

linux安装软件和卸载的几种方法

一、rpm包安装方式步骤:

1、找到相应的软件包,比如soft.version.rpm,下载到本机某个目录;

2、打开一个终端,su -成root用户;

3、cd soft.version.rpm所在的目录;

4、输入rpm -ivh soft.version.rpm

详细介绍:

  1. 安装:
      我只需简单的一句话,就可以说完。执行:
      rpm –ivh rpm的软件包名
      更高级的,请见下表:
      rpm参数 参数说明
      -i 安装软件
      -t 测试安装,不是真的安装
      -p 显示安装进度
      -f 忽略任何错误
      -U 升级安装
      -v 检测套件是否正确安装
      这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。
  2. 卸载:
      我同样只需简单的一句话,就可以说完。执行:
      rpm –e 软件名
      不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:
      rpm –ivh software-1.2.3-1.i386.rpm
      而当卸载时,则应执行:
      rpm –e software。
    另外,在Linux中还提供了象GnoRPM、kpackage等图形化的RPM工具,使得整个过程会更加简单。

二、deb包安装方式步骤:

1、找到相应的软件包,比如soft.version.deb,下载到本机某个目录;

2、打开一个终端,su -成root用户;

3、cd soft.version.deb所在的目录;

4、输入dpkg -i soft.version.deb

详细介绍:

这是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得更早,所以在各种版本的Linux都常见到。而debian的包管理器dpkg则只出现在Debina Linux中,其它Linux版本一般都没有。

  1. 安装
      dpkg –i deb的软件包名
      如:dpkg –i software-1.2.3-1.deb
  2. 卸载
       dpkg –e 软件名
      如:dpkg –e software
  3. 查询:查询当前系统安装的软件包:
    dpkg –l ‘软件包名
    如:dpkg –l ‘software

三、tar.gz源代码包安装方式:

1、找到相应的软件包,比如soft.tar.gz,下载到本机某个目录;

2、打开一个终端,su -成root用户;

3、cd soft.tar.gz所在的目录;

4、tar -xzvf soft.tar.gz //一般会生成一个soft目录

5、cd soft

6、./configure

7、make

8、make install

1. 安装:

  整个安装过程可以分为以下几步:
  1) 取得应用软件:通过下载、购买光盘的方法获得;
  2)解压缩文件:一般tar包,都会再做一次压缩,如gzip、bz2等,所以你需要先解压。如果是最常见的gz格式,则可以执行:“tar –xvzf 软件包名”,就可以一步完成解压与解包工作。如果不是,则先用解压软件,再执行“tar –xvf 解压后的tar包”进行解包;
  3) 阅读附带的INSTALL文件、README文件;
  4) 执行“./configure”命令为编译做好准备;
  5) 执行“make”命令进行软件编译;
  6) 执行“make install”完成安装;
  7) 执行“make clean”删除安装时产生的临时文件。
  好了,到此大功告成。我们就可以运行应用程序了。但这时,有的读者就会问,我怎么执行呢?这也是一个Linux特色的问题。其实,一般来说, Linux的应用软件的可执行文件会存放在/usr/local/bin目录下!不过这并不是“放四海皆准”的真理,最可靠的还是看这个软件的 INSTALL和README文件,一般都会有说明。

2. 卸载:

  通常软件的开发者很少考虑到如何卸载自己的软件,而tar又仅是完成打包的工作,所以并没有提供良好的卸载方法。
  那么是不是说就不能够卸载呢!其实也不是,有两个软件能够解决这个问题,那就是Kinstall和Kife,它们是tar包安装、卸载的黄金搭档。

四、tar.bz2源代码包安装方式:

1、找到相应的软件包,比如soft.tar.bz2,下载到本机某个目录;

2、打开一个终端,su -成root用户;

3、cd soft.tar.bz2所在的目录;

4、tar -xjvf soft.tar.bz2 //一般会生成一个soft目录

5、cd soft

6、./configure

7、make

8、make install

五、apt方式安装:(安装deb包)

1、打开一个终端,su -成root用户;

2、apt-cache search soft 注:soft是你要找的软件的名称或相关信息

3、如果2中找到了软件soft.version,则用apt-get install soft.version命令安装软件

注:只要你可以上网,只需要用apt-cache search查找软件,用apt-get install软件
详细介绍:


apt-get是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。

apt-get命令一般需要root权限执行,所以一般跟着sudo命令例sudo apt-get xxxx
apt-get install packagename——安装一个新软件包(参见下文的aptitude)
apt-get remove packagename——卸载一个已安装的软件包(保留配置文件)
apt-get --purge remove packagename——卸载一个已安装的软件包(删除配置文件)
dpkg --force-all --purge packagename ——有些软件很难卸载,而且还阻止了别的软件的应用,就可以用这个,不过有点冒险。
apt-get autoremove——因为apt会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件。
apt-get autoclean——定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,可以释放大量的磁盘空间。如果需求十分迫切,可以使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。
apt-get clean——这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的。
apt-get upgrade——更新所有已安装的软件包
apt-get dist-upgrade——将系统升级到新版本
apt-cache search string——在软件包列表中搜索字符串
apt-cache showpkg pkgs——显示软件包信息。
apt-cache stats——查看库里有多少软件
apt-cache dumpavail——打印可用软件包列表。
apt-cache show pkgs——显示软件包记录,类似于dpkg –print-avail。
apt-cache pkgnames——打印软件包列表中所有软件包的名称
(需要定期运行这一命令以确保您的软件包列表是最新的)
简单的说: dpkg只能安装已经下载到本地机器上的deb包. apt-get能在线下载并安装deb包,能更新系统,
且还能自动处理包与包之间的依赖问题,这个是dpkg工具所不具备的。

六、yum方式安装:(安装rpm包)

rpm 是linux的一种软件包名称,以.rmp结尾,安装的时候语法为:rpm -ivh。
rpm包的安装有个很大的缺点就是文件的关联性太大,有时装一个软件要安装很多其他的软件包,很麻烦。
所以为此RedHat小红帽开发了yum安装方法,他可以彻底解决这个关联性的问题,很方便,只要配置两个文件即可安装,安装方法是:yum -y install 。
yum并不是一中包,而是安装包的软件

简单的说: rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,
且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。

七、bin文件安装:

如果你下载到的软件名是soft.bin,一般情况下是个可执行文件,安装方法如下:

1、打开一个终端,su -成root用户;

2、chmod +x soft.bin

3、./soft.bin //运行这个命令就可以安装软件了

八、不需要安装的软件:

有了些软件,比如lumaqq,是不需要安装的,自带jre解压缩后可直接运行。假设

下载的是lumaqq.tar.gz,使用方法如下:

1、打开一个终端,su -成root用户;

2、tar -xzvf lumaqq.tar.gz //这一步会生成一个叫LumaQQ的目录

3、cd LumaQQ

4、chmod +x lumaqq //设置lumaqq这个程序文件为可运行

5、此时就可以运行lumaqq了,用命令./lumaqq即可,但每次运行要输入全路径或

切换到刚才生成的LumaQQ目录里

6、为了保证不设置路径就可以用,你可以在/bin目录下建立一个lumaqq的链接,

用命令ln -s lumaqq /bin/ 即可,以后任何时候打开一个终端输入lumaqq就可以

启动QQ聊天软件了

7、 如果你要想lumaqq有个菜单项,使用菜单编辑工具,比如Alacarte Menu

Editor,找到上面生成的LumaQQ目录里的lumaqq设置一个菜单项就可以了,当然你

也可以直接到 /usr/share/applications目录,按照里面其它*.desktop文件的格

式生成一个自己的desktop文件即可。

PS:软件的安装


  —- Linux下软件的安装主要有两种不同的形式。第一种安装文件名为filename.tar.gz。另一种安装文件名为 filename.i386.rpm。以第一种方式发行的软件多为以源码形式发送的。第二种方式则是直接以二进制形式发行的。i386即表示该软件是按 Inter 386指令集编译生成的。
  —- 对于第一种,安装方法如下:
  —- 首先,将安装文件拷贝至你的目录中。例如,如果你是以root身份登录上的,就将软件拷贝至/root中。
  —- #cp filename.tar.gz /root
  —- 由于该文件是被压缩并打包的,所以,应对其解压缩。命令为:
  —- #tar xvzf filename.tar.gz
  —- 执行该命令后,安装文件按路径,解压缩在当前目录下。用ls命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有名为”INSTALL”的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
  —- 对于多数需要编译的软件,其安装的方法大体相同。执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为:
  —- #./configure
  —- 如果检查过程中,发现有错误,configure将给予提示,并停止检查。你可以跟据提示对系统进行配置。再重新执行该程序。检查通过后,将生成用于编译 的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机的性能的不同,所耗费的时间也不同。命令为:
  —- #make
  —- 成功编译后,键入如下的命令开始安装:
  —- #make install
  —- 安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:
  #make clean
  #make distclean
  至此,软件的安装结束。
  —- 对于第二种,其安装方法要简单的多。
  —- 同第一种方式一样,将安装文件拷贝至你的目录中。然后使用rpm来安装该文件。命令如下:
  —- #rpm -i filename.i386.rpm
  —- rpm将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到rpm的数据库中。参数i的作用是使rpm进入安装模式。
  —- 另外,还有一些Linux平台下的商业软件。在其安装文件中,有Setup安装程序,其安装方法同Windows平台下的一样。如:Corel WordPerfect。
  软件的卸载
  —- 软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:
  —- #rpm -q -a
  —- 即可查询到当前系统中安装的所有的软件包。参数q的作用是使rpm进入查询命令模式。参数a是查询模式的子参数,意为全部(ALL)。查询到的信息较多,可使用less人屏显示。
  —- 确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:
  —- #rpm -e [package name]
  —- 即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为[package name]的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命 令来忽略依赖关系,直接开始卸载:
  —- #rpm -e [package name] -nodeps
  —- 忽略依赖关系的卸载可能会导致系统中其它的一此软件无法使用。你可以使用
  —- #rpm -e [package name] -test
  —- 使rpm进行一次卸载预演,而不是真正卸载。这样可以使你检查一下软件是否存在有依赖关系。卸载过程中是否有错误。

交换分区的启用

编译安装过程,执行make命令时报错:

1
2
3
4
5
6
7
c++: internal compiler error: Killed (program cc1plus) 
Please submit a full bug report,
with preprocessed source if appropriate.
See http://bugzilla.redhat.com/bugzilla for instructions.
make[2]: * [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4
make[1]: * [sql/CMakeFiles/sql.dir/all] Error 2
make: * [all] Error 2

原因解析:
内存不足,mysql5.9以上的版本,编译安装需要1G内存,而我的云主机刚好1G内存。

解决方案
内存不足当然加内存,加内存太贵?那就把硬盘当内存来用把

1
2
3
4
$dd if=/dev/zero of=/data/swap_add bs=1M count=2048
$mkswap /data/swap_add
$swapon /data/swap_add
$swapon -s

内存不足出错

解决方法:增加swap space 交换空间

1、创建空文件

/media/swapfile.img只是一个实例文件,这个文件你可以自定义创建任意一个空白文件

dd if=/dev/zero of=/media/swapfile.img bs=1024 count=1M

2、生成文件交换系统

mkswap /media/swapfile.img
3、设置开机启动

1
2
3
4
5
# Add this line to /etc/fstab
vim /etc/fstab

//加入
/media/swapfile.img swap swap sw 0 0

4、激活

swapon /media/swapfile.img
5、验证是否成功

[root@izwz956snfyrvah6yq8sa4z ~]# cat /proc/swaps

1
2
Filename                                Type            Size    Used    Priority
/media/swapfile.img file 1048572 0 -2

[root@izwz956snfyrvah6yq8sa4z ~]# grep 'Swap' /proc/meminfo

1
2
3
SwapCached:            0 kB
SwapTotal: 1048572 kB
SwapFree: 1048572 kB

Linux上创建SWAP文件/分区 :参考

dd命令解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.if=文件名:输入文件名,缺省为标准输入。即指定源文件。<if=inputfile>
2.of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3.ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4.cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5.skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6.seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7.count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8.conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternateebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

1.将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份磁盘开始的512个字节大小的MBR信息到指定文件
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
dd if=/root/image of=/dev/hda
7.备份软盘
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
(即块大小为1.44M)
8.拷贝内存内容到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
(指定块大小为1k)
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
dd if=/dev/cdrom(hdc) of=/root/cd.iso
10.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
mkswap /swapfile
第三步:启用这个swap文件:
swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile swap swap defaults 0 0
11.销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:

1
2
3
4
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic fluxpoint。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
15.dd命令做usb启动盘
dd if=xxx.iso of=/dev/sdb bs=1M
root用户或者sudo,用以上命令前必须卸载u盘,sdb是你的u盘,bs=1M是块的大小,后面的数值大,写的速度相对快一点,但也不是无限的,我一般选2M,注意,执行命令后很快完成,但u盘还在闪,等不闪了,安全移除。

Linux系统 cmake2.8升级到cmake-3.9.2版本

1、查看当前版本

cmake --version

2、下载获得cmake-3.9.2源码

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz

3、解压、安装新版本

tar -xvf cmake-3.9.2.tar.gz

cd cmake-3.9.2

./configure

sudo make && make install

【注】安装完后,执行cmake –version会报如下错误

1
2
3
4
5
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
/Applications/CMake 2.8-11.app/Contents/bin
CMake Error: Error executing cmake::LoadCache(). Aborting.

【解决方法】

先执行:hash -r

然后再执行:cmake --version

完美解决

Linux下文件编码批量转换UTF-8命令

Linux命令 enca 查看文件的编码(好用 首推)

一、源码包

1
http://dl.cihar.com/enca/

二、使用方法

1
2
3
4
5
6
7
8
enca -L zh_CN file 检查文件的编码 
enca -L zh_CN -x UTF-8 file 将文件编码转换为"UTF-8"编码
enca -L zh_CN -x utf-8 * 把文件夹下的所有文件转换为utf8编码
```

三、批量转换

目录转换报错不影响

find | grep -v ‘.svn’ | xargs enca -L zh_CN -x UTF-8

1
2
3
4
5
### 字符编码转换 iconv命令

语法

`iconv -f encoding [-t encoding] [inputfile]... `

选项
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
–verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。

1
2
3
4
5
6
7
8
9
10
11
实例
列出当前支持的字符编码:

`iconv -l `
将文件file1转码,转后文件输出到fil2中:

`iconv file1 -f EUC-JP-MS -t UTF-8 -o file2`

这里,没-o那么会输出到标准输出。

### 在Linux下将整个目录的文件转换字符编码的脚本

‘#’ !/bin/sh
for srcfile in *.gbk;
do
dstfile=${srcfile/.gbk/}
if [ “$srcfile” -nt “$dstfile” ]; then
echo convert $srcfile to $dstfile …
iconv -f gbk -t utf8 $srcfile >$dstfile
fi
done

1
2
3
4
5
6
### linux文件名编码转换工具convmv(文件名而已)

convmv能帮助我们很容易地对一个文件,一个目录下所有文件进行编码转换,比如gbk转为utf8等。

语法:
`convmv [options] FILE(S) … DIRECTORY(S)`

主要选项:
1、-f ENCODING
指定目前文件名的编码,如-f gbk
2、-t ENCODING
指定将要转换成的编码,如-t utf-8
3、-r
递归转换目录下所有文件名
4、–list
列出所有支持的编码
5、–notest
默认是只打印转换后的效果,加这个选项才真正执行转换操作。
更多选项请man convmv。

1
2
例子:
递归转换centos目录下的目前文件名编码gbk为utf-8:

convmv -f gbk -t utf-8 –notest -r centos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

## pkg-config 详解

pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息。

[pkg-config 详解(CSDN)](https://blog.csdn.net/newchenxf/article/details/51750239)

## 使用 sudo apt-get install 命令安装软件的目录在哪?

bin文件路径: /usr/bin
库文件路径: /usr/lib/
其它的图标啊什么的路径: /usr/share
配置文件路径: /etc/

## Wget 命令详解
[原文档](https://www.gnu.org/software/wget/manual/wget.html)
```Wget主要用于下载文件,在安装软件时会经常用到,以下对wget做简单说明。

1、下载单个文件:wget http://www.baidu.com。命令会直接在当前目录下载一个index.html的文件

2、将下载的文件存放到指定的文件夹下,同时重命名下载的文件,利用-O:wget -O /home/index http://www.baidu.com

3、下载多个文件:首先,创建一个file.txt文件,写入两个url(换行),如http://
www.baidu.com;然后,wget -i file.txt;命令执行后会下载两个两个文件。

4、下载时,不显示详细信息,即在后台下载:wget -b http://www.baidu.com。命令执行后
会,下载的详细信息不会显示在终端,会在当前目录下生成一个web-log记录下载的详细信息。

5、下载时,不显示详细信息,同时将下载信息保存到执行的文件中(同4):wget -o dw.txt http://www.baidu.com

6、断点续传:wget -c http://www.baidu.com

7、限制下载的的速度:wget --limit-rate=100k -O zfj.html http://www.baidu.com

8、测试是否能正常访问:wget --spider http://www.baidu.com

9、设置下载重试的次数:wget --tries=3 http://www.baidu.com

10、下载一个完整的网站,即当前页面所依赖的所有文件:wget --mirror -p
--convert-links -P./test http://localhost

  --mirror:打开镜像选项

  -p:下载所有用于显示给定网址所必须的文件

  --convert-links:下载以后,转换链接用于本地显示

  -P LOCAL_DIR:保存所有的文件或目录到指定的目录下

11、下载的过程中拒绝下载指定类型的文件:wget --reject=png --mirror -p
--convert-links -P./test http://localhost

12、多文件下载中拒绝下载超过设置大小的文件:wget -Q5m -i file.txt

  注意:此选项只能在下载多个文件时有用,当你下载一个文件时没用。

13、从指定网站中下载所有指定类型的文件:wget -r -A .png http://www.baidu.com

14、wget下载时,某些资源必须使用--no-check-certificate http://www.baidu.com

15、使用wget实现FTP下载:wget --file-user=USERNAME --file-password=PASSWORD url

16、伪装代理名称下载
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。
wget –user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接

linux向文件末尾追加内容

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。

比如

1
2
echo "It is a test"
It is a test

它也可以通过与>符号配合将内容写入文件

1
2
3
4
5
6
7
在尾部插入: 
echo "abcdefg" >> filename

echo 'add content'>>/home/data/test.sh
>> 是追加 是在文件后追加内容
echo 'add content'>/home/data/test.sh
> 是删除原有内容后,并写入自己当前的内容

也可以通过-e符号来插入转义字符,比如

1
2
echo -e "hello\nworld" >> temp.txt
cat temp.txt

输出
hello
world

&>/dev/null表示的意思

这是把 stdout 送到 /dev/null 里面
那什麼是 /dev/null 呢,/dev/null 是 Unix/Linux 里的【无底洞】
任何的 output 送去了【无底洞】就再也没了。

command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file中,command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道.

而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.

从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法.

1
2
3
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

2>&1 :接着,标准错误输出重定向 到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

>/dev/null 2>&1 详解

命令的结果可以通过%>的形式来定义输出

分解这个组合:“>/dev/null 2>&1” 为五部分。

1
2
3
4
5
1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示 等同于 的意思,2>&1,表示2的输出重定向 等同于 1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”

windows编写sh脚本在linux上不能执行

编码没有被识别,

1
2
3
4
5
6
7
8
9
10
vi *.sh

查看文件格式(显示 fileformat=dos)
Esc 输入 :set fileformat

修改文件格式(修改后 显示 fileformat=unix)
Esc输入 :set fileformat=unix

保存
Esc输入 :wq

“源代码包”和“二进制包”的区别

RPM 有分兩種:binary rpm 跟 source rpm 。
前者是編好的 binary ,安裝就可用。
後者是還沒編好的 source ,需 rebuild 之後才能安裝。

rpm格式很好区分,二进制格式的包名字很长,都带有版本号、适应平台、适应的硬件类型等,而源码格式仅仅就是一个版本号的tar包。
mysql-5.0.45.tar.gz 是源码包
mysql-5.0.45-linux-x86_64-glibc23.tar.gz 是二进制包

源代码包里的文件往往会含有种种源代码文件,头文件.h、c代码源文件.c、C++代码源文件.cc/.cpp等;而二进制包里的文件则会有可执行文件(与软件同名的往往是主执行文件),标志是其所在路径含有名为bin的目录(仅有少数例外)

查看linux中所有用户的三种方式

通过使用/etc/passwd 文件,getent命令,compgen命令这三种方法查看系统中用户的信息。

linux下查看所有用户及所有用户组

CentOS出现ifconfig: command not found解决途径

出现此问题的原因绝大多数情况下可能都是系统没有附带ipconfig,例如你安装的是CentOS最小安装包模式。

因此这个时候只需要我们使用命令安装ipconfig即可,命令如下:

1
2
yum install upgrade
yum install net-tools

如果本身已经安装了ipconfig但依然报错那就需要看看环境变量的设置:

1
#echo $PATH

如果环境变量中没有包含ipconfig命令的路径则需要临时修改环境变量:

1
$export PATH = $PATH:/sbin

修改完成后测试ipconfig是否可以正常使用,如果可以正常使用则需要永久修改:打开/etc/profile

然后在该文件中填写export PATH=$PATH:/sbin并保存,保存后重启系统即可直接使用ipconfig命令了。

替换指定的目录及其子目录下所有文件中的某些内容 ( n 种方法 )

1.find | xargs

find -type f -name “*.sh” | xargs sed ‘s#oldboy#oldgril#g’ -i

2. $()或“

1
2
sed 's#oldboy#oldgril#g' `find -type f -name "*.sh"`
sed 's#oldboy#oldgril#g' $(find -type f -name "*.sh")

3.-exec

find -type f -name “*.sh” -exec sed ‘s#oldboy#oldgirl#g’ {} \;

4.grep

sed -i “s/zhangsan/lisi/g” grep zhangsan -rl /modules

alias

alias 自定义命令名=‘命令’

ack

ack 使用手册

grep

-r 表示搜索子目录
-l 表示输出匹配的文件名

sed

sed 分为 命令、元字符集、替换标记

-i 表示inplace edit,就地修改文件

定界符可以任意

Ubuntu 安装 Node

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
方法一:源码安装法:

// 回主目录
cd
// 官网下载一个符合自己项目的 Node 最新版本
wget https://nodejs.org/dist/latest-v8.x/node-v8.14.1-linux-x64.tar.gz
// 解压
tar xvzf node-v8.14.1-linux-x64.tar.gz
// 更名
mv node-v8.14.1-linux-x64 node8
// 编辑
sudo vim /etc/profile
// 内容
export NODE_HOME=/home/ubuntu/node8
PATH=$NODE_HOME/bin:$PATH
// 立即生效
source /etc/profile
// 查看版本

让npm和node命令全局生效

  方式一:环境变量方式(这种方式似乎只对登录用户有效?)

  1)、加入环境变量,在 /etc/profile 文件末尾增加配置

vi /ect/profile
export PATH=$PATH:/usr/local/nodejs/bin
  2)、执行命令使配置文件生效

source /etc/profile
  方式二:软链接方式(推荐)

ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

查看nodejs是否安装成功

node -v
npm -v


安装方法二 rpm法:
第一步,去 nodejs 官网 https://nodejs.org 看最新的版本号;

第二步,添加源后安装
重点来了,nodejs 的每个大版本号都有相对应的源,比如这里的 10.x.x版本的源是https://deb.nodesource.com/setup_10.x。

所以在终端执行:

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -

稍等片刻,源已经添加完毕,再执行:

sudo apt-get install -y nodejs

等待安装完成。

顺带一提,如果你要安装12.x.x 的版本,只需要修改添加源地址中的数字即可,比如:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

最后验证一下,执行:nodejs -v 即可出现刚才安装的版本号。

CentOS7查看和关闭防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CentOS 7.0默认使用的是firewall作为防火墙
查看防火墙状态
firewall-cmd --state

停止firewall
systemctl stop firewalld.service

禁止firewall开机启动
systemctl disable firewalld.service

关闭selinux
进入到/etc/selinux/config文件
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled

linux下安装使用dig命令

mark

参考链接

Mercurial

版本控制系统
集中式版本控制系统:Subversion(SVN)、CVS、VSS 等。

分布式版本控制系统:Git、Mercurial(Hg) 等。

目前,应用较广泛的版本控制系统有 Git 和 SVN,二者分别代表着分布式和集中式版本控制系统的鲜明特点,这两类系统组织形式会在今后很长一段时间内共存。

相比之下,Mercurial 略显小众。这款由 Python 编写的分布式版本控制系统,具备出色的跨平台能力(基于 Python)和平滑的学习曲线,一度被视为 Git 的有力竞争者。随着 Git 的日益完善,包括 TortoiseGit 等开源项目的出现加强了 Git 在 Windows 平台上的支持,以及 GitHub 的出现简化了 Git 开发模型进而降低了学习难度,Mercurial 已渐渐被人遗忘。

由于 OpenJDK 托管在 Mercurial 平台上,稍微接触了一下 Mercurial。个人认为,目前与 Mercurial 打交道的场合可能仅限于远程仓库的克隆和更新,掌握一些基本操作足矣。

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pip install mercurial  # 通过 pip 安装 Mercurial

hg --version # 查看 Mercurial 版本

hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8 # 克隆远程仓库

hg log # 查看仓库历史

hg pull # 拉取代码

hg status # 查看仓库状态

或者

https://www.mercurial-scm.org/downloads

下载对应安装包/二进制包

CVS,GIT,Mercurial和SVN比较

mark

参考链接

超简单的Linux下运行jar包的方法

优化方法一:
java -jar xxx.jar &
& 表示后台运行,ssh窗口不被锁定,但是关闭窗口时,程序还是会退出

优化方法二:
nohup java -jar xxx.jar &
nohup 表示不挂断运行命令行,当账号退出或关闭终端时,程序仍然运行

当用 nohup 命令执行作业时,该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

优化方法三:
nohup java -jar xxx.jar >/usr/local/temp.txt &

/usr/local/temp.txt 表示将所有启动的日志信息记录到temp.txt文件中

Linux screen

介绍
screen 或 GNU screen 是终端多路复用器。换句话说,这意味着您可以启动 screen 会话,然后在该会话中打开任意数量的窗口(虚拟终端)。即使断开连接,当其窗口不可见时,在 screen 上运行的进程将继续运行。

安装 Linux screen
现在大多数 Linux 发行版上已经预装了 screen 包。您可以通过键入以下内容来检查系统上是否安装了它:
linuxidc@linuxidc:~/www.linuxidc.com$ screen –version
Screen version 4.06.02 (GNU) 23-Oct-17
如果您的系统上没有安装 screen ,则可以使用发行版的软件包管理器轻松安装。

在 Ubuntu 和 Debian 上安装 screen
linuxidc@linuxidc:~/www.linuxidc.com$ sudo apt install screen

在 CentOS 和 Fedora 上安装 screen
linuxidc@linuxidc:~/www.linuxidc.com$ sudo yum install screen

启动 Linux screen
要启动 screen 会话,只需在控制台键入 screen :
screen
这将打开一个 screen 会话,创建一个新窗口并在该窗口中启动一个 shell。

现在您已经打开了一个 screen 会话,您可以通过输入以下命令获取命令列表:
Ctrl+a ?

命名会话

运行多个 screen 会话时,命名会话非常有用。要创建命名会话,请使用以下参数运行 screen 命令:
screen -S session_name
选择描述性有意义的会话名称总是一个好主意。

使用 Linux Screen 窗口
默认情况下,当您启动新的 screen 会话时,它会创建一个包含 shell 的单个窗口。
您可以在 screen 会话中拥有多个窗口。
要创建一个有 shell 的新窗口请键入 Ctrl+a c ,将为其分配范围 0…9 中的第一个可用编号。
以下是一些用于管理 Linux Screen 窗口 的

最常用命令:

Ctrl+a c 创建一个新窗口(带shell)
Ctrl+a “ 列出所有窗口
Ctrl+a 0 切换到窗口 0(按编号)
Ctrl+a A 重命名当前窗口
Ctrl+a S 将当前区域水平分割为两个区域
Ctrl+a | 将当前区域垂直分成两个区域
Ctrl+a tab 将输入焦点切换到下一个区域
Ctrl+a Ctrl+a 在当前和之前的区域之间切换
Ctrl+a Q 关闭除当前区域之外其他所有区域
Ctrl+a X 关闭当前区域
从 Linux screen 会话中分离出来

您可以通过键入以下内容随时从 screen 会话中分离:
Ctrl+a d
从会话中分离后,在 screen 会话中运行的程序将继续运行。

重新连接到 Linux screen

要恢复 screen 会话,请使用以下命令:

screen -r

如果您的计算机上运行了多个 screen 会话,则需要在 r 后附加 screen 会话 ID 。
要查找 screen 会话 ID,可以使用如下命令列出当前运行的列表:

1
2
3
4
5
6
linuxidc@linuxidc:~/www.linuxidc.com$ screen -ls
There are screens on:

15174.session_name (08/13/2019 09:19:34 PM) (Attached)
12475.pts-0.linuxidc (08/13/2019 09:16:31 PM) (Attached)
12230.pts-0.linuxidc (08/13/2019 09:15:42 PM) (Detached)

Sockets in /run/screen/S-linuxidc.

如果要还原 12475.pts-0 ,请键入以下命令:

1
2
3
4
5
6
linuxidc@linuxidc:~/www.linuxidc.com$ screen -r 12475
There is a screen on:

12475.pts-0.linuxidc (08/13/2019 09:16:32 PM) (Attached)

There is no screen to be resumed matching 12475.

自定义 Linux screen
如果 /etc/screenrc 和 ~/.screenrc 文件存在,当 screen 启动时从中读取它的配置参数。我们可以通过 .screenrc 文件根据我们自己的偏好修改默认 screen 设置。
以下是一个示例 ~/.screenrc配置, 有自定义状态行和几个附加选项:
〜/.screenrc

ping 命令

bytes值:数据包大小,也就是字节。
time值:响应时间,这个时间越小,说明你连接这个地址速度越快。
TTL值:Time To Live,表示DNS记录在DNS服务器上存在的时间,它是IP协议包的一个值,告诉路由器该数据包何时需要被丢弃。可以通过Ping返回的TTL值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。

因此一般TTL值:
100~130ms之间,Windows系统 ;
240~255ms之间,UNIX/Linux系统。

mark

ping -r count 的使用

ping -n 1 -r 9 202.102.224.25 (发送一个数据包,最多记录9个路由)

批量Ping网段

for /L %D in (1,1,255) do ping 10.168.1.%D

代码中的这个(1,1,255)就是网段起与始,就是检测网段192.168.1.1到192.168.1.255之间的所有的ip地址,每次逐增1,直接到1到255这255个ip检测完为止。

cron 表达式

前言

我们经常使用 cron 表达式来定义定时任务的执行策略,今天我们就总结一下 cron 表达式的一些相关知识。

cron 表达式的定义

cron 表达式是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间单位。格式如下:

[秒] [分] [时] [日] [月] [周] [年]
通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成

cron 各部定义

关于 cron 的各个域的定义如下表格所示:
| 域 | 是否必填 | 值以及范围 | 通配符 |
|—-|———-|—————–|—————|
| 秒 | 是 | 0-59 | , - / |
| 分 | 是 | 0-59 | , -
/ |
| 时 | 是 | 0-23 | , - / |
| 日 | 是 | 1-31 | , -
? / L W |
| 月 | 是 | 1-12 或 JAN-DEC | , - / |
| 周 | 是 | 1-7 或 SUN-SAT | , -
? / L # |
| 年 | 否 | 1970-2099 | , - * / |

上面列表中值范围还是比较好理解的,但是比较令开发者难以理解的就是通配符,其实 cron 表达式的难点也在于通配符。我们在下一个章节进行说明

cron 中的通配符

, 这里指的是在两个以上的时间点中都执行,如果我们在 “分” 这个域中定义为 8,12,35 ,则表示分别在第 8 分,第 12 分 第 35 分执行该定时任务。

  • 这个比较好理解就是指定在某个域的连续范围,如果我们在 “时” 这个域中定义 1-6,则表示在 1 到 6 点之间每小时都触发一次,用 , 表示 1,2,3,4,5,6
  • 表示所有值,可解读为 “每”。如果在“日”这个域中设置 ,表示每一天都会触发。
    ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的 8 号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8
    ?
    / 在某个域上周期性触发,该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 5/10 表示从 第 5 秒开始 每 10 秒执行一次,而在 “分” 上则表示从 第 5 秒开始 每 10 分钟执行一次。
    L 表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”中设置”7L”这样的格式,则表示“本月最后一个周六”
    W 表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上设置”15W”,表示离每月 15 号最近的那个工作日触发。假如 15 号正好是周六,则找最近的周五(14 号)触发, 如果 15 号是周未,则找最近的下周一(16 号)触发.如果 15 号正好在工作日(周一至周五),则就在该天触发。如果是 “1W” 就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
    “#”表示每月的第几个周几,只能作用于 “周” 。例如 ”2#3” 表示在每月的第三个周二。

示例

下面给出一些示例,可根据上面的解释进行练习解读:

每隔 1 分钟执行一次:0 /1 ?
每天 23 点执行一次:0 0 23 ?
每月 1 号凌晨 1 点执行一次:0 0 1 1 ?
每月最后一天 23 点执行一次:0 0 23 L
?
每周星期天凌晨 1 点实行一次:0 0 1 ? L
在 26 分、29 分、33 分执行一次:0 26,29,33
?

总结

今天总结了 cron 表达式,希望对你日常开发有所帮助。其实我们还可以借助于一些可视化的工具来生成 cron 表达式,但是如果我们同样需要能够看得懂别人写的表达式。多多关注!更多干货尽在 felord.cn[1]。

Linux下有哪些特殊文件

普通文件

d 目录
l 符号链接
s 套接字
b 块设备
c 字符设备
p 管道

/dev/null

可无限接收数据,你可以认为是一个黑洞,因此如果我们需要丢弃某些终端输出,可以重定向到这里:

/dev/full

它在读取时会读取到连续的NUL(零值)字节流,而在写入的时候,会返回磁盘空间已满的结果。

/dev/zero

和/dev/null类似,向其中写入时会丢弃所有数据,但是读取时,会产生NUL(零值)字节流。

/dev/random

/dev/random可以提供随机数据流,它保证数据的随机性,但是读取时会造成等待。

/dev/urandom

从名字就可以看出来,是用来产生随机数据的。它的产生速度很快,但是数据的随机性不如/dev/random。

/dev/pts

/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。
举个例子,你打开一个终端,获取到当前的pts:

1
2
$ tty
/dev/pts/0

然后你又打开一个,输入:
$ echo "hahahaha">/dev/pts/0
你就会发现内容被打印到前面一个终端了。
通常我们运行一个程序,其printf的打印都会打印在当前终端。

小故事

mark

Linux编写Bash脚本的10个技巧

Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式。尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能。
本文中,我们将分享 10 个写出高效可靠的 bash 脚本的实用技巧,它们包括:

1、 脚本中多写注释

这是不仅可应用于 shell 脚本程序中,也可用在其他所有类型的编程中的一种推荐做法。在脚本中作注释能帮你或别人翻阅你的脚本时了解脚本的不同部分所做的工作。
对于刚入门的人来说,注释用 # 号来定义。
TecMint 是浏览各类 Linux 文章的最佳站点

2、 当运行失败时使脚本退出

有时即使某些命令运行失败,bash 可能继续去执行脚本,这样就影响到脚本的其余部分(会最终导致逻辑错误)。用下面的行的方式在遇到命令失败时来退出脚本执行:
mark

3、 当 Bash 用未声明变量时使脚本退出

Bash 也可能会使用能导致起逻辑错误的未声明的变量。因此用下面行的方式去通知 bash 当它尝试去用一个未声明变量时就退出脚本执行:
mark

4、 使用双引号来引用变量

当引用时(使用一个变量的值)用双引号有助于防止由于空格导致单词分割开和由于识别和扩展了通配符而导致的不必要匹配。
看看下面的例子:
mark
保存文件并退出,接着如下运行一下:
mark
$ ./names.sh
在脚本中用双引号

5、 在脚本中使用函数

除了非常小的脚本(只有几行代码),总是记得用函数来使代码模块化且使得脚本更可读和可重用。
写函数的语法如下所示:
mark
写成单行代码时,每个命令后要用终止符号:
check_root(){ command1; command2; }​

6、 字符串比较时用 = 而不是 ==

注意 == 是 = 的同义词,因此仅用个单 = 来做字符串比较,例如:
mark
Linux 中高效编写 Bash 脚本的 10 个技巧

7、 用 \$(command) 而不是老旧的 command 来做代换

命令代换 是用这个命令的输出结果取代命令本身。用 \$(command) 而不是引号 command 来做命令代换。
这种做法也是 shellcheck tool (可针对 shell 脚本显示警告和建议)所建议的。例如:
mark

8、 用 readonly 来声明静态变量

静态变量不会改变;它的值一旦在脚本中定义后不能被修改:
mark

9、 环境变量用大写字母命名,而自定义变量用小写

所有的 bash 环境变量用大写字母去命名,因此用小写字母来命名你的自定义变量以避免变量名冲突:
mark

10、 总是对长脚本进行调试

如果你在写有数千行代码的 bash 脚本,排错可能变成噩梦。为了在脚本执行前易于修正一些错误,要进行一些调试。后续会更新一篇指南来让大家掌握这些技巧:
如何在 Linux 中启用 Shell 脚本调试模式
如何在 Shell 脚本中执行语法检查调试模式
如何在 Shell 脚本中跟踪调试命令的执行​​​​

检查开放端口

使用 Nmap 命令检查开放端口

Nmap 是端口扫描的首选工具。除端口扫描外,Nmap 还可以检测 Mac 地址、操作系统类型、内核版本等。

从控制台发出以下命令确定哪些端口正在监听来自网络的 TCP 连接:

$ sudo nmap -sT -p- 10.10.8.8
-sT 选项告诉 Nmap 扫描 TCP 端口, -p- 扫描所有端口(65535 个)。如果不使用 -p-,Nmap 将仅扫描 1000 个端口。

$ sudo nmap -sU -p- 10.10.8.8
要扫描 UDP 端口,请使用 -sU 代替 -sT:

使用 Netcat 命令检查开放端口

使用 netcat 可以扫描单个端口或端口范围。

$ nc -z -v 10.10.8.8 20-80
-z 选项指示 nc 仅扫描打开的端口,而不发送任何数据,并且 -v 用于获取更多详细信息。

1
2
3
4
5
6
7
8
9
10
11

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!


$ nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

$ nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
要扫描 UDP 端口,请将 -u 选项传递给 nc 命令

使用 Bash 伪设备检查打开的端口

1
2
3
4
5
6
7
8
9
10
11
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fi


for PORT in {20..80}; do
timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"
done

优雅地修正命令

移动光标到命令开头

ctrl + a / home

移动光标到命令结尾

ctrl+e /end

向前移动一个词

alt+f

向后移动一个词

alt+b

清空整条命令

ctrl +u

删除命令的一个词

ctrl+w

将词转换为大写

esc + u

将词转换为小写

esc + l

the fuck 神器

账号密码暴力破解

使用nmap爆破

1
2
3
4
nmap -p 22 --script=ssh-brute --script-args 
userdb=用户字典
passdb=密码字典
目标机ip

使用hydra爆破

1
2
3
4
hydra -l root -P ssh_password.txt 目标机ip ssh  -v
其中-l 指定用户名,可以使用-L指定用户名字典文件;
-p指定密码,-P指定密码字典文件;
-v显示详细的执行过程。

简单比较一下:
1、hydra使用起来更灵活。在已知用户名的情况下,使用hydra会更方便一些。
2、两个工具都不止于爆破ssh密码,nmap还能扫描网络,hydra还能爆破表单等。

Swep 虚拟内存交换空间

Linux 添加 Swp 虚拟内存交换空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
一、新建磁盘分区作为swap分区
1.以root身份进入控制台(登录系统),输入
# swapoff -a #停止所有的swap分区
2. 用fdisk命令(例:# fdisk /dev/sdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。
3. # mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名
4. # swapon /dev/sdb2 #启动新的swap分区
5. 为了让系统启动时能自动启用这个交换分区,可以编辑/etc/fstab,加入下面一行
/dev/sdb2 swap swap defaults 0 0

二、用文件作为Swap分区
1.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
# dd if=/dev/zero of=/root/swapfile bs=1M count=4096
2.格式化为交换分区文件:
# mkswap /root/swapfile #建立swap的文件系统
3.启用交换分区文件:
# swapon /root/swapfile #启用swap文件
4.使系统开机时自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults 0 0

停止使用交换分区
通过使用 swapoff 命令停止使用交换分区,停止后可直接通过rm -f命令删除交换文件。
swapoff /home/swap

查找文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
find / -name filename.txt 根据名称查找/目录下的filename.txt文件。
find . -name "*.xml" 递归查找所有的xml文件

find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件

grep -H 'spring' *.xml 查找所以有的包含spring的xml文件

find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件

ls -l | grep '.jar' 查找当前目录中的所有jar文件

grep 'test' d* 显示所有以d开头的文件中包含test的行。

grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。

grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

查看文件

查看文件头10行
head -n 10 example.txt

查看文件尾10行
tail -n 10 example.txt

查看日志类型文件
tail -f exmaple.log 这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)。

查找应用/进程

查看端口占用情况
netstat -tln | grep 8080 查看端口8080的使用情况

查看端口属于哪个程序
lsof -i :8080

查看进程
ps aux|grep java 查看java进程
ps aux 查看所有进程

grep、egrep、fgrep

awk、gawk

mkfs、mkdir、mkfs

sed、seq

Linux下用ls和du命令查看文件以及文件夹大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ls -l |grep "^-"|wc -l或find ./company -type f | wc -l  查看某文件夹下文件的个数,包括子文件夹里的。

ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。

ls -lR|grep "^d"|wc -l

说明:ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。

du常用的选项:
  -h:以人类可读的方式显示
  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小 
 
du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
du -sk filename 查看指定文件大小

查看Linux服务器的硬盘使用情况

1
2
3
4
5
6
7
8
1)查看硬盘及分区信息,如下:
fdisk -l
2)检查文件系统的磁盘空间占用情况,如下
df -h
3)查看硬盘的I/O性能:如下
iostat -d -x - k 1 10
其中,iostat是含在套装sysstat中的,在centos下可以用命令 yum -y install sysstat来安装,通过如下命令查看iostat的返回结果,以我的生产环境下的MySql数据库为例说明:
iostat -d -x -k 1 5
喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道