征文:《我的Linux笔记、杂记-小白向》

哈喽哇,大家好,来了linux.do的这几天看到了一片欣欣向荣的景象,还是非常喜欢咱们论坛哒
这次浅浅地分享一下我从小白->实施的角色转变当中,偶尔记录下的一些Linux笔记
----------------------------------------这是分割线O(∩_∩)O------------------------------------

2>&1&

2>&1&  

  
shell脚本和程序一样 会有日志级别  
shell的输出看起来是一样的,实际上是区分了 正常输出和错误输出  
正常运行的时候输出    正常输出  stdout 标准输出  
报错的时候输出          报错输出  errout 错误输出! 
  
在shell的管道理论里面  
1 指的是 stdout  
2 指的是 errout  
  
  
2>&1&  
---------  
2 指的是 errout  
> 表示把 errout 重定向到某个地方  
&1   stdout 标准输出 ,这里 1在 > 后面必须这样写  
最后一个 & 表示程序后台运行






nohup Command [Arg...] [ &] 最后的" &":表示后台运行,不霸占交互命令行 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。 如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 nohup命令提交作业时,指定输出文件: nohup command > myout.file 2>&1 & 0 – stdin (standard input,标准输入) 1 – stdout (standard output,标准输出) 2 – stderr (standard error,标准错误输出) 2>&1解释: 将标准错误(2)重定向到标准输出(&1), 标准输出(&1)再被重定向输入到myout.file文件中。 如:./startup.sh 2>&1 | tee startup.log 表示将执行startup.sh脚本后到标准输出和标准错误输出内容写入到startup.log文件中。tee 默认是覆盖的方式写入文件中,加-a表示追加。 最终解释:表示命令执行后退出交互命令行也不挂起,通过最后一个 &,表示后台运行,不霸占交互命令行,同时将标准输出和标准错误输出合并到myout.file文件中。

  

作者:一辈子的码农  
链接:https://juejin.cn/post/6844903860272660494  
来源:稀土掘金  
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

unzip unrar tar 解压到指定目录的方法

unzip src -d targetdir
unrar x src targetdir
tar -xf src -C targetdir

war包

以 user.war 为例,部署在tomcat8_9090/webapps/
启动tomcat后会自动解压出 /user 目录
/user 目录下的 /WEB-INF/lib 目录通常是更新替换jar包的地方

mv -vf ./ …/

# 将当前目录的文件移动到上级目录
mv -vf ./ ../

     mv [选项]... [-T] 源文件 目标文件
     mv [选项]... 源文件... 目录
     mv [选项]... -t 目录 源文件...
         
-   `--backup[=CONTROL]` : 为每个已存在的目标文件创建备份
-   `-b` : 类似–backup 但不接受参数
-   `-f`, `--force` : **覆盖前不询问**
-   `-i`, `--interactive` : **覆盖前询问**
-   `-n`, `–nechoo-clobber` : 不覆盖已存在文件 如果您指定了-i、-f、-n 中的多个,仅最后一个生效。
-   `--strip-trailing-slashes` : 去掉每个源文件参数尾部的斜线
-   `-S`, `--suffix=SUFFIX` : 替换常用的备份文件后缀
-   `-t`, `--target-directory=DIRECTORY` : 将所有参数指定的源文件或目录 移动至 指定目录
-   `-T`,`--no-target-directory` : 将目标文件视作普通文件处理
-   `-u`, `--update` : 只在源文件文件比目标文件新,或目标文件不存在时才进行移动
-   `-v`, `--verbose` : 详细显示进行的步骤

批量移动指定后缀文件到指定目录


mv -v ./*.jar bak20220519_2/
移动当前目录下 .jar 后缀的所有文件到 bak20220519_2 目录1

虚拟机网络设置

虚拟机设置NAT模式,使用端口转发进行ssh连接
虚拟机端口 22  本机端口 22022
虚拟机 dhcp 自动获取ip 本机使用 localhost 或 127.0.0.1

linux比较两个配置文件的差异命令

cd /data/user/user/web/tomcat8_9090/conf

diff context.xml  zw_context.xml

vimdiff context.xml  zw_context.xml

添加sudo权限

visudo 
就是操作 /etc/sudoers 文件,但是是系统提供的功能,任何直接修改底层文件的操作都是不规范的
/ALL 文档中搜索ALL关键词,找到root用户,回车在下方添加普通用户
root    ALL=(ALL)       ALL
user    ALL=(ALL)       ALL

注:
chmod  
chown  
chgrp  
useradd  
gpasswd  
  
等这些命令实际上都是 操作 /etc/group /etc/passwd 这些文件
这些文件不到万不得已 系统炸了  
不要手动碰

清理Linux系统缓存

top  实时查看资源占用情况
free -h 按GB单位查看内存/缓存等使用情况

以xx项目主机为例:
1.停止tomcat
2.sudo -i 切换root权限
3.sync 该命令多执行几遍
4.echo 3 > /proc/sys/vm/drop_caches
5.启动tomcat

修改服务器时间

1.date -s "16:42:01" 修改系统时间
2.hwclock --show    查看硬件时间
3.hwclock --systohc 硬件时间与系统时间同步
4.hwclock --show

-的必要性

sudo -i
su - root
su - user

不带 - 是没切环境变量的切换用户
切之前是root用户和root的环境变量, 切成user后是user用户和root的环境变量

带了-后
切之前是root用户和root的环境变量, 切成user后是user用户和user的环境变量

服务器ssh跳转

#登录主机 192.168.0.10
ssh [email protected]
#输入user的密码即可跳转


文件传输
文件传输需要先上传到192.168.0.10:22,再用scp传输到42
拷贝回来 scp [email protected]:/home/user/apps/gcc-rpm.tar.gz ./
拷贝过去 scp ./tomcat8_9091.tar.gz [email protected]:/home/user/user/web

备份文件

把这些bak的移动出来,比如
cd /home/user/user/web/tomcat8_9090/webapps/user/WEB-INF/lib
mv -v  *bak* /home/user/user/web/bak_9090_lib

统计目录下文件个数

ls|wc -l

服务器之间传输文件

scp -P22022 
ssh -p22022
sftp -P22022

默认使用22端口的时候:
scp -r /home/user/user/dps-statistics/ [email protected]:/home/user/user/

不是22端口的时候需要指明端口:
scp -r -P 22022 /home/user/user/dps-statistics/ [email protected]:/home/user/user/

打包服务器文件且去除日志文件

cd /home/user/user/dataflow

tar --exclude-from=exclude.txt -zcvf dataflow-broker-3.5.0.tar.gz dataflow-broker-3.5.0


--exclude-from=exclude.txt
打包且压缩,并且排除 exclude.txt 里面的内容[如,排除s.log,写进去会自动排除]

cat exclude.txt 显示出该文件夹下的日志文件目录
obsidian://open?vault=ob_vault&file=assets%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220830210126.png

tar --exclude=user-datastash-broker-3.5.0/s.log -zcvf user-datastash-broker-3.5.0.tar.gz user-datastash-broker-3.5.0

排除单个文件

tar --exclude=user-dp-3.0.0/logs/* -zcvf user-dp-3.0.0.tar.gz user-dp-3.0.0
tar --exclude=aifgw-web-app/old_resorce --exclude=aifgw-web-app/logs -zcvf aifgw-web-app.tar.gz aifgw-web-app
tar --exclude=aifgw-backend-1.1.0/old_resorce -zcvf aifgw-backend-1.1.0.tar.gz aifgw-backend-1.1.0
tar --exclude=aifgw-web-ui/old_resorce -zcvf aifgw-web-ui.tar.gz aifgw-web-ui
排除单个文件夹

查看端口占用情况及目录

netstat -lnpt

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      23450/java 
可以看到该进程占用了8080端口
ll /proc/23450/
查看该进程的目录


端口转发

端口转发的几种方法

判断端口通不通的几种方法 telnet ssh wget nc

准备环境

启动一个web服务器,提供端口.

[wyq@localhost ~]$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...

# python3
python -m http.server 8081

1 使用telnet判断

telnet ip port

失败:

[wyq@localhost ~]$ telnet localhost 9000
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

成功:

[wyq@localhost ~]$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

2 使用ssh判断

ssh -v -p port username@ip

-v 调试模式(会打印日志).
-p 指定端口
username可以随意

失败: "Connection refused"表示端口不可用

[wyq@localhost ~]$ ssh -v -p 9000 wyq@localhost
OpenSSH_6.4, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/wyq/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 51: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 9000.
debug1: connect to address 127.0.0.1 port 9000: Connection refused
ssh: connect to host localhost port 9000: Connection refused

成功:“Connection established” 表示已经连上端口

[wyq@localhost ~]$ ssh -v -p 8080 wyq@localhost
OpenSSH_6.4, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/wyq/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 51: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 8080.
debug1: Connection established.
debug1: identity file /home/wyq/.ssh/id_rsa type 1
debug1: identity file /home/wyq/.ssh/id_rsa-cert type -1
debug1: identity file /home/wyq/.ssh/id_dsa type -1
debug1: identity file /home/wyq/.ssh/id_dsa-cert type -1
debug1: identity file /home/wyq/.ssh/id_ecdsa type -1
debug1: identity file /home/wyq/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.4
debug1: ssh_exchange_identification: <head>
debug1: ssh_exchange_identification: <title>Error response</title>
debug1: ssh_exchange_identification: </head>
debug1: ssh_exchange_identification: <body>
debug1: ssh_exchange_identification: <h1>Error response</h1>
debug1: ssh_exchange_identification: <p>Error code 400.
debug1: ssh_exchange_identification: <p>Message: Bad request syntax ('SSH-2.0-OpenSSH_6.4').
debug1: ssh_exchange_identification: <p>Error code explanation: 400 = Bad request syntax or unsupported method.
debug1: ssh_exchange_identification: </body>
ssh_exchange_identification: Connection closed by remote host

3 使用wget判断

wget ip:port

失败:

[wyq@localhost ~]$ wget localhost:9000
--2014-08-22 13:36:42--  http://localhost:9000/
正在解析主机 localhost (localhost)... 127.0.0.1
正在连接 localhost (localhost)|127.0.0.1|:9000... 失败:拒绝连接。

成功:

[wyq@localhost ~]$ wget localhost:8080
--2014-08-22 13:37:22--  http://localhost:8080/
正在解析主机 localhost (localhost)... 127.0.0.1
正在连接 localhost (localhost)|127.0.0.1|:8080... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2770 (2.7K) [text/html]
正在保存至: “index.html”
100%[======================================>] 2,770       --.-K/s 用时 0s      
2014-08-22 13:37:22 (105 MB/s) - 已保存 “index.html” [2770/2770])

提供端口服务,则使用了tcp协议,上面是以web服务器为例。如果服务器是更简单的tcp服务器,三个工具同样适用.

判断端口通不通的几种方法 - yongqing的个人页面 - 开源中国社区


判断端口的方法
1、netstat –an
2、telnet ip port
3、ssh -v -p 9000 wyq@localhost
Connection established 成功
Connection refused 失败
4、wget ip:port

4 使用nc判断 udp

yum install nc

nc -vuz 192.168.0.12 8360
ubuser@VM-0-17-ubuntu:~$ nc -vuz 192.168.0.12 8360
Connection to 192.168.0.12 8360 port [udp/*] succeeded!

Ncat: operation not permitted
可能是selinux 的问题,
或者 iptables OUTPUT DROP 【iptables -P OUTPUT ACCEPT,iptables -P INPUT ACCEPT,改一下再测能不能通】
也可能看到 Ncat connected to 就行了,表示通上述说法是错的

离线安装命令

yum install --downloadonly nc  --downloaddir=/root/nc
tar -zcvf nc.tar.gz nc
上传
tar -zxvf nc.tar.gz  
cd nc  
rpm -Uvh *.rpm --nodeps --force

crontab

raid磁盘阵列

1 raid的英文 中文 概念
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"数块独立磁盘构成具有冗余能力的阵列”之意。
磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

2 各类raid的优点缺点
Raid0、Raid1、Raid5及Raid10的区别

3 各类raid的容量计算
raid0
容量不变

raid1
容量变为1/2

raid5
容量变为N-1

raid10
容量变为1/2

4 raid 和 备份的关系?是不是等于备份?
尽管RAID将数据同时写到两个磁盘,但这不是备份。如果操作系统或者软件而不是硬件破坏了数据,损坏的数据将被发送到两个磁盘而且会同时破坏两个驱动。

然而,备份是数据的副本,存储在某个地方并且在空间和时间上同时与原数据分离。备份的数据不会被损坏(除非有备份损坏的数据)。简而言之,即使使用RAID,仍然需要使用高效的备份软件。

linux用户登录查看锁定 解锁

#用户锁定 #服务器拒绝了密码

#查看锁定  
pam_tally2 -u root  
#解锁  
pam_tally2 -u root -r  
  
  
#查看锁定  
pam_tally2 -u secadmin  
#解锁  
pam_tally2 -u secadmin -r

后台运行 前台运行

# 任务测试
$ sleep 60

# 需要先暂停
ctrl+z

# 查看任务
$ jobs

# 后台运行 backgroung
bg 1

# 前台运行 frontground
fg 1

rz sz命令

# 命令安装
yum install -y lrzsz

rz  上传
sz  下载

# crt会话选项X/Y/Zmodem 设置默认下载路径
sz xxx.txt

路径别名

在 Linux 服务器上,您可以使用符号链接(Symbolic Link)或者在配置文件中创建别名来将路径 /zhkcdata 设置为 /data 别名。
符号链接的方法如下:

ln -s /zhkcdata /data

上述命令将在当前目录下创建一个名为 /data 的符号链接,它指向 /zhkcdata 路径。现在,您可以通过 /data 这个别名来访问 /zhkcdata 目录。
如果您希望这个别名在系统重启后仍然生效,可以将上述命令添加到启动脚本中,如 /etc/rc.local,或者为特定用户添加到自定义的启动脚本中。
另一种方法是使用配置文件来设置别名。具体操作取决于您使用的 Linux 发行版和配置文件。
例如,在 Ubuntu 系统上,您可以编辑 /etc/bash.bashrc 或者 /etc/profile 文件,在文件末尾添加以下内容:

alias data="/zhkcdata"

保存文件并重新登录或重新加载配置文件,您就可以使用 data 别名来访问 /zhkcdata 目录。
请注意,符号链接创建的别名是透明的,可以在文件系统的任何位置使用。而配置文件中的别名只对特定的用户或者会话生效。
希望这对您有所帮助!如有任何进一步的问题,请随时提问。

环境变量

https://blog.51cto.com/zpf666/2334770

/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

//用户级别的环境变量,用户可以覆盖全局变量
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.

/etc/profile中设定的变量(全局)的可以作用于任何用户,
而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。

追踪路由traceroute

linux
# traceroute安装和使用测试端口联通

windows
tracert ip
tracert 192.168.0.12

从第一行开始,逐步向上层追踪显示

7 Likes

那我来当第一个回复的吧,辛苦了

1 Like

征文投稿时间好像已经过了。。。

2 Likes

始皇不是说四周吗 :clown_face: 不是很懂辣 反正分享一下

1 Like

写的挺好,但感觉放教程区比放征文更合适哈哈

1 Like

@neo 怎么没活动分组了,这个帖子挪哪?

3 Likes

哇,写这么多,感谢佬友对征文的大力支持啊!

目前投稿期已经过了,处于拉票期(事实上也快过掉了) :smiling_face_with_tear:

1 Like

没事儿 :clown_face: 纯纯分享一下

发小丑会被举报哦,少发小丑

3 Likes

啊啊啊 我就说咋回事 :sweat_smile:

佬写的很好

22 Likes

对于初学者蛮有用的~~

点点赞

6666

1 Like

你写的这些好多人都不知道, :+1:

学习

吾皇,太忙了,不然我高低也整一篇

写的很全,不错!

好多详细的命令

学习学习