如下,使用反引号或者$()
top -p `pgrep proname`
top -p $(pgrep proname)
/etc: 这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的普通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。需要注意的是root用户的home目录不在/home
下,而是单独的/root
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/bin(bin是binary的缩写)下存放着linux的最经常使用的命令,如:ls、mkdir、rm等。
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
系统用户使用的应用程序。
超级用户使用的比较高级的管理程序和系统守护程序。
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
如/var/log这个目录中的文件auth.log,就是每次sudo的记录。打开auth.log就可以看出哪个用户在什么时间请求鉴权,以及鉴权的结果。
/dev(dev是device的缩写)存放的是设备文件。在linux写,一切皆是文件,因此/dev下的每一个文件都对应一个设备。在Linux中访问设备的方式和访问文件的方式是相同的。
使用fdisk查找的就是/dev/下的文件内容
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/random:随机数设备
/dev/urandom:随机数设备
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。如:grup
etc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/etc/hosts*:主机相关配置
/etc/sysconfig/iptables : 防火墙
/etc/vim:vim的配置文件说明
/etc/init.d 目录包含许多系统各种服务的启动和停止脚本。如ssh()、cron(定时任务)
可以用来启动服务,如:
##启动ssh服务
/etc/init.d/ssh start
很多系统默认也有gedit,所有在vim一时不知道怎么使用的情况下,可以使用gedit命令凑合一下
gedit在类似于putty等环境下是无法使用的。这个时候可以使用nano来代替。nano使用起来没有vi/vim那么麻烦。而且在nano界面的下方会有快捷键的提示。
tar命令是大多数发行版自带的,unzip和unrar可能要用包管理器安装一下才有。
目前只接触两个:tar和zip
tar -jcvf filename.tar.bz2 要压缩的文件或文件夹列表
tar -jtvf filename.tar.bz2 查看压缩文件
tar -jxvf filename.tar.bz2 -C 解压缩目录
参数解释
常用组合
tar -tf filename.tar.bz2 查看文件内容
注意:压缩文件夹时,如果没有指定-r
参数,则无法压缩文件夹内的文件。
常用参数有
示例:
zip filename.zip filename1 filename2
常用参数
示例:
unzip filename.zip -d 文件夹
unzip -l xxx.zip (简略模式)
unzip -v xxx.zip (详细模式)
参考:Linux 定时任务
cron有两个配置文件,
定时任务配置到任意一个中都可以。
查看用户下的定时任务:crontab -l或cat /var/spool/cron/用户名
定时任务的文件位置在:/var/spool/cron/
下(实际测试,确实在这里)
日志文件位置/var/log/cron*
(测试中没有找到,因为我自己设置日志位置了?)
##网上说是这个路径/etc/init.d/crond status
##但是实际测试时,在路径/etc/init.d/下并没有找到crond,只找到了cron
/etc/init.d/cron status ##查看状态
/etc/init.d/cron restart ##重启服务
/etc/init.d/crond start/stop/restart/reload
#上述命令等价于sudo service cron {start|stop|status|restart|reload|force-reload}
ps -aux|grep cron
查看用户下的定时任务:crontab -l或cat /var/spool/cron/用户名
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
1.在/home/lihh/txt/下新建文件test.sh,并编写:
#!/bin/bash
nowdate=`date`
echo $nowdate>1.log
2.使用crontab -e
修改定时任务文件,在最后添加如下内容
*/1 * * * * /home/lihh/txt/test.sh
保存后退出
3.如果有异常,会在终端中会显示;如果任务没有问题,显示installing new crontab
在Ubuntu中,可以使用ufw来简化防火墙操作。参考:如何启动、关闭和设置ubuntu防火墙
直接编辑/etc/sysconfig/iptables,文件位置及名称不固定,视系统具体情况而定
-A INPUT -p tcp -m tcp --dport 4000 -j ACCEPT
保存在前面部分
再重启:
service iptables restart,在deepin Linux下,该操作失败,使用下边的方法,虽然也失败了,但好歹生效了
iptables:unrecognized service 的解决方法
上边的这个文章写的比较详细,很有参考价值。我在尝试的时候生效的命令是modprobe ip_tables
reboot
重启,logout
注销,shutdown
关机。这些都需要root权限who
查看:lihh tty1 2018-08-13 12:25 (:0)
sudo pkill -kill -t tty1
,这个tty1和上边who的第二项对应。-s,-n,-r
等参数,可man uname
查看参数说明:
ps -ef
和ps aux
的差别两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
ps -ef
ps -ef
是用标准的格式显示进程的、其格式如下
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:46 ? 00:00:06 /sbin/init auto noprompt
root 2 0 0 14:46 ? 00:00:00 [kthreadd]
其中各列的内容意思如下
UID //用户ID、但输出的是用户名
PID //进程的ID
PPID //父进程ID
C //进程占用CPU的百分比
STIME //进程启动到现在的时间
TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD //命令的名称和参数
ps aux
ps aux
是用BSD的格式来显示、其格式如下
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.1 185232 5748 ? Ss 14:46 0:06 /sbin/init aut
root 2 0.0 0.0 0 0 ? S 14:46 0:00 [kthreadd]
同ps -ef
不同的有列有
USER //用户名
%CPU //进程占用的CPU百分比
%MEM //占用内存的百分比
VSZ //该进程使用的虚拟內存量(KB)
RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
STAT //进程的状态
START //该进程被触发启动时间
TIME //该进程实际使用CPU运行的时间
其中STAT状态位常见的状态字符有
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
//位于后台的进程组;
nohup command 让任务后台执行,通常和&一起使用
nohup find / -name *.log &
该命令会提示“忽略输入并把输出追加到nohup.out”,如果后边没有加&的话,ctrl+c后任务终止;加上&后,在显示出提示信息后,按任意键可以回到终端命令行。使用jobs -l可以看到后台运行任务的状态,也可以使用ps aux|grep
默认情况下,在终端中执行命令,结果会输出到终端屏幕。但是在后头执行的脚本却无法把结果输出到屏幕。
重定向到文件使用>。>表示输出到文件,如果文件已经存在将会覆盖文件中原本的内容如下
date>1.log
如果不想覆盖而是追加,则使用>>
date>>1.log
参考:Shell 教程
注意点
示例:
#!/bin/bash
echo 'hello world'
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
1.两种实现语法
var=$(命令)
var=`命令` # 注意此处不是普通的单引号
注意:
a. 这两种语法均可实现将命令执行结果保存到var变量中,但是特殊情况下两种方式无法得到正确结果
b. 如果命令执行过程中发生错误,则输出的错误信息不会保存到var变量中
在b这种情况下可尝试直接使用var=’命令’将命令作为字符串保存到变量中,这样当引用变量时即执行该命令,自然也在使用处可直接使用到命令返回值,缺点在于多次使用变量命令则多次执行。
var=`date`
echo $var
参考如下
【转】./configure && make && make install详解
我是在安装nginx的过程中开始接触./configure、make和make install的。下边是自己的一些见解
解压的源码包中可以看到configure这个文件,所以./configure就是执行的这个文件。从网上的资料来看,这个文件是用来检查系统的配置是否符合软件的要求。
make将像Java开发的编译一样,检查源码是否有问题
这条命令来进行安装(当然有些软件需要先运行 make check 或 make test来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)
需要先安装pcre
如果遇到error,看一下是不是权限问题,如果是权限问题,那么给个sudo。
tar –zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make
sudo make install
./configure后的–prefix带不带都行,如果不带,则是在/usr/local/nginx下
cd /usr/local/nginx-1.9.1
./configure --prefix=/usr/local/nginx-1.9.1
make
make install
在/usr/local/nginx/sbin下有一个nginx文件,这个就是可执行文件,cd到这个目录下边执行./nginx,如果遇到权限上的问题,请使用sudo
sudo ./nginx
检查nginx.conf配置文件是否正确
sudo ./nginx -t
如果没有问题,结果是这样的
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
否则,请仔细查看输出的信息,并修改
重新加载配置文件,使配置生效
sudo ./nginx -s reload
使用正则配置二级域名的转发失败了,暂时还不知道问题出在哪里。
nginx.conf在usr/local/nginx/conf下,我配置的转发如下
location /{
tcp_nodelay on;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://test.com:8081/;
#以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上
root html;
index index.html index.htm;
}
location /bi/{
tcp_nodelay on;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://10.10.65.84:8077;
#以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上
root html;
index index.html index.htm;
}
这个我参考网上的,但是在实际操作中并没有用到,也不知道是不是有问题。
Nginx正则表达式之匹配操作符详解
如果没有改动配置的话,nginx的配置默认是在usr/local/nginx/logs下
关于日志的参考如下
nginx的日志