linux笔记

Linux笔记

快捷键

ctrl + a 命令行开头
ctrl + e 命令行结尾
ctrl + alt + F4/F5/F6 命令界面
输入命令:startx 切换图形界面

文件转化编码格式

iconv -f gb2312 -t utf8 mygb2312.txt -o myutf8.txt
这个例子中mygb2412.txt就是要转换的文件,myutf8.txt就是转换后的新文件。
lanti-1就是gb18030

加载共享盘

vmhgfs-fuse -o nonempty .host:/ /mnt/hgfs/

合并文件

find ./ -name "dt*" | xargs -n 1 -d "\n" -I {} -P 1 sh -c "cat {}/* >> res-out-city.txt"

ls | grep "mdn" | xargs -n 1 -d "\n" -I {} -P 1 sh -c "cat {}/* >> res-out-city.txt"

清空文件

vim file_name
:%d
cat /dev/null > file_name
echo "">file_name

时间同步

1.  安装ntpdate工具
# sudo apt-get install ntpdate
2.  设置系统时间与网络时间同步
# ntpdate cn.pool.ntp.org
3.  将系统时间写入硬件时间
# hwclock --systohc

安装软件

sudo apt-get install vim
卸载:
sudo apt-get remove vim

shell脚本多行注释

:'
echo 1
echo 2
'
或
:<<!
echo 1
echo 2
!

基本命令

awk
默认以空格为分隔符
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,...
$NF是number finally,表示最后一列的信息

搜索root关键字的所有行

awk  '/root/' /etc/passwd

统计文件名,每行的行号,每行的列数,对应的完整信息

awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
awk -F: '{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3f\n",FILENAME,NR,NF,$0)}' /etc/passwd

打印第二行的信息

awk -F: 'NR==2{print "filename: "FILENAME, $0}' /etc/passwd

指定分隔符,查询第一列

awk -F ":" '{print $1}' /etc/passwd

指定分隔符,查询最后一列,倒数第二列

awk -F ":" '{print $NF}' /etc/passwd
awk -F ":" '{print $NF-1}' /etc/passwd

获取12到31行的第一列信息

awk -F ":"  '{if(NR<31 && NR >12) print $1}' /etc/passwd

多分隔符

awk -F "[/:]" 'NR == 4 {print $0,"\n",$1}' /etc/passwd

单引号

使用一个双引号“”,然后在双引号里面加入两个单引号‘’,接着在两个单引号里面加入一个转义的单引号\',输出单引号。
cat 203.csv |awk -F ',' '{print "insert into bj_cfg_transhub_bts_minhang(f_station_id,f_cover_scene,f_eci) values(203,'\''机场'\'',"$3");"}' > 203.sql

统计文件夹下大于100k文件数量和总和

ls -l|awk '{if($5>100){count++; sum+=$5}} {print "Count:" count,"Sum: " sum}'  【因为awk会轮询统计,所以会显示整个过程】
ls -l|awk '{if($5>100){count++; sum+=$5}} END{print "Count:" count,"Sum: " sum}' 【添加END后只显示最后的结果】

传入参数

#!/bin/bash
  . /etc/profile

DATE=$1
date=$2
cat ../data/bhz.txt | awk -F '|' -vdate=$DATE '{print $1 "|"date"|101"}' >> ../data/bhz_result.txt

条件判断:
cat ../data/backup/suzhou_real_time.txt | awk -F '|' '{if($2=="510")print $3}' >> ../data/real_time/$date/suzhou_real_time_${current}.txt
cat 1_1.txt |awk -F '|' '{if($5 == -1 || $5 == 0 || ($5 > 0 && $ 6 > 0)) print $1 "|" $2 "|" $3 "|" $5 "|" $6 }' > 1_1_list.txt
bcp
bcp dbname..tablename out c:\temp\filename -Usa -Ppassword -Sservername -c -t,
其中 dbname为数据库名,tablename为表名,-U后为SYBASE登录名称,-P后为SYBASE登录口令,-S后为SYBASE服务名称(即你在dsedit中设置的Servername),-c代表使用可见文本方式导出数据,-t 导出的文件以','分割。

常用数据导入格式为(Import Txt file to remote table of db)
bcp dbname..tablename in c:\temp\filename -Usa -Ppassword -Sservername -c -t,
chmod
-R 将目录下所有文件都设置成这样的权限
chmod 744 -R /test
cut用分隔符进行截取
cut -d: -f1 a.txt 以:为分隔符,显示第一列
chattr设置文件的隐藏权限
chattr +参数 文件名 增加权限
chattr -参数 文件名 删除权限
参数:
i 无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除
a 仅允许补充(追加)内容,无法覆盖、删除
S 文件内容更变后立即同步到硬盘
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件的最后访问时间
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 当使用dump命令备份时忽略文件、目录
c 默认将文件或目录进行压缩
u 当删除此文件后依然保存其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
X 可以直接访问压缩文件的内容
lsattr [参数] 文件
a 显示所有文件和目录
l 显示隐藏属性的全称(默认简写成一个字母)
R 递归处理,将指定目录下的所有文件及子目录一并处理
d 若目标文件为目录,请加此参数
date
date "+%Y-%m-%d %H:%M 查看时间:2019-04-09 15:54:37
date -s"20190409 15:05:00"  设定系统时间
date "+%j"  判断今天是一年中的第几天
判断是周几
today=$1
#yesdate=`date -d "1 day ago $date" +"%Y%m%d"`
#mkdir ../data/$date
label=`date -d "$today" +"%w"`
echo $label
if [ $label -eq 1 ]
then
    echo 1
fi
du
du -h 查看文件大小
du -sh * 查看每个文件夹大小
df
df -h 查看内存使用
dd文件内容大小写转换
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要拷贝“块”的个数
conv=ucase 将字母从小写转换成大写
conv=lcase 把字母大写转换成小写
dd if=/dev/zero of=560_file count=1 bs=560M
find
-name 匹配名称
-perm 匹配权限
-user 匹配所有者
-group 匹配所有组
-size 匹配文件的大小(+50k查找查过50k的文件,-50k表示查找小于50k的文件)
find /etc -name "host*"
找到用户linuxprode的文件并复制到/root/findresults目录
重点是“-exec {} \;”其中的{}代表find命令搜索出的文件,记住结果必须是\;
find / -user linuxpeode -exec cp -arf {} /root/findresults/\;
grep 文件查询搜索命令
-b 将可执行文件当文本文件来搜索
-c 仅显示找到的次数
-i 忽略大小写
-n 显示行数
-v 方向选择——仅列出没有“关键词”的行
-E 使用正则
grep 132 a.txt
gzip

压缩:

gzip 源文件
gzip -r 目录

解压:

gzip -d  压缩文件
gunzip  压缩文件
head,tail
head -n 10 cal.txt 显示前10行数据
tail -n 10 cal.txt 显示后10行数据

sh 日志输出

./test.sh > res1.log 或 ./test.sh 1> res1.log

将脚本中的打印语句输出到日志,脚本中的错误不输出

./test.sh 2> res3.log

脚本中的错误输出到日志,打印语句不输出

./test.sh>res2.log 2>&1

都输出到日志

mysqldump

导出数据:
mysqldump -h IP -uroot -ppasswd database table_name > file.sql
导入数据:
mysql -uroot -ppass database < file.sql
uniq去重

https://blog.csdn.net/feng973/article/details/73849586

zcat 03000748.txt.gz | awk -F '|' '{print $5 "|" $3}' | grep [0-9] |sort | uniq |head
zcat 03000748.txt.gz | awk -F '|' '{print $5 "|" $3}' | grep [0-9] |sort | uniq | awk -F '|' '{print $1}' | uniq -c |head
ps查看进程
ps –ef | grep "test*"

rsync

rsync -av /databack root@172.16.78.192::www
从本地机器拷贝文件到远程rsync服务器中。
当DST路径信息包含"::"分隔符时启动该模式

sort排序

zcat 03000748.txt.gz | awk -F '|' '{print $5 "|" $3}' | grep [0-9] |sort |head
location]$ zcat 03000748.txt.gz | awk -F '|' '{print $5 "|" $3}' | grep [0-9] |sort | uniq | awk -F '|' '{print $1}' | uniq -c |sort -rn |head

scp

scp 目标文件 user@IP:/location
也可以从远程服务器下载文件到本地:
scp  user@IP:/location/a.txt /yx
带密码
sshpass -p "pass" scp -r  user@IP:/location/a.txt /yx
sed
需要传入参数时用双引号
打印行:
sed -n ‘3p’ /var/log/yum.log
最后一行
sed -n ‘$p’ /var/log/yum.log
打印几行
sed -n ‘3,9p’ /var/log/yum.log
查看包含固定字符的行:
sed -n ‘/root/p’ yum.log
查看包含‘hhh’的行到包含‘omc’的行之间的行
sed -n ‘/hhh/,/omc/p’ yum.log
打印5行并显示行号
sed –n -e ‘1,5p’ -e ‘=’ yum.log
仅仅显示匹配字符的行号
sed -n ‘/root/=’ yum.log
删除第3到9行
sed ‘3,9d’ /var/log/yum.log
将root替换为world
sed -i 's/root/world/g' yum.log
去除空行:
sed '/^\s*$/d'
sort
cat a.txt | sort | uniq -c|awk '{print $1}'| grep 2 | wc -l
查看一个文件内容相同的行数,grep 2两行相同,grep 3三行相同
tr转换文本中的字符
cat tr.txt | tr [a-z] [A-Z] 将小写的字母转换成大写的字母
touch
-a  修改“访问时间”
-m  修改“更改时间”
-d  修改以上两个都修改
touch -d "2 days ago" a.txt
tar
压缩文件:tar -czvf 压缩包名.tar.gz 文件名
解压文件:tar -xzvf 压缩包名.tar.gz
tar xzvf etc.tar.gz -C /root/etc 指定解压到/root/etc
top
查看本机信息
M 按内存排序

unzip

解压zip
unzip a.zip
useradd
-d 指定用户的家目录(默认为/home/username)
-D 展示默认
-e 账号有效截至日期,格式:YYYY-MM-DD
-g 指定一个初始用户组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的用户组
-s 指定默认的Shell
-u 指定用户的UID
useradd -d /home/linux -u 8888 -s /sbin/nologin liunxprobe
passwd liunxprobe
userdel
-f 强制删除用户,家目录与其相关文件
-r 同时删除用户,家目录与其相关文件
usermod
-d -m -d与-m连用,可重新指定用户的家目录并自动将旧的数据转移过去
-e 用户到期时间“YYYY-MM-DD”
-g 更变所属用户组
-u 修改用户的UID
vim编辑器中快捷键

vim文件对比:https://www.cnblogs.com/zhanglanyun/archive/2011/12/19/2293695.html

dd 删除(剪切)光标所在整行
5dd 删除(剪切)光标处开始的5整行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后
/字符串 在文本中从上至下搜索该字符串
?字符串 在文本中从下至上搜索该字符串
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
:w 保存
:q 退出
:q! 强制退出(放弃修改)
:wq! 强制保存退出
:整数 跳转到该行
set: paste 粘贴
替换:https://www.cnblogs.com/silentmuh/p/11095762.html
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
:Vex 纵向打开另一个标签页,ctrl+w+l 跳向右标签,ctrl+w+h跳向左标签
:Sex 横向打开一个标签页,ctrl+w+k 跳向上标签,ctrl+w+j跳向下标签
wc
wc -l 行数
wc -w 单词字数
wc -c 字节数

whereis

查找软件位置
whereis python

which

查找安装路径
which python2.7
xargs
cat source.txt |  xargs -n 1 -d " " -I {} -P 10 sh -c "./change_redis {} $model $redis_ip_new"
#xargs 过滤器 -n 1使用一个argument,-d 表示分隔符,-I(大写的i) 将每一项名称赋值给{},-P修改最大进程数,进行sh操作-c {}当作输入,运行cat 。。。。
shell脚本

读取文件名

#!/bin/bash
num=1
filePath='dt='$1
for file in `cd $filePath; ls`
do
    echo $file
    mv $filePath/$file $filePath/grid_${2}${num}.dat
    num=$((num+=1))
done

数字加减

 for date in {20200101..20200131};
  do
      echo $date
      yesterday=`expr $date - 1`
      echo $yesterday
      #./run_mdn_count_stat.sh $date
  done

日期加减

a=20200301
b=`date -d "1 day ago $a" +"%Y%m%d"`
echo $b
20200229
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"

sh test.sh one two three four five six
当前脚本名称为 test.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

判断输入是否为空
if [ ! $g ];then echo "IS NULL";  fi
判断用户参数:(注意空格!!!!!)
[ 表达式1 ] 操作符 [ 表达式2 ]
&& 与
|| 或
! 非
[ 整数1 操作符 整数2 ]
-eq 判断是否等于
-ne 判断是否不等于
-gt 判断是否大于
-lt 判断是否小于
-le 判断是否等于或小于
-ge 判断是否大于或等于
[ 字符串1 操作符 字符串2 ]
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
if [ 条件 ]
then
...
elif [ 条件 ]
then
...
else
...
fi

for语句:
for uname in `cat users.txt`
do
...
done

while语句
while true
do
...
exit()
done

while [ 1 ] ;  do du -sh *; sleep 60; done
判断文件夹是否存在
if [ ! -d "/data/" ];then
mkdir /data
else
echo "文件夹已经存在"
fi

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]
定时任务
一次性定时任务
at 23:30
at>cp a.txt b.txt
at>
按Ctrl+D保存退出
长期定时任务
crontab -e [-u 用户名] 创建、编辑计划任务
crontab -l [-u 用户名] 查看计划任务
crontab -r [-u 用户名] 删除计划任务
字段:分钟 小时 日期 月份 星期
分钟 0-59
小时 0-23
日期 1-31
月份 1-12
星期 1-7
命令
文件挂载到磁盘上
共享文件夹设置
ubuntu静态ip设置,并且可以上网
route -n
内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
0.0.0.0         192.168.209.2   0.0.0.0         UG    0      0        0 ens33
192.168.209.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33

vim /etc/netplan/01-network-manager-all.yaml

# Let NetworkManager manage all devices on this system
  #renderer: NetworkManager
network:
  version: 2
  ethernets:
      ens33:
          addresses: [192.168.209.96/24]
          gateway4: 192.168.209.2
          dhcp4: no
          nameservers:
              addresses: [8.8.8.8,8.8.4.4]
              search: [localdomin]

netplan apply (此时ip已经修改,且可以上网)

sudo apt-get install resolvconf

sudo resolvconf -u

vim /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.8.8
nameserver 8.8.4.4

vim /etc/resolvconf/resolv.conf.d/tail
nameserver 8.8.8.8
nameserver 8.8.4.4

reboot

cat /etc/resolv.conf
会多出
nameserver 8.8.8.8
nameserver 8.8.4.4
ens33  #是虚拟机的网卡名称
gateway4:192.168.90.2  # 虚拟机的网关,这里配置为route -n 查看到的网关
dhcp4 :no  #no代表不是用dhcp动态获取ip,yes代表使用dhcp动态获取ip
nameservers:      #是dns地址
addresses: [8.8.8.8, 8.8.4.4]
search:[localdomain]  虚拟机所在的domain
sbt

sbt迁移,拷贝sbt后,需要修改配置文件中的目录

find .sbt/0.13/dependency/ -name *.json -exec sed -i 's@\\\/home\\\/roo\\\/@\\\/home\\\/yx\\\/@g' {} +
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值