Linux-Note

Table of Contents

查看用户

  • cnblogs
  • cat /etc/passwd | cut -f 1 -d :

注:| 是管道,把cat的输出传给cut处理;后面的cut取出每一行的以:分割的第一栏

/etc/passwd 文件存放的是用户信息.由六个分号组成的7个信息,分别是:

  • 用户名 (magesh): 已创建用户的用户名,字符长度 1 个到 12 个字符。
  • 密码(x):代表加密密码保存在 `/etc/shadow 文件中。
  • 用户 ID(506):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
  • 群组 ID (507):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group文件中。
  • 用户信息(2g Admin - Magesh M):代表描述字段,可以用来描述用户的信息(LCTT 译注:此处原文疑有误)。
  • 家目录(/home/mageshm):代表用户的家目录。
  • Shell(/bin/bash):代表用户使用的 shell 类型。
//查看用户
cat /etc/passwd
or
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
or
cat /etc/passwd | cut -f 1 -d :

//查看用户组
cat /etc/group

//查看当前活跃的用户列表
w

nmap

##自行设置端口范围进行扫描
nmap -p22,80,7771 192.168.34.90
nmap -p1-9999 192.168.34.90

Linux 关闭/开启密码登录(仅证书登录)

 vim /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#默认PasswordAuthentication 为yes,即允许密码登录,改为no后,禁止密码登录
PasswordAuthentication no

重启服务 service sshd restart

ssh生成公私钥:

  • ssh-keygen -t [rsa|dsa]
  • 根据提示起名(例子:ykyk),不输密码
  • 生成2个文件:ykyk 和 ykyk.pub
  • 将公钥考到对方机器的用户目录下 ,并将其复制到~/.ssh/authorized_keys中(操作命令:cat ykyk.pub >> ~/.ssh/authorized_keys )
  • 设置.ssh/ 目录的权限为==700==;
  • 设置authorized_keys权限为600;($ chmod 600 authorized_keys)

说明:

  1. 生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到authorized_keys
  2. 某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了

解决 ssh 连接服务器,长时间不使用,会自动断开的问题

【客户端主动保持连接】

  • 修改系统 ssh 端配置文件:
sudo vi /etc/ssh/ssh_config

ServerAliveInterval 30 //每隔 30 秒向服务器发送一个空数据包

linux bashrc 里 alias 加参数如何做?

alias ttt='test() { echo $1;}; test'

然后终端输入:ttt 33,就会输出 33

eg:
alias lg='log() { git lg -$1; echo -e "\n";}; log'

合并视频

ffmpeg -f concat -i mylist.txt -c copy output.mp4

mylist.txt 为 ffmpeg 合并视频的配置文件,文件格式如下:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

vi

vi filename

:sp filename1 //上下分屏; //ctrl+w+j; ctrl+w+k
:vsp filename1 //左右分屏;//ctrl+w+h; ctrl+w+l

:sp .   //选择当前路径下文件,并以上下分屏打开

less

浏览多个文件

方式一,传递多个参数给 less,就能浏览多个文件。

less file1 file2

方式二,正在浏览一个文件时,使用 :e 打开另一个文件。

less file1

:e file2

当打开多个文件时,使用如下命令在多个文件之间切换

:n - 浏览下一个文件

:p - 浏览前一个文件

ss-server

解决 ssh 连接超时时间(ssh timeout)的设置方法

设置 ssh 超时时间 *

修改自己用户目录下的.bashrc 文件,加上

export TMOUT=1000000 (以秒为单位)

然后运行:

source ~/.bashrc

在/etc/ssh/sshd_config 中加入:

ClientAliveInterval=60

每一分钟,sshd 都和 ssh client 打个招呼,检测它是否存在,不存时即断开连接。

ssh

ssh -p 端口 用户@ip 地址

chmod,chown,chgrp

chown *

chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录

示例 1:
[root@localhost home]# touch testfile //由 root 用户创建文件
[root@localhost home]# ls testfile –l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile //文件的拥有者及拥有者级均为 root
[root@localhost home]# chown yangzongde testfile //修改文件拥有者为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组仍为 root
示例 2:
chown bin install.log
ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
chown root:root install.log
ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

chgrp *

chgrp [-R] 用户组名称 dirname/filename ...

示例 3
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组为 root
[root@localhost home]# chgrp yangzongde testfile //修改拥有者组为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde yangzongde 0 Jun 7 19:35 testfile
[root@localhost home]# chown root:root testfile // 使用 chown 一次性修改拥有者及组
[root@localhost home]# ls testfile -l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile
示例 4
[root@linux ~]# chgrp users install.log
[root@linux ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
示例 5
更改为一个 /etc/group 里不存在的用户组
[root@linux ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~

文件分割/合并

例子 *

源文件:TW-REL-4.0.8.3.zip

//分割
split -b 11m TW-REL-4.0.8.3.zip tw_4083_

//合并
cat tw_4083_* > tw_4083_all.zip

tcpdump

sudo tcpdump -i ens192 host 192.168.3.130

less 乱码

export LESSCHARSET=utf-8
export LESS=Mrf

修改主机名


hostname yk #临时生效

hostnamectl set-hostname yk #永久生效

vi /etc/hostname #永久生效

建用户并赋予 sudo 权限

adduser yk
passwd yk(q123456)
whereis sudoers
ll /etc/sudoers
chmod +w /etc/sudoers
vi /etc/sudoers
- 在 root ALL=(ALL) ALL 下面增加
- yk ALL=(ALL) NOPASSWD: ALL
chmod -w /etc/sudoers
su yk

# 完全删除用户
userdel -r yk

# 查看是否删除干净
find / -name "*yk*"


禁用 ping

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

`端口的开启和关闭也就是软件服务的启动和关闭`

netstat

查看当前服务器的端口监听状态
netstat -tunl

查看已经联机的连接状态
netstat -tun

查看端口对应什么服务
netstat -antlp

`mac osx 终端批量删除文件`

  • `find ./ -name "*.html" -exec rm -rf {} \; 注意 {}和\;之间有空格`
  • find [目录名] -name "文件名" -exec rm -rf {} \;
搜索删除文件
例如:find / -name *.raw -exec rm -rf {} \; 其中, -exec 表示后面执行命令 "{}" 表示查询到的文件名 -rf 为删除命令 rm 的参数,r 表示递归删除, f 表示不需要确认,两个参数可根据需要去留

`清除历史`

$ history -c && exit

`查找并杀死 tomcat`

ps -aux | grep 进程名: 进程pid一直变化

  • 欲通过命令ps -aux | grep 进程名 返回某进程的进程号,再通过kill杀掉改进程,在这个过程中,如果grep不能匹配到正确的进程号,则grep本身会产生一条(并不是对应进程的进程号),并且这条信息的pid一直在变化。
  • 剔除掉grep本身产生的一条输出,在命令后面加上`-v grep`
  • 例子:ps -aux | grep app | grep -v grep

> sudo kill -9 `ps -ef|grep tomcat | grep -v grep | awk '{print $2}'`

`ls 命令`

ls -lt # 按时间排序(默认倒序)
ls -lt | tac # 按时间升序排序
ls -lSh #按大小排序(默认倒序)

ls -lh  #按 M 显示文件大小

ls | wc -w  #查看文件数量

ls -F | grep "/$"   #只显示目录

ls -al | grep "^d"  #只显示目录

ls -al | grep "^-"  #只显示文件

ls -l | grep "^-" | wc -l #查看文件个数

ls -l | grep "^d" | wc -l #查看目录个数

ls -Rl | grep "^-" | wc -l # 递归查看目录里面所有文件文件个数

`du 命令`

#按文件大小排序并拿出最大的 20 个
du -h ./* | sort -hr | head -20

#查看每个文件夹的大小
du   -sh    /*

#只显示 1 层目录
du -d 1 -h

#只显示 2 层目录
du -d 2 -h

查看硬盘使用情况

`df -h `

查看内存

`free -h`

vim

esc :%s/1/2/g                     // 把全文的 1 替换成 2 /末尾加 g 是全局替换,不加 g 只替换每行第一个

esc / 加想搜索的内容     n 下一个 N 上一个

esc D                 //删除当前行光标后

esc dd                 //删除当前行

esc dd                 //删除当前行

mac 版 SourceTree 跳过注册登录

  • 打开终端执行如下命令:

`defaults write com.torusknot.SourceTreeNotMAS completedWelcomeWizardVersion 3`

idea–IntelliJ IDEA 隐藏不想看到的文件或文件夹

<p>打开 IntelliJ IDEA,File -> Settings -> Editor -> File Types

![](/blog/content/images/2020/01/Screen-Shot-2020-01-02-at-16-58-39.png)

IDEA fileType

IDEA 去掉注释中的错误

![](/blog/content/images/2020/07/ideaDoc.png)

Microsoft Remote Desktop for Mac

Linux 下十大命令行下载工具

java stream sorted

1、sorted() 默认使用自然序排序, 其中的元素必须实现 Comparable 接口
2、sorted(Comparator<? super T> comparator) :我们可以使用 lambada 来创建一个 Comparator 实例。可以按照升序或着降序来排序元素。
下面代码以自然序排序一个 list

list.stream().sorted()

自然序逆序元素,使用 Comparator 提供的 reverseOrder() 方法

list.stream().sorted(Comparator.reverseOrder())


使用 Comparator 来排序一个 list

list.stream().sorted(Comparator.comparing(Student::getAge))

把上面的元素逆序

list.stream().sorted(Comparator.comparing(Student::getAge).reversed())

Mac 网卡命令行

item2

mac 网关和路由

临时添加

> sudo route -n add -net 192.168.1.0 -netmask 255.255.255.0 192.168.0.170

查看

> netstat -nr | grep 170

杀掉查询出来的进程

> ps -ef|grep mongo | grep -v grep | awk '{print $2}' | xargs kill -4

shopt

  • shopt 命令用于显示和设置 shell 中的行为选项,通过这些选项以增强 shell 易用性。
  • shopt 命令若不带任何参数选项,则可以显示所有可以设置的 shell 操作选项。

开启与关闭

  • 开启 shopt 命令:shopt -s extglob
  • 关闭 shopt 命令:shopt -u extglob

开启之后,以下 5 个模式匹配操作符将被识别:

?(pattern-list) - 所给模式匹配 0 次或 1 次;
*(pattern-list) - 所给模式匹配 0 次以上包括 0 次;
+(pattern-list) - 所给模式匹配 1 次以上包括 1 次;
@(pattern-list) - 所给模式仅仅匹配 1 次;
!(pattern-list) - 不匹配括号内的所给模式。

实例:

删除文件名不以 jpg 结尾的文件:

`rm -rf !(*jpg) `

删除文件名以 jpg 或 png 结尾的文件:

`rm -rf *@(jpg|png)`

pbcopy

#copy id_rsa.pub 文件的内容到剪贴板:
pbcopy < ~/.ssh/id_rsa.pub

#粘贴剪贴板的内容
pbpaste

arp -a

> 查看局域网中所有使用的 ip 和 mac 地址

配色

.bash_profile

export CLICOLOR=1
export LSCOLORS=gxfxcxdxbxegedabagacad
export PS1='\[\e[01;33m\][\[\e[01;32m\]\u\[\e[01;33m\]@\[\e[01;35m\]\h:\[\e[    01;33m\]] \[\e[01;36m\]\w \[\e[01;32m\]\$ '

.vimrc

set nu
colorscheme pablo
syntax on

软连接

  • `sudo ln -s "/Applications/subl.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl3`
  • `sudo ln -s "/Applications/vscode.app/Contents/Resources/app/bin/code" /usr/local/bin/vscode`

定时任务

crontab

![image](crontab.png)

spark 生态圈

![image](MongoDB_Shanghai_Spark_TJ-spark-lifecycle-1.png)

mac ox 终端显示 bogon 的问题

sudo hostname yourname

eg: sudo hostname Yangk

mac 恢复 launchpad 布局

`defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock`

加入开机启动脚本

1.chkconfig

设置为 chkconfig,可以编写脚本,查看设置开机自启动的命令 –add 表示添加程序自启动, --list 表示查看。

以后的程序如果需要使用 chkconfig 开机自启动,那么需要在启动程序中加入三行:

# chkconfig:2345 20 80

# description: Saves and restores system entropy pool for \

# higher quality random numbergeneration.

第一行中的 20,80 是启动级别,不能与其他程序一样,因此,需自定义设置。

2./etc/rc.d/rc.local

配置在/etc/rc.local 文件中。直接将软件服务的启动命令写在 rc.local 文件

注意:编辑完 rc.local 文件后,一定要给 rc.local 文件执行权限,否则开机时不会执行 rc.local 文件中脚本命令

chmod+x /etc/rc.d/rc.local

注意此处,是/etc/rc.d/rc.local,而不是/etc/rc.local,如果给/etc/rc.local 执行权限是无效的,因为/etc/rc.local 是软链接,真正的文件是/etc/rc.d/rc.local

> 另外,关于在 rc.local 文件中指定用户执行脚本命令,使用 su 命令即可,命令格式: > `su - username -c "your-cammand"` ,如:

touch /var/lock/subsys/local
JAVA_HOME=/usr/local/jdk1.8.0_171
export JAVA_HOME
sh /usr/local/apache-tomcat-7.0.88/bin//startup.sh

/bin/su - root -c /var/local/mhys-mcbd/mcbd_restart.sh

PS1

`export PS1='\[\[\033[01;36m\]\[\h\](\W\[\033[01;36m\])$\[\033[00m\] '`
 `export PS1="\[\e]0;\u@\h: \W\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "`

解决终端命令无效

 - `export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin`
`vi ~/.bash_profile`
- 把全部内容删除(将自己有用的部分备份,Terminal 修复后再加到里面),加入 PATH:
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
保存文件并退出(不要退出 Terminal)

source .bash_profile

curl

curl -H "Content-Type:application/json" -X POST -d 'json data' URL

curl -H "Content-Type:application/json" -X POST -d '{"user": "admin", "passwd":"12345678"}' http://127.0.0.1:8000/login

curl -H "Content-Type:application/json" -X POST -d '{"token": "greedisgood"}' http://127.0.0.1:3000/api/initialization

lsof

> list open file; > 通过 list open file 命令可以查看到当前打开文件,在 linux 中所有事物都是以文件形式存在,包括网络连接及硬件设备。

buff/cache

echo 1 > /proc/sys/vm/drop_caches:表示清除 pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 pagecache。
echo 3 > /proc/sys/vm/drop_caches:表示清除 pagecache 和 slab 分配器中的缓存对象。

ssh

`ssh s187 "cd /home ; ls"`

  • 双引号,必须有。如果不加双引号,第二个 ls 命令在本地执行
  • 分号,两个命令之间用分号隔开

cpu

`less /proc/cpuinfo`

rpm

rpm -qa|grep mongo #安装了 mongo 的哪些包
rpm -ql mongo #安装的 mongo 的路径

防火墙

> - https://blog.csdn.net/0210/article/details/60872966 > - https://www.cnblogs.com/adamas21/p/6241974.html

#查看开放的端口号
firewall-cmd --list-ports
#centos 查询端口是不是开放的
firewall-cmd --permanent --query-port=8080/tcp

#添加对外开放端口
firewall-cmd --permanent --add-port=8080/tcp

#删除对外开放端口
firewall-cmd --permanent --remove-port=8000/tcp

#添加 443 端口
firewall-cmd --zone=public --add-port=443/tcp --permanent

#重启防火墙
firewall-cmd --reload

扩展属性@

`xattr -c filename` #去除文件的扩展属性@
`xattr -c -r *` #去除文件夹下所有文件的扩展属性@

开关机

1. 立即关机是
sudo halt
或者
sudo shutdown -h now

2. 10 分钟后关机
sudo shutdown -h +10

3. 晚上 8 点关机
sudo shutdown -h 20:00

4. 立即重启
sudo reboot
或者
sudo shutdown -r now

安装nginx

sudo apt-get install nginx

配置 nginx 进行域名访问

  • nginx.conf

upstream testnginx{
  server localhost:8080;
  #server localhost:8081;
}
server {
    listen       80;
    server_name  www.testnginx.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
	proxy_pass http://testnginx;
	 #proxy_pass http://localhost:8080;
	#proxy_set_header Host $http_host;
	#proxy_set_header X-Real-IP $remote_addr;
	#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	#index  index.html index.htm;
    }

    #error_page  404              /404.html;

查询域名对应的 IP 地址`nslookup`

$ nslookup ec2-54-222-215-38.cn-north-1.compute.amazonaws.com.cn
Server:		192.168.0.1
Address:	192.168.0.1#53

Name:	ec2-54-222-215-38.cn-north-1.compute.amazonaws.com.cn
Address: 54.222.215.38

mysql

网卡

ntp server

ubuntu 版本

lsb_release -a

显示结果

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

防火墙(ufw)

ufw enable
ufw default deny
//运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。

ufw status
ufw enable
ufw disable
ufw app list
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443

sudo ufw delete allow 80

ufw 相关的文件和文件夹有:

/etc /ufw/:里面是一些 ufw 的环境设定文件,如 before.rules、after.rules、sysctl.conf、ufw.conf,及 for ip6 的 before6.rule 及 after6.rules。这些文件一般按照默认的设置进行就 ok。

  若开启 ufw 之 后,/etc/ufw/sysctl.conf 会覆盖默认的/etc/sysctl.conf 文件,若你原来的/etc/sysctl.conf 做了修 改,启动 ufw 后,若/etc/ufw/sysctl.conf 中有新赋值,则会覆盖/etc/sysctl.conf 的,否则还以/etc /sysctl.conf 为准。当然你可以通过修改/etc/default/ufw 中的“IPT_SYSCTL=”条目来设置使用哪个 sysctrl.conf.

  /var/lib/ufw/user.rules 这个文件中是我们设置的一些防火墙规则,打开大概就能看明白,有时我们可以直接修改这个文件,不用使用命令来设定。修改后记得 ufw reload 重启 ufw 使得新规则生效。

ubuntu 为用户 pdpadmin 赋予 sudo 权限,并且不用输入 root 密码

pdpadmin  ALL=(ALL:ALL) NOPASSWD: ALL
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

因为修改了/etc/sudoers 以及相关权限,导致 sudo 无法使用,恰好 Ubuntu 的 root 密码没有设置。

Ubuntu 修改时区和更新时间

ubuntu 版本查看命令

centerOS 查看系统信息

lsb_release -a

返回结果:

LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.5.1804 (Core)
Release:	7.5.1804
Codename:	Core

Date: 2022-05-27 Fri 15:27

Author: yangk

Created: 2023-01-03 Tue 12:43

hello-world