Linux命令收集

疑问

  • 默认全局命令在此目录:? /usr/local/bin

磁盘空间

# 查看磁盘各分区大小、已用空间等信息
df -h
# 查看foo目录的大小
du -sh foo

安装tar,tar.gz

Linux系列:Linux中如何安装.rpm、.tar、.tar.gz和tar.bz2文件
下载,解压,编译文件命令:./configure,make后安装

curl -O https://nodejs.org/dist/v6.9.1/node-v6.9.1.tar.gz
tar -xzvf node-v6.9.1.tar.gz
cd node-v6.9.1
./configure
make
make install

ssh-keygen

创建及查看只要ssh-keygen,一般存放根目录/root/.ssh.
远程仓库首次git clone,需要配公钥

设置管理权限

Mongodb需要权限,使用了最简单的办法

sudo chmod 777 /data/db

端口占用查询

netstat -anp|grep 4000
netstat -nlp| grep 4000

文件本地与远程复制

scp 跨机远程拷贝

$ scp /opt/soft/demo.tar root@10.6.159.147:/opt/soft/scptest

# scp远程某一端口
$ scp -r -P49622 nexus-3.0.2-02-unix.tar.gz root@172.16.75.107:/app

进程

# 查看进程(不适用mac)
ps aux
ps aux | grep supervisord

# 关闭进程
kill -pid

mac查看进程及占用的端口

来源:使用 lsof 代替 Mac OS X 中的 netstat 查看占用端口的程序

# 查看当前所有监听的端口以及对应的Command和PID
$ sudo lsof -nP -iTCP -sTCP:LISTEN
$ sudo lsof -i -P | grep -i "listen"

# 查看指定端口对应的Command和PID
$ lsof -nP -iTCP:4000 -sTCP:LISTEN

# 输出占用该端口的 PID
$ lsof -nP -iTCP:4000 |grep LISTEN|awk '{print $2;}'

复制拷贝目录

将目录dir1复制到dir2目录下,复制结果目录被改名为dir2
cp -r dir1 dir2

ubuntu 下 vim中文乱码

打开vim的配置文件,位置在/etc/vim/vimrc
在其中加入
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc
保存退出
source /etc/vim/vimrc
此时vim就能正确显示中文了

设置软连接(ln -s)

功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录

 ln [参数][源文件或目录][目标文件或目录]
 sudo ln -s ./src/test ./dist/test

 删除使用`rm -rf 指定目录`

解压zip包

apt-get install unzip

跟踪文件变化

等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止

tail -f filename

更改时区tzselect

如更改为北京时区,使用tzselect,按照指示最后得到:

You can make this change permanent for yourself by appending the line
        TZ='Asia/Shanghai'; export TZ 
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

现在要做的事情就是按照提示,把  TZ='Asia/Shanghai'; export TZ   添加到.profile中(bash对应加到.bash_profile)

nslookup反向查找IP

用法

nslookup [IP地址/域名]

查看文件改变

tail -f #等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F #等同于--follow=name  --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

Mac环境变量

Mac配置环境变量的地方:

1./etc/profile (建议不修改这个文件 ): 全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
2./etc/bashrc (一般在这个文件中添加系统级环境变量): 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件。
3.~/.bash_profile (一般在这个文件中添加用户级环境变量):每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!

Mac系统的环境变量,加载顺序为:

/etc/profile,/etc/paths,~/.bash_profile,~/.bash_login,~/.profile,~/.bashrc

/etc/profile和/etc/paths是系统级别的,系统启动就会加载,后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上述规则,它是bash shell打开的时候载入的。

可参考链接[Mac环境变量设置(https://github.com/GcsSloop/MacDeveloper/blob/master/Skill/Path.md)

设置多个路径

“PATH=$PATH:路径1:路径2:...:路径n”,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所 有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径 仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。

  • 查看全局路径

    $ export 
  • 设置环境变量方式一,命令行输入:

    $ export GOPATH=$HOME/Documents/mywork/
    $ export PATH="/usr/local/bin:$PATH"
  • 或以上命令写入~/.bachrc

dd创建文件

  • 写入硬盘,创建1000M文件:test

    dd if=/dev/zero of=test bs=1M count=1000
  • 不写入硬盘,创建1000M文件:test

    # 因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的
    dd if=/dev/zero of=test bs=1M count=0 seek=100000

文件权限

# 查看文件、文件夹权限
$ ls -l fileName
$ ls -ld dirName

# 文件,文件夹权限说明
-rwxr-xr--
第1位:d目录,-文件,2-4位:文件拥有者权限,5-7:文件群组权限,8-10:其他人权限
r 表示可读取,w 表示可写入,x 表示可执行
r=4,w=2,x=1 

# 修改文件权限
$ chmod [-R] xyz 文件或目录 (R表示递归,子目录也使用相同的权限)
$ chomd 770 .bashrc
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

# 改变文件拥有者
$ chown [-R] 账号名称 文件或目录

* 将install.log的拥有者改为bin这个账号
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

Linux目录说明

# FHS针对目录树架构仅定义出三层目录底下应该放置什么数据
/ (root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运作过程有关。

# 根目录 (/) 的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、 函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽妳会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。

因此FHS标准建议:根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!那哪些目录不可与根目录分开呢?
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件

ssh密钥查看

# 查看密钥
$ cd ~/.ssh

# 创建密钥
$ ssh-keygen

端口占用查看

# 安装
$ sudo yum install lsof
# 查看8080端口是否被占用
$ lsof -i:8080

linux虚拟机重启

shutdown -r now 
或
reboot

linux监听文件更改

# 监听`file-name.txt`文件更改情况
$ tailf file-name.txt

chkconfig使用列表

  • chkconfig在没有参数运行时,显示用法。
  • 如果加上服务名,那么就检查这个服务是否在当前运行级启动,如果是,返回true,否则返回false
  • 如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么
  • on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。
  • 谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接 chkconfig --list #列出所有的系统服务 chkconfig --add httpd #增加httpd服务 chkconfig --del httpd #删除httpd服务 chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态 chkconfig --list #列出系统所有的服务启动情况 chkconfig --list mysqld #列出mysqld服务设置情况 chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭 chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

linux开机自启动

由chkconfig可以理解只是做了一层包装,优化了添加软链的方法。

  • /etc/init.d目录是用来存放服务脚本,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别
  • /etc/init.d里的shell脚本能够响应start,stop,restart,reload命令来管理某个具体的应用。比如经常看到的命令: /etc/init.d/networking start 这些脚本也可被其他trigger直接激活执行,这些trigger被软连接在/etc/rcN.d/中 以nexus安装仓库自启动为例: ``` # 建立链接 $ sudo ln -s /app/nexus/bin/nexus /etc/init.d/nexus

增加服务,设置开机执行等级

$ sudo chkconfig --add nexus
$ sudo chkconfig --levels 345 nexus on

开始执行

$ sudo service nexus start

结束执行

$ sudo service nexus stop

重新开始

$ sudo service nexus restart

#### Linux开机启动其他办法
[Linux中设置服务自启动的三种方式](http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html)
开机启动一共有0-6,七个级别,系统运行只对3,4,5有效

* ln -s 软链
将`/etc/init.d`下的脚本与`/etc/rc.d/rc*.d`建立软链即可.K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行
![](http://owox3r59r.bkt.clouddn.com/18151333-85c421f973864253b1e32f892fe8ec6f.d79dbff81d20fa7f5ed3bd5ce1d609a5.png)

[root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

* chkconfig
如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off;
在默认情况下,chkconfig会自启动2345这四个级别,如果想自定义可以加上--level选项;
![](http://owox3r59r.bkt.clouddn.com/18152738-449524068e104327bc9e3e61d1049bdb.5af6ee92012d51aff8418cb1de67cd14.png)
![](http://owox3r59r.bkt.clouddn.com/18153144-0a443c680bad4964925caa140ce131e1.e2365f5d638172c540de6a6094253748.png)

* ntsysv 伪图形
略

Tips:如果想手动启动某服务,传统的方式是 /etc/init.d 服务名 start
实际上还可以这样,service 服务名 start

![](http://owox3r59r.bkt.clouddn.com/18155018-03a4fcd414b543c2b06de3209d0866a2.043bd545d652472e8a4e12b846cf3012.png)

#### Linux查看系统内核

具体信息

$ lsb_release -a

核心信息

$ uname -a

#### Linux命令行查看公网ip

[How To Find My Public IP Address From Command Line On a Linux](https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/)

// 方法1: dig command
$ myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "My WAN/Public IP address: ${myip}"

// 方法2: 使用第三方服务
curl ifconfig.me
curl icanhazip.com
curl ipecho.net/plain
curl ifconfig.co

#### Linux清空目录

清空目标目录下的所有文件及文件夹,如target目录
rm -fr /target/*

#### 查找某个目录
如某个目录名字不确定,可以用*号替代补全

find ~ -type d -name "99966" -print

#### 开关机
重启:

1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)

关机:

1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机

#### centos7开放远程端口

centos7需要使用`firewalld`添加远程端口

查看firewall是否运行

firewall-cmd --state

查看当前开了哪些端口

firewall-cmd --list-services

查看还有哪些服务可以打开

firewall-cmd --get-services

添加一个服务到firewalld

开启mysql3306

$ firewall-cmd --add-service=mysql --permanent

开启80端口

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

注意permanent为永久生效,如不设置,在此启动仍恢复之前状态

更新防火墙规则:

$ firewall-cmd --reload

如果要添加的端口并没有服务对应

参考链接https://www.jianshu.com/p/8e2f600c8cdb,创建一个xml文件,再使用上边的命令添加

#### 查看硬盘空间

使用空间查看:

查看所有磁盘

$ df -h

查看foo目录大小

$ du -sh foo

#### 解决ssh登录后闲置时间过长而断开连接

方法一:

修改/etc/profile配置文件

vi /etc/profile

增加:TMOUT=1800
这样30分钟没操作就自动LOGOUT

参考自:http://blog.sciencenet.cn/blog-624327-647656.html
@2017-06-16 23:09