xref: /freebsd/usr.bin/fortune/datfiles/freebsd-tips (revision b5a8abe9502e781598dc052698fe7fa5830f59ee)
1Any user that is a member of the wheel group can use "su -" to simulate
2a root login. You can add a user to the wheel group with:
3pw groupmod -n wheel -m user_name
4		-- Konstantinos Konstantinidis <kkonstan@duth.gr>
5%
6By pressing "Scroll Lock" you can use the arrow keys to scroll backward
7through the console output.  Press "Scroll Lock" again to turn it off.
8Don't have a "Scroll Lock" key? The "Pause / Break" key acts alike.
9%
10Can't remember if you've installed a certain port or not? Try "pkg info
11-x port_name".
12%
13Ever wonder what those numbers after command names were, as in cat(1)?  It's
14the section of the manual the man page is in.  "man man" will tell you more.
15		-- David Scheidt <dscheidt@tumbolia.com>
16%
17Forget how to spell a word or a variation of a word? Use
18
19	look portion_of_word_you_know
20		-- Dru <genesis@istar.ca>
21%
22Forget what directory you are in? Type "pwd".
23		-- Dru <genesis@istar.ca>
24%
25Forget when Easter is? Try "ncal -e". If you need the date for Orthodox
26Easter, use "ncal -o" instead.
27		-- Dru <genesis@istar.ca>
28%
29FreeBSD is started up by the program 'init'.  The first thing init does when
30starting multiuser mode (ie, starting the computer up for normal use) is to
31run the shell script /etc/rc.  By reading /etc/rc and the /etc/rc.d/ scripts,
32you can learn a lot about how the system is put together, which again will
33make you more confident about what happens when you do something with it.
34%
35Handy bash(1) prompt:  PS1="\u@\h \w \!$ "
36		-- David Scheidt <dscheidt@tumbolia.com>
37%
38Having trouble using fetch through a firewall? Try setting the environment
39variable FTP_PASSIVE_MODE to yes, and see fetch(3) for more details.
40%
41If other operating systems have damaged your Master Boot Record, you can
42reinstall it with gpart(8). See
43"man gpart" for details.
44%
45If you accidentally end up inside vi, you can quit it by pressing Escape, colon
46(:), q (q), bang (!) and pressing return.
47%
48If you do not want to get beeps in X11 (X Windows), you can turn them off with
49
50	xset b off
51%
52If you have a CD-ROM drive in your machine, you can make the CD-ROM that is
53presently inserted available by typing 'mount /cdrom' as root.  The CD-ROM
54will be available under /cdrom/.  Remember to do 'umount /cdrom' before
55removing the CD-ROM (it will usually not be possible to remove the CD-ROM
56without doing this.)
57
58Note: This tip may not work in all configurations.
59%
60If you need a reminder to leave your terminal, type "leave +hhmm" where
61"hhmm" represents in how many hours and minutes you need to leave.
62		-- Dru <genesis@istar.ca>
63%
64If you need to ask a question on the FreeBSD-questions mailing list then
65
66	https://docs.freebsd.org/en/articles/freebsd-questions
67
68contains lots of useful advice to help you get the best results.
69%
70If you write part of a filename in tcsh,
71pressing TAB will show you the available choices when there
72is more than one, or complete the filename if there's only one match.
73%
74If you `set watch = (0 any any)' in tcsh, you will be notified when
75someone logs in or out of your system.
76%
77If you use the C shell, add the following line to the .cshrc file in your
78home directory to prevent core files from being written to disk:
79
80	limit coredumpsize 0
81		-- Dru <genesis@istar.ca>
82%
83If you want df(1) and other commands to display disk sizes in
84kilobytes instead of 512-byte blocks, set BLOCKSIZE in your
85environment to 'K'.  You can also use 'M' for Megabytes or 'G' for
86Gigabytes.  If you want df(1) to automatically select the best size
87then use 'df -h'.
88%
89If you want to play CDs with FreeBSD, a utility for this is already included.
90Type 'cdcontrol' then 'help' to learn more.  (You may need to set the CDROM
91environment variable in order to make cdcontrol want to start.)
92%
93If you'd like to keep track of applications in the FreeBSD ports tree, take a
94look at FreshPorts;
95
96	https://www.freshports.org/
97%
98In order to make fetch (the FreeBSD downloading tool) ask for
99username/password when it encounters a password-protected web page, you can set
100the environment variable HTTP_AUTH to 'basic:*'.
101%
102In order to search for a string in some files, use 'grep' like this:
103
104	 grep "string" filename1 [filename2 filename3 ...]
105
106This will print out the lines in the files that contain the string.  grep can
107also do a lot more advanced searches - type 'man grep' for details.
108%
109In order to support national characters for European languages in tools like
110less without creating other nationalisation aspects, set the environment
111variable LC_ALL to 'en_US.UTF-8'.
112%
113"man firewall" will give advice for building a FreeBSD firewall using ipfw(8).
114		-- David Scheidt <dscheidt@tumbolia.com>
115%
116"man hier" will explain the way FreeBSD filesystems are normally laid out.
117		-- David Scheidt <dscheidt@tumbolia.com>
118%
119Man pages are divided into section depending on topic.  There are 9 different
120sections numbered from 1 (General Commands) to 9 (Kernel Developer's Manual).
121You can get an introduction to each topic by typing
122
123	man <number> intro
124
125In other words, to get the intro to general commands, type
126
127	man 1 intro
128%
129"man ports" gives many useful hints about installing FreeBSD ports.
130%
131"man security" gives very good advice on how to tune the security of your
132FreeBSD system.
133%
134"man tuning" gives some tips how to tune performance of your FreeBSD system.
135		-- David Scheidt <dscheidt@tumbolia.com>
136%
137Need to do a search in a manpage or in a file you've sent to a pager? Use
138"/search_word". To repeat the same search, type "n" for next or "p" for
139previous.
140		-- Dru <genesis@istar.ca>
141%
142Need to find the location of a program? Use "locate program_name".
143		-- Dru <genesis@istar.ca>
144%
145Need to leave your terminal for a few minutes and don't want to logout?
146Use "lock -p". When you return, use your password as the key to unlock the
147terminal.
148		-- Dru <genesis@istar.ca>
149%
150Need to quickly empty a file? Use ": > filename".
151		-- Dru <genesis@istar.ca>
152%
153Need to quickly return to your home directory? Type "cd".
154		-- Dru <genesis@istar.ca>
155%
156Need to remove all those ^M characters from a DOS file? Try
157
158	tr -d \\r < dosfile > newfile
159		-- Originally by Dru <genesis@istar.ca>
160%
161Need to see the calendar for this month? Simply type "cal".  To see the
162whole year, type "cal -y".
163		-- Dru <genesis@istar.ca>
164%
165Need to see which daemons are listening for connection requests? Use
166"sockstat -4l" for IPv4, and "sockstat -l" for IPv4 and IPv6.
167		-- Dru <genesis@istar.ca>
168%
169Need to see your routing table? Type "netstat -rn". The entry with the G
170flag is your gateway.
171		-- Dru <genesis@istar.ca>
172%
173Nice bash prompt: PS1='(\[$(tput md)\]\t <\w>\[$(tput me)\]) $(echo $?) \$ '
174		-- Mathieu <mathieu@hal.interactionvirtuelle.com>
175%
176Over quota?  "du -sh * | sort -h " will give you a sorted list of your
177directory sizes.
178		-- David Scheidt <dscheidt@tumbolia.com>
179%
180nc(1) (or netcat) is useful not only for redirecting input/output to
181TCP or UDP connections, but also for proxying them with inetd(8).
182%
183sh (the default Bourne shell in FreeBSD) supports command-line editing.  Just
184``set -o emacs'' or ``set -o vi'' to enable it. Use "<TAB>" key to complete
185paths.
186%
187Simple tcsh prompt: set prompt = '%# '
188%
189The default editor in FreeBSD is vi, which is efficient to use when you have
190learned it, but somewhat user-unfriendly.  To use ee (an easier but less
191powerful editor) instead, set the environment variable EDITOR to /usr/bin/ee
192%
193Time to change your password? Type "passwd" and follow the prompts.
194		-- Dru <genesis@istar.ca>
195%
196To change an environment variable in /bin/sh use:
197
198	$ VARIABLE="value"
199	$ export VARIABLE
200%
201To change an environment variable in tcsh you use: setenv NAME "value"
202where NAME is the name of the variable and "value" its new value.
203%
204To clear the screen, use "clear". To re-display your screen buffer, press
205the scroll lock key and use your page up button. When you're finished,
206press the scroll lock key again to get your prompt back.
207		-- Dru <genesis@istar.ca>
208%
209You can press Ctrl-L while in the shell to clear the screen.
210%
211To determine whether a file is a text file, executable, or some other type
212of file, use
213
214	file filename
215		-- Dru <genesis@istar.ca>
216%
217To do a fast search for a file, try
218
219	 locate filename
220
221locate uses a database that is updated every Saturday (assuming your computer
222is running FreeBSD at the time) to quickly find files based on name only.
223%
224To erase a line you've written at the command prompt, use "Ctrl-U".
225		-- Dru <genesis@istar.ca>
226%
227To find out the hostname associated with an IP address, use
228
229	drill -x IP_address
230		-- Dru <genesis@istar.ca>
231%
232To obtain a neat PostScript rendering of a manual page, use ``-t'' switch
233of the man(1) utility: ``man -t <topic>''.  For example:
234
235	man -t grep > grep.ps	# Save the PostScript version to a file
236or
237	man -t printf | lp	# Send the PostScript directly to printer
238%
239To quickly create an empty file, use "touch filename".
240		-- Dru <genesis@istar.ca>
241%
242To read a compressed file without having to first uncompress it, use
243"zcat" or "zless" to view it. There is also "bzcat", "bzless", "xzcat"
244and "xzless".
245		-- Dru <genesis@istar.ca>
246%
247To save disk space in your home directory, compress files you rarely
248use with "gzip filename".
249		-- Dru <genesis@istar.ca>
250%
251To search for files that match a particular name, use find(1); for example
252
253	find / -name "*GENERIC*" -ls
254
255will search '/', and all subdirectories, for files with 'GENERIC' in the name.
256      	--  Stephen Hilton <nospam@hiltonbsd.com>
257%
258To see all of the directories on your FreeBSD system, type
259
260	find / -type d | less
261
262All the files?
263
264	find / -type f | less
265%
266To see how long it takes a command to run, type the word "time" before the
267command name.
268		-- Dru <genesis@istar.ca>
269%
270To see how much disk space is left on your UFS partitions, use
271
272	df -h
273		-- Dru <genesis@istar.ca>
274%
275To see the 10 largest files in a directory or on a UFS partition, use
276
277	du -h /partition_or_directory_name | sort -rh | head
278		-- Dru <genesis@istar.ca>
279%
280To see the IP addresses currently set on your active interfaces, type
281"ifconfig -u".
282		-- Dru <genesis@istar.ca>
283%
284To see the last 10 lines of a long file, use "tail filename". To see the
285first 10 lines, use "head filename". To see new lines as they're appended
286to a file, use "tail -f filename".
287		-- Dru <genesis@istar.ca>
288%
289To see the last time that you logged in, use lastlogin(8).
290		-- Dru <genesis@istar.ca>
291%
292To see the MAC addresses of the NICs on your system, type
293
294	ifconfig -a
295		-- Dru <genesis@istar.ca>
296%
297To see the output from when your computer started, run dmesg(8).  If it has
298been replaced with other messages, look at /var/run/dmesg.boot.
299		-- Francisco Reyes <lists@natserv.com>
300%
301Want colour in your directory listings?  Use "ls -G".  "ls -F" is also useful,
302and they can be combined as "ls -FG".
303%
304Want to find a specific port? Just type the following under /usr/ports
305or one of its subdirectories:
306
307	make search name=<port-name>
308    or
309	make search key=<keyword>
310%
311Want to know how many words, lines, or bytes are contained in a file? Type
312"wc filename".
313		-- Dru <genesis@istar.ca>
314%
315Want to see how much virtual memory you're using? Just type "swapinfo" to
316be shown information about the usage of your swap partitions.
317%
318Want to strip UTF-8 BOM(Byte Order Mark) from given files?
319
320	sed -e '1s/^\xef\xbb\xbf//' < bomfile > newfile
321%
322Want to use sed(1) to edit a file in place?  Well, to replace every 'e' with
323an 'o', in a file named 'foo', you can do:
324
325	sed -i.bak s/e/o/g foo
326
327And you'll get a backup of the original in a file named 'foo.bak', but if you
328want no backup:
329
330	sed -i '' s/e/o/g foo
331%
332When you've made modifications to a file in vi(1) and then find that
333you can't write it, type ``<ESC>!rm -f %'' then ``:w!'' to force the
334write
335
336This won't work if you don't have write permissions to the directory
337and probably won't be suitable if you're editing through a symbolic link.
338
339If you have sudo(8) installed and permissions to use it, type
340``<ESC>w ! sudo tee %'' to force a write.
341%
342You can adjust the volume of various parts of the sound system in your
343computer by typing 'mixer <type>.volume=<volume>%'.  To get a list of what
344you can adjust, just type 'mixer'.
345%
346You can automatically download and install binary packages by doing
347
348	pkg install <package>
349
350This will also automatically install the packages that are dependencies
351for the package you install (ie, the packages it needs in order to work.)
352%
353You can change the video mode on all consoles by adding something like
354the following to /etc/rc.conf:
355
356	allscreens="80x30"
357
358You can use "vidcontrol -i mode | grep T" for a list of supported text
359modes.
360		-- Konstantinos Konstantinidis <kkonstan@duth.gr>
361%
362You can disable tcsh's terminal beep if you `set nobeep'.
363%
364You can install extra packages for FreeBSD by using the ports system.
365If you have installed it, you can download, compile, and install software by
366just typing
367
368	# cd /usr/ports/<category>/<portname>
369	# make install && make clean
370
371as root.  The ports infrastructure will download the software, change it so
372it works on FreeBSD, compile it, install it, register the installation so it
373will be possible to automatically uninstall it, and clean out the temporary
374working space it used.  You can remove an installed port you decide you do not
375want after all by typing
376
377	# cd /usr/ports/<category>/<portname>
378	# make deinstall
379
380as root.
381%
382You can look through a file in a nice text-based interface by typing
383
384	less filename
385%
386You can make a log of your terminal session with script(1).
387%
388You can often get answers to your questions about FreeBSD by searching in the
389FreeBSD mailing list archives at
390
391	https://lists.freebsd.org/search
392%
393You can open up a new split-screen window in (n)vi with :N or :E and then
394use ^w to switch between the two.
395%
396You can permanently set environment variables for your shell by putting them
397in a startup file for the shell.  The name of the startup file varies
398depending on the shell - csh and tcsh uses .login, bash, sh, ksh and zsh use
399.profile.  When using bash, sh, ksh or zsh, don't forget to export the
400variable.
401%
402You can press Ctrl-D to quickly exit from a shell, or logout from a
403login shell.
404		-- Konstantinos Konstantinidis <kkonstan@duth.gr>
405%
406You can press up-arrow or down-arrow to walk through a list of
407previous commands in tcsh.
408%
409You can search for documentation on a keyword by typing
410
411	apropos keyword
412%
413You can `set autologout = 30' to have tcsh log you off automatically
414if you leave the shell idle for more than 30 minutes.
415%
416You can use aliases to decrease the amount of typing you need to do to get
417commands you commonly use.  Examples of fairly popular aliases include (in
418Bourne shell style, as in /bin/sh, bash, ksh, and zsh):
419
420	alias lf="ls -FA"
421	alias ll="ls -lA"
422	alias su="su -m"
423
424In csh or tcsh, these would be
425
426	alias lf ls -FA
427	alias ll ls -lA
428	alias su su -m
429
430To remove an alias, you can usually use 'unalias aliasname'.  To list all
431aliases, you can usually type just 'alias'.
432%
433You can use /etc/make.conf to control the options used to compile software
434on this system.  Example entries are in
435/usr/share/examples/etc/make.conf and in make.conf(5).
436For options that are set for building FreeBSD's kernel and its world, see
437src.conf(5).
438%
439You can use "pkg info" to see a list of packages you have installed.
440%
441You can use the 'fetch' command to retrieve files over ftp, http or https.
442
443	 fetch https://www.FreeBSD.org/images/beastie.png
444
445will download the beastie image from the FreeBSD web site.
446%
447You can use "whereis" to search standard binary, manual page and source
448directories for the specified programs. This can be particularly handy
449when you are trying to find where in the ports tree an application is.
450
451Try "whereis firefox" and "whereis whereis".
452		-- Konstantinos Konstantinidis <kkonstan@duth.gr>
453%
454Want to run the same command again?
455In many shells (e.g., tcsh, zsh, bash) you can type "!!".
456%
457Want to go the directory you were just in?
458Type "cd -"
459%
460Can't delete /usr/obj? Enter "chflags -R noschg /usr/obj" to remove the
461system immutable flag for all files in /usr/obj.
462
463		-- Lars Engels <lme@FreeBSD.org>
464%
465Want to list all files of an installed package? Enter
466"pkg info -l packagename".
467
468		-- Lars Engels <lme@FreeBSD.org>
469%
470Are you looking for a package? Search for it with
471"pkg search part_of_package_name"
472
473		-- Lars Engels <lme@FreeBSD.org>
474%
475If you want to recursively copy a directory preserving file and directory
476attributes use
477"cp -a source target"
478
479		-- Lars Engels <lme@FreeBSD.org>
480%
481Do you wonder what a terminal program is doing at the moment? dd(1) does not
482show any throughput? Hit "^T" (Control + t) to send SIGINFO to the process
483and see what it is doing.
484
485		-- Lars Engels <lme@FreeBSD.org>
486%
487Do you want to know which version of FreeBSD you are running? Enter
488"freebsd-version -ku" to display kernel and userland version.
489
490		-- Lars Engels <lme@FreeBSD.org>
491%
492If you want to end one or more processes at a time using a regular expression
493enter "pkill regex".
494
495		-- Lars Engels <lme@FreeBSD.org>
496%
497Do you want to run a program directly after some other process has ended? Use
498"pwait pid && new_program"
499
500		-- Lars Engels <lme@FreeBSD.org>
501%
502When you want your users to be able to reboot or shutdown FreeBSD, add them
503to the group "operator" and they are allowed to use shutdown(8) and poweroff(8).
504
505		-- Lars Engels <lme@FreeBSD.org>
506%
507If you need to create a FAT32 formatted USB thumb drive, find out its devicename
508running dmesg(8) after inserting it. Then create an MBR schema, a single slice and
509format it:
510
511# gpart create -s MBR ${devicename}
512# gpart add -t fat32 ${devicename}
513# newfs_msdos -F 32 -L thumbdrive ${devicename}s1
514
515		-- Lars Engels <lme@FreeBSD.org>
516%
517If you want to get a sorted list of all services that are started when FreeBSD boots,
518enter "service -e".
519
520		-- Lars Engels <lme@FreeBSD.org>
521%
522To easily configure your installed FreeBSD use bsdconfig(8).
523
524		-- Lars Engels <lme@FreeBSD.org>
525%
526After you compiled and installed a new version of FreeBSD, use etcupdate(8) to merge
527configuration updates.
528Run "etcupdate extract" once when your sources match your running system, then run
529"etcupdate" after every upgrade and "etcupdate resolve" to resolve any conflicts.
530
531		-- Lars Engels <lme@FreeBSD.org>
532%
533Do you want to do a binary upgrade of your running FreeBSD installation? Use freebsd-update(8).
534
535To install updates and patches for the running branch use
536# freebsd-update fetch
537# freebsd-update install
538
539Then, to upgrade to a newer release use
540# freebsd-update upgrade -r ${name_of_release}
541
542		-- Lars Engels <lme@FreeBSD.org>
543%
544To run rc scripts in /etc/rc.d and /usr/local/etc/rc.d use service(8).
545Run "service ${name_of_rc_script} start" to start a daemon and
546"service ${name_of_rc_script} stop" to stop it.
547
548		-- Lars Engels <lme@FreeBSD.org>
549%
550If you don't want to edit /etc/rc.conf directly, use sysrc(8) to add and remove entries.
551Use "sysrc name=value" to add an entry and "sysrc -x name" to delete an entry.
552
553		-- Lars Engels <lme@FreeBSD.org>
554%
555You can upload the dmesg of your system to help developers get an overview of commonly
556used hardware and peripherals for FreeBSD. Use the curl package to upload it like this:
557curl -v -d "nickname=$USER" -d "description=FreeBSD/$(uname -m) on \
558$(kenv smbios.system.maker) $(kenv smbios.system.product)" -d "do=addd" \
559--data-urlencode 'dmesg@/var/run/dmesg.boot' http://dmesgd.nycbug.org/index.cgi
560%
561Want to know how much memory (in bytes) your machine has installed? Let
562sysctl(8) tell you with the following command:
563
564sysctl hw.realmem
565
566The realmem value is memory before the kernel and modules are loaded, whereas
567hw.physmem is what is left after they were loaded.
568
569The number of active CPUs is displayed using this command:
570
571sysctl hw.ncpu
572
573		-- Benedict Reuschling <bcr@FreeBSD.org>
574%
575When using ZFS as the file system the "df" command is reporting the pool size
576and not file system sizes. It also does not know about descendent ZFS
577datasets, snapshots, quotas, and reservations with their individual space usage.
578Use the built-in "zfs list" command to get a better overview of space usage:
579
580zfs list -o space
581
582		-- Benedict Reuschling <bcr@FreeBSD.org>
583%
584To learn more about what your system is doing, take a look at systat(1). For
585example, to get various statistics related to virtual memory usage, process
586scheduling, device interrupts, system name translation caching, and disk I/O,
587enter the following:
588
589systat -vmstat
590
591Other values are icmp, icmp6, ifstat, iostat, ip, ip6, netstat, pigs, sctp,
592swap, tcp, or zarc. You can switch between displays using :<display> and exit
593back to your shell by typing
594
595:quit
596
597		-- Benedict Reuschling <bcr@FreeBSD.org>
598%
599To set a quota of 10 GB for the user named foo on a ZFS dataset, run the
600following command:
601
602# zfs set userquota@foo=10G pool/home/foo
603
604The zfs userspace command can display the quota and current space usage:
605
606# zfs userspace pool/home/foo
607
608To unset a quota, assign "none" as the value.
609		-- Benedict Reuschling <bcr@FreeBSD.org>
610%
611ZFS can display I/O statistics for a given pool using the iostat subcommand.
612By default, it will display one line of current activity.  To display stats
613every 5 seconds run the following command (cancel with CTRL+C):
614
615zpool iostat 5
616
617To view individual disk activities, specify the -v parameter:
618
619zpool iostat -v
620
621Of course, both can be combined. For more options, see zpool(8).
622		-- Benedict Reuschling <bcr@FreeBSD.org>
623%
624FreeBSD's top(1) utility displays CPU statistics by default.
625To display I/O activity for each process instead, run top like this:
626
627top -m io
628
629		-- Benedict Reuschling <bcr@FreeBSD.org>
630%
631ZFS keeps a history of commands run against a specific pool using the
632history subcommand to zpool:
633
634zpool history
635
636More details are available using the -i and -l parameters. Note that ZFS
637will not keep the complete pool history forever and will remove older
638events in favor of never ones.
639		-- Benedict Reuschling <bcr@FreeBSD.org>
640%
641To display the compression ratio for the ZFS dataset /var/log on the pool
642mypool, run the following command:
643
644zfs get refcompressratio mypool/var/log
645
646The refcompressratio will only display the compression ratio for that specific
647dataset, not the descendant datasets. To include the child datasets, the
648command looks like this:
649
650zfs get compressratio mypool/var
651
652		-- Benedict Reuschling <bcr@FreeBSD.org>
653%
654You can limit the depth of the displayed datasets in the "zfs list" output
655using the -d parameter. To display only the first level of datasets below
656mypool/usr and not the ones deeper than those, run this command:
657
658zfs list -d 1 mypool/usr
659
660		-- Benedict Reuschling <bcr@FreeBSD.org>
661%
662The "zfs list" command can be filtered in multiple ways. To display just
663the dataset name, use the -o parameter:
664
665zfs list -o name mypool/usr
666
667More columns and their order can be defined by separating them with commas:
668
669zfs list -o mountpoint,name,avail
670
671		-- Benedict Reuschling <bcr@FreeBSD.org>
672%
673The output of "zfs list" can be sorted by a specific column using -s.  To
674sort the datasets by the "used" column in ascending order, run this command:
675
676zfs list -s used
677
678To sort in descending order instead, use -S:
679
680zfs list -S used
681
682		-- Benedict Reuschling <bcr@FreeBSD.org>
683%
684To make the "zfs list" output more script-friendly, you can suppress the
685output of the headers for each column by passing the -H parameter:
686
687zfs list -H
688
689Another helpful option for script writers is -p, which displays the numbers
690in non-rounded, exact values:
691
692zfs list -p
693
694		-- Benedict Reuschling <bcr@FreeBSD.org>
695%
696Before deleting a dataset or snapshot, perform a dry run using the -n
697parameter. This is to make sure you really want to delete just that
698dataset/snapshot and not any dependent ones. ZFS will display the resulting
699action when -n is combined with the -v option without actually performing
700it:
701
702zfs destroy -nrv mypool@mysnap
703
704Once you are sure this is exactly what you intend to do, remove the -n
705parameter to execute the destroy operation.
706		-- Benedict Reuschling <bcr@FreeBSD.org>
707%
708You can delete a range of ZFS snapshots (a-z) in multiple ways.
709The following will delete d and all earlier snapshots:
710
711zfs destroy mypool/data@%d
712
713To delete d and all later snapshots:
714
715zfs destroy mypool/data@d%
716
717To delete all dataset snapshots:
718
719zfs destroy mypool/data@%
720
721Make sure to let ZFS perform a dry run (-n option) first and display (-v) what
722it would do to confirm that the delete operation is removing exactly what you
723intended.
724		-- Benedict Reuschling <bcr@FreeBSD.org>
725%
726To set a custom ZFS property on the mypool pool, you need to provide it
727using the "key1:key2=value" syntax, where the colon (:) is used as the
728separator and identifier from the built-in ZFS properties:
729
730# zfs set warranty:expires=2038-01-19 mypool
731
732The custom property is applied to all datasets and can be queried like any
733built-in properties using zfs get:
734
735zfs get warranty:expires mypool
736
737To reset the value of a custom property, use the inherit subcommand:
738
739# zfs inherit warranty:expires mypool
740
741Removing a custom property from a pool is done using the -r flag to the
742"zfs inherit" command:
743
744# zfs inherit -r warranty:expires mypool
745
746		-- Benedict Reuschling <bcr@FreeBSD.org>
747%
748To delete a range of ZFS snapshots, use the % (percent) character after the
749full path to the first snapshot that should be included. For example, to
750simulate deleting snapshots a through (including) d, use this command:
751
752# zfs destroy -rvn mypool/tmp@a%d
753
754Once you are sure that this is what you want, remove the -n option:
755
756# zfs destroy -rv mypool/tmp@a%d
757
758		-- Benedict Reuschling <bcr@FreeBSD.org>
759%
760You can prevent the removal of a ZFS snapshot by using the hold subcommand.
761For example, to prevent the snapshot called milestone from deletion, run the
762following command:
763
764# zfs hold milestone_hold mypool/projects@my_milestone
765
766The "zfs holds" command will list all current snapshots that are protected
767this way (-r for a recursive list):
768
769# zfs holds -r mypool
770
771The TIMESTAMP column in the output of the above command is from when the
772hold was created, not the snapshot it holds. The "zfs destroy" command will
773echo a "dataset is busy" message on the console when it encounters a hold.
774Use "zfs release" to release the hold on the snapshot:
775
776# zfs release milestone_hold mypool/projects@my_milestone
777
778		-- Benedict Reuschling <bcr@FreeBSD.org>
779%
780A user "sender" needs the following permissions set to send a ZFS dataset:
781
782# zfs allow -u sender send,snapshot txpool
783
784On the receiving side, the user "receiver" requires these permissions:
785
786# zfs allow -u receiver compression,mountpoint,mount,create,receive rxpool
787
788		-- Benedict Reuschling <bcr@FreeBSD.org>
789%
790Don't let your zpool fill up completely by creating a dataset with
791reservation.
792
793# zfs create -o refreservation=<5% of total pool space> <poolname>/reserved
794
795You can always shrink the reserve if you need the space, but your pool will
796always have space left this way.
797
798		-- Benedict Reuschling <bcr@FreeBSD.org>
799%
800Sometimes a single slow HDD can cripple the performance of your entire system.
801You can spot one like this:
802
803# gstat -I5s | sort -rn -k9 | head
804
805		-- Alan Somers <asomers@FreeBSD.org>
806%
807FreeBSD's ps(1) can create a dependency tree based on parent/child
808relationships between processes, like this:
809
810$ ps -d
811
812		-- Daniel Ebdrup Jensen <debdrup@FreeBSD.org>
813%
814It is possible to measure the resident memory set:
815
816$ vmstat -o | awk 'NR>1 { t[$7] += $1 } \
817END { for (i in t) printf "%s %d\n",i,t[i] }'
818
819The rows have the following meaning:
820df = default (not assigned a specific pager)
821sw = swap
822df = virtual
823vn = vnode
824ph = heap
825md = memory device
826
827This will be reported in number of pages, so it needs to be multiplied by the
828page size of the architecture which can be found via:
829
830$ sysctl -n hw.pagesize
831
832		-- Daniel Ebdrup Jensen <debdrup@FreeBSD.org>
833%
834To establish a serial connection to anything including a USB device,
835nothing more than cu(1) is needed:
836
837$ cu -s 115200 -l /dev/ttyU0
838
839		-- Daniel Ebdrup Jensen <debdrup@FreeBSD.org>
840%
841You can control kernel stack(9) traces on ^T (tty info) by setting
842kern.tty_info_kstacks to 0 (off), 1 (on), or 2 (verbose), e.g.:
843
844# sysctl kern.tty_info_kstacks=2
845
846		-- Michael Gmelin <grembo@FreeBSD.org>
847%
848To determine which fonts provide a particular Unicode character, fc-list from
849the fontconfig package may be helpful.  For example, if your friend complains
850that the emoji you sent won't display, run fc-list with the hex value of the
851character to determine which font your friend should install.
852
853$ fc-list ':charset=0x1F4A1'
854/usr/local/share/fonts/noto/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular
855
856$ pkg which /usr/local/share/fonts/noto/NotoColorEmoji.ttf
857/usr/local/share/fonts/noto/NotoColorEmoji.ttf was installed by package noto-emoji-2.042
858%
859When netstat reports every 8 seconds, it tells traffic in bits per second:
860
861$ netstat -I bge0 8
862%
863