Linux 备忘
ls
通配符 | 匹配 |
---|---|
? | 一个字符 |
* | >=0个任意字符 |
[ai] | a 或者 i |
[a-i] | a/b/c/d...i |
[!a] | 除了a |
cat
cat -n test #加上行号
cat -b test #只给有文本的行加上行号
tail
tail -n 2 log_file #只显示最后两行
tail -nf 2 log_file #使得tail命令保持活动状态,并不断显示添加到文件中的内容
head
head -n 2 log_file
touch
touch main.py # 创建main.py,或者更新修改时间、访问时间
touch main.py -a # 只修改访问时间
ls -l --time=atime main.py #显示访问时间,默认系显示修改时间
ps
#默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程
ps -ef #显示所有e进程的完整f信息
ps -el #长格式输出
#S 进程状态。O正在运行、S在休眠、R可运行、Z僵尸、T停止
#C 进程生命周期的CPU利用率
#STIME 进程启动时的系统时间
#CMD 启动程序的名字
#PRT 进程优先级(越大优先级越低)
ps --forest #显示进程的层级关系
grep
grep 要搜的 文件
grep -v #反向搜索
grep -n #同时显示行号
grep -c #统计匹配数量
grep -e t -e f file # 匹配任意模式即可
grep [tf] file # 使用正则
tar
#创建归档
tar -cvf test.tar one two three
#看一下,不提取
tar -tf test.tar
#提取
tar -xvf test.tar
压缩
#压缩
gzip
#看一下
gzcat
#解压缩
gunzip
进程列表
#命令列表
pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls
#进程列表
( pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls )
# 括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。
jobs
# 显示当前运行在后台模式中的所有用户进程(作业)
一旦后台作业完成,就会显示出结束状态。
[1]+ Done sleep 3000 &
# Ctrl+z 切换到后台,并停止运行
# 将指定进程切回前台运行。
fg %1
# 在后台恢复运行
bg %1
#杀死
kill %1
命令 & :将任务进程在后台运行。
jobs:查看后台的进程列表。
fg %后台任务编号:将指定后台任务切换到前台运行。
bg %后台任务编号: 恢复运行后台指定的任务。
kill %后台任务编号:杀死后台指定任务。
环境变量
- 全局环境变量:对于shell会话和所有生成的子shell都是可见的
- 局部变量:则只对创建它们的shell可见
# 查看全部全局变量
printenv
env
#查看某个特定环境变量
printenv HOME
echo $HOME
#使用环境变量,直接作为命令行参数
ls $HOME
#输出全局、局部、用户定义 环境变量
set
#设置局部用户定义变量,推荐用小写,避免重新定义系统环境变量
my_variable="hello world" # = 左右没有空格
echo $my_variable
#fish 设置局部
set name "QWJ"
#设置了局部环境变量后,就能在shell进程的任何地方使用它了。但是,如果生成了另外一个shell,它在子shell中就不可用。
#类似地,如果你在子进程中设置了一个局部变量,那么一旦你退出了子进程,那个局部环境变量就不可用。
#设置全局环境变量: 先创建一个局部环境变量,然后再把它导入全局环境中
my_variable="hello world"
export my_variable
#在生成子shell进程时,只有部分父进程的环境被复制到子shell环境中
#修改子shell中全局环境变量并不会影响到父shell中该变量的值。
#子shell中添加全局环境变量,父进程看不到
#总结:父shell通过全局环境影响子shell。子shell无论如何(增删改)无法影像父shell
#删除
unset name
set name #fish 中
#PATH
#PATH中的目录使用冒号分隔。
#追加
PATH=$PATH:/home/orange/bin
#对PATH变量的修改只能持续到shell退出或重启系统
#环境变量持久化
#/etc/environment中添加环境变量
key=val
#/etc/profile
#系统上每个用户登录时都会执行这个启动文件
#其中包含这样的命令
# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
for profile in /etc/profile.d/*.sh; do
test -r "$profile" && . "$profile"
done
unset profile
fi
# 迭代/etc/profile.d目录下的所有文件,当用户登录时,shell会执行这些文件
#因此也可以在/etc/profile.d目录下见一个脚本,里面设置环境变量,所有用户可见
#针对个别用户,在~/.bashrc
#数组变量
创建、删除用户
useradd -m test #创建用户test,并创建用户HOME目录
useradd -mk test #必须和-m 一起使用,将/etc/skel目录的内容复制到用户的HOME目录
useradd -p passwd #为用户账户指定默认密码
useradd -D #查看默认属性
useradd -D -s /usr/bin/fish #更改默认属性
userdel test #只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件
userdel -r test #如果加上-r参数, userdel会删除用户的HOME目录以及邮件目录。然而,系统上仍可能存有已删除用户的其他文件。这在有些环境中会造成问题。
修改用户
#修改密码
passwd test
#快速修改默认用户登录shell
chsh -s /usr/bin/fish
管理组
groupadd qwj-friends #创建新租,里面没有人
usermod -G qwj-friends test # 将test加到这个组里
#修改组名称
groupmod -n newname oldname
文件权限
#查看默认权限掩码 0022,第一位特殊用途
umask
#权限三位一组,一组看做一个8进制数
#文件全权限 666
#目录全权限 777
#默认文件权限 666-022 = 644 = rw- r-- r--
#默认目录权限 777-022 = 755 = rwx r-x r-x
#设置权限掩码
umask 026
#更改文件权限
chmod 760 file
chmod [ugoa] [+-=] [rwxs]
chmod o+r file
chmod u+x file
chmod u+x file -R #让权限的改变递归地作用到文件和子目录
#改变所属关系
chown orange file #将file的属主设为orange
chown orange.man file #同时将file的所属组设为man
chown .man #只改组
#只有root用户能够改变文件的属主。
#任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。
#chgrp命令可以更改文件或目录的默认属组。
chgrp shared file
#额外信息位
#设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行。
#设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
#SGID位对文件共享非常重要。启用SGID位后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组
mkdir testdir
chgrp shared testdir
chmod g+s testdir
#首先,用mkdir命令来创建希望共享的目录。然后通过chgrp命令将目录的默认属组改为包
#含所有需要共享文件的用户的组(你必须是该组的成员)。最后,将目录的SGID位置位,以保证
#目录中新建文件都用shared作为默认属组。
umask 002
cd testdir
touch newfile
#为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可
#写。在前面的例子中,umask 改成了002,所以文件对属组是可写的。
重定向
date > text #覆盖
data >> text #追加
command < inputfile
wc < text # wc 输出文本行、文本词数、字节数
command << marker #输入marker结束
shell 基础
#!/usr/bin/bash
echo -n "现在的时间: " # -n 不换行
date # 直接输出
echo "让我们看看谁登陆了"
who
name="QWJ"
money=100
today=$(date)
today1=`date`
echo "我叫$name,很高兴认识大家,我有\$$money "
echo "date 命令的输出放在了变量today中,其值$today"
#命令替换会创建一个子shell来运行对应的命令。子shell (subshell)是由运行该脚本的shell
#所创建出来的一个独立的子shell(child shell)。正因如此,由该子shell所执行命令是无法
#使用脚本中所创建的变量的。
#在命令行提示符下使用路径./ 运行命令的话,也会创建出子shell;要是运行命令的时候
#不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。
#在命令行提示符下运行脚本时一定要留心!
echo
var1=3
var2=5
var=$[$var1+$var2]
echo "3+5=$var"
echo "$var1+$var2=$var"
exit 9 # 脚本运行后 echo $? 得到9
#exit $var
shell 结构化语句
#!/usr/bin/bash
#bash shell的 if语句会运行if后面的那个命令。如果该命令的退出状态码(参见第11章)是0
#(该命令成功运行),位于then部分的命令就会被执行。
#if-then语句
if pwd
then
echo "成功运行"
fi
#if-then-else语句
if pwd
then
echo "成功运行"
else
echo "运行失败"
fi
testuser=NoSuchUser
if grep $testuser /etc/passwd
then
echo "用户 $testuser 存在"
else
echo "用户 $testuser 不存在"
if ls /home/$testuser
then
echo "但是 他有一个家目录"
fi
fi
testuser=NoSuchUser
if grep $testuser /etc/passwd
then
echo "用户 $testuser 存在"
elif ls /home/$testuser
then
echo "用户 $testuser 不存在"
echo "但是 他有一个家目录"
else
echo "用户 $testuser 不存在"
fi
#记住,在 elif 语句中,紧跟其后的 else语句属于 elif 代码块。它们并不属于之前的
#if-then代码块。
test
if test conditon
then
commands
fi
if [condition]
then
commands
fi
Linux 备忘的更多相关文章
- linux 备忘记录
杂项记录 Ubuntu 通过/etc/network/interfaces修改IP,重启网络服务貌似也不会生效.可以重启电脑使其生效,或执行: ip addr flush dev ens33 & ...
- linux备忘和卸载
linux上网 -------------------------------------------------linux卸载------------------------------------ ...
- 树莓派 Linux备忘
//更新树莓派 sudo apt-mark hold raspberrypi-bootloader sudo apt-get update sudo apt-get upgrade //配置 rasp ...
- linux备忘
一.数字计算 echo $[3600*24] --只能计算整数echo $((3600*4)) --只能计算整数 expr 3600 \* 24 --注意空格,*要加\,只能计算整数ec ...
- linux备忘簿
1.ubuntu中按ctrl+s锁定屏幕,按ctrl+q解锁. 2.vim中撤销和恢复为u和ctlr+r 3.静态库和动态库编译命令: (1)得到hello.o g++ -c hello.cpp (2 ...
- linux备忘命令
1,安装vim以后把vim中的tab键设置为4个空格 vim ~/.vimrc一下,如果没有会创建新的, 然后添加下面两行: set ts=4 set expandtab 如果第二行内容是noexpa ...
- Linux常用命令速查备忘
Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...
- linux 指令备忘
linux 指令备忘 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和"..& ...
- ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘
本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...
- Linux基础之常用基本命令备忘
Linux基础之常用基本命令备忘 PWD 查询当前所在Linux上的位置 / 根目录 CD(change directory)切换目录 语法 CD /(注意添加空格) LS ...
随机推荐
- QT实现参数批量配置
QT实现批量配置 需求 一些参数需要批量化配置 之前搭建的FPGA的寄存器控制模型 使用AXI-lite搭建 直接操作上位机 这里需要一个可以快速配置所有参数的上位机 需要保存文件,可以保留上一次的参 ...
- multisim中常见的显示器
multisim中常见的显示器 1.实验原理 multisim中做实验仿真一般需要各种各样的仿真器来模拟实验结果.这里列举几种比较常见的显示器以便后面快速选择. 2.实验操作 (1)LED[二极管] ...
- 基于logisim-D触发器设计四人抢答电路
实验1:设计一个简易4人知识竞赛抢答电路,要求是: 裁判掌握一个按钮,作用是给电路复位和发出抢答开始命令;4名竞赛者各掌握一个按钮,每人对应一个指示灯,在主持人发出开始抢答命令后,哪位参赛者先按钮其对 ...
- Chrome浏览器安装离线插件Markdown Here
前言 近期刚开通了微信公众号,想在上面发表一些自己的文章,由于排版问题很浪费时间,公众号后台本身不支持Markdown语法,所以就需要利用Markdown Here插件使得公众号后台支持Markdow ...
- 国民经济行业分类与代码(GB/T 4754-2002、GB/T 4754-2011、GB/T 4754-2017)并存入MySQL数据库【可获取下载】
戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...
- .NET Core 多线程的用法,以及用例
1.使用 Thread 类 Thread 类是 .NET 中最基本的多线程操作方式之一,可以使用它创建并启动新线程.以下是一个简单的例子,创建一个新的线程并运行: using System; usin ...
- 你不知道的java对象序列化的秘密
目录 简介 什么是序列化 重构序列化对象 序列化不是加密 使用真正的加密 使用代理 Serializable和Externalizable的区别 总结 简介 你知道序列化可以使用代理吗?你知道序列化的 ...
- OpenHarmony 4.1 Release版本正式发布,邀您体验
春风轻拂的4月,OpenAtom OpenHarmony(以下简称"OpenHarmony")4.1 Release版本如期而至,开发套件同步升级到API 11 Release. ...
- Docker 14 Docker Compose
概述 使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器. 然而微服务架构的应用系统一般包含若干个微服务,每个微服务 ...
- Qt线程简单使用二:QObject~创建任务类
需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999. 做法: 创建任务类,用来完成任务,创建子线程,将任务类放到子线程中,点击QPushButton后,先发送 ...